4 votos

Error al intentar estimar un modelo de Markov-switching Var en R

Estoy tratando de estimar un Markov-switching VAR en R usando el comando msvar . Estas son las primeras 10 entradas de mis dos series temporales. Tengo 798 . Cuando intento ejecutar esto, recibo un mensaje de error.

a <- c(1.998513, 1.995302, 2.030693, 2.122130, 2.236770, 2.314639, 2.365214, 2.455784, 2.530696, 2.596537)
b <- c(0.6421369, 0.6341437, 0.6494933, 0.6760939, 0.7113511, 0.7173038, 0.7250545, 0.7812490, 0.7874657, 0.8275209)
x <- matrix (NA,10,2)
x[,1] <- a
x[,2] <- b
time.seriesx <- ts(x)
markov.switchingx <- msvar(time.seriesx, p = 2, h = 2, niterblkopt = 10)

El mensaje de error que recibo es el siguiente:

Error en optim(par = c(beta0.it), fn = llf.msar, Y = Yregmat, X = Xregmat: el valor inicial en "vmmin" no es finito.

¿Alguien que pueda ayudarme? Gracias

0 votos

¿Por qué no intentas establecer el valor inicial manualmente?

0 votos

@RichardHardy ¿Cómo?

1 votos

Como acabo de leer el paquete fue retirado de cran: cran.r-project.org/web/packages/MSVAR/index.html Así que tal vez pruebe otro paquete. si tiene que usarlo, entonces por favor comparta con nosotros lo que dice la ayuda ?msvar.

2voto

vijay Puntos 6

Para cualquiera que busque una respuesta a una pregunta similar a la del OP:

MS-VAR sólo funciona para estacionario series temporales (según tengo entendido). Tienes que eliminar la tendencia de tu serie temporal: ya sea restando la media, restando la tendencia lineal, la media móvil, una curva suavizada, etc., lo que mejor funcione para tu problema actual o esté respaldado por la teoría.

Los errores que da el código son muy crípticos, pero la idea básica es que la función de pérdida logarítmica (para la estimación ML de los parámetros) en tu caso no estaba inicializada porque los supuestos del modelo no se cumplían.

Parece que el siguiente código de R hace lo que quieres. Hace poco que he empezado a trabajar con modelos MS-VAR, así que tómelo con pinzas, sin embargo esto es al menos una respuesta real... (Restar la tendencia lineal da una variable de Régimen mucho más comprensible que sólo restar la media).

library("MSBVAR")
a <- c(1.998513, 1.995302, 2.030693, 2.122130, 2.236770, 2.314639, 2.365214, 2.455784, 2.530696, 2.596537, 2.647573, 2.735317, 2.705269, 2.699783, 2.659748, 2.641353, 2.641825, 2.613648, 2.627755, 2.627383)
b <- c(0.6421369, 0.6341437, 0.6494933, 0.6760939, 0.7113511, 0.7173038, 0.7250545, 0.7812490, 0.7874657, 0.8275209, 0.9079720, 0.9455602, 0.9426856, 0.9234943, 0.9072791, 0.9194827, 0.9021116, 0.8971606, 0.9047334, 0.8965786)

library("pracma")
xa = detrend(a) #a - mean(a) #detrend this
xb = detrend(b) #b - mean(b) #detrend this

x <- matrix (NA,20,2)
x[,1] <- xa
x[,2] <- xb
ts_x <- ts(x)

set.seed(1)
m_x <- msvar(ts_x, p = 2, h = 2, niterblkopt = 10)
fp <- ts(m_x$fp)

plot(ts_x)
plot(fp)

1voto

scottishwildcat Puntos 146

Creo que tu serie temporal es demasiado corta. La suya tiene una longitud de 10 y se estima con el parámetro niterblkopt = 10 .

Por ejemplo, si tienes una serie temporal el doble de larga, entonces funciona:

library(MSBVAR)

a <- c(1.998513, 1.995302, 2.030693, 2.122130, 2.236770, 2.314639, 2.365214, 2.455784, 2.530696, 2.596537)
b <- c(0.6421369, 0.6341437, 0.6494933, 0.6760939, 0.7113511, 0.7173038, 0.7250545, 0.7812490, 0.7874657, 0.8275209)
x <- matrix (NA,10,2)
x[,1] <- a
x[,2] <- b
x = rbind(x,x)
time.seriesx <- ts(x)
markov.switchingx <- msvar(time.seriesx, p = 2, h = 2, niterblkopt = 10)

¿Puede utilizar más datos? Parece que hay muy pocos datos para el modelo - o al menos para el algoritmo.

0 votos

Tengo 798 entradas en mi conjunto de datos pero me sigue dando el mismo error. ¿Alguna idea de por qué?

0 votos

¿Qué frecuencia tienes en tus datos? en el ejemplo anterior es 1. ¿Qué pasa si cortas los primeros 20 datos y los publicas?

0 votos

La frecuencia es 1. a <- c(1,998513, 1,995302, 2,030693, 2,122130, 2,236770, 2,314639, 2,365214, 2,455784, 2. 530696, 2.596537, 2.647573 2.735317, 2.705269, 2.699783, 2.659748, 2.641353, 2.641825, 2.613648, 2.627755, 2. 627383) b <- c(0,6421369, 0,6341437, 0,6494933, 0,6760939, 0,7113511, 0,7173038, 0,7250545, 0,7812490, 0,7874657, 0. 8275209, 0.9079720, 0.9455602, 0.9426856, 0.9234943, 0.9072791, 0.9194827, 0.9021116, 0.8971606, 0.9047334, 0.8965786)

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X