4 votos

Paquete MSGARCH en R

Estoy utilizando el paquete MSGARCH en R para ajustar un modelo GARCH de conmutación de Markov. Ajusté el modelo GARCH utilizando fit.MLE (así que la máxima verosimilitud estándar), utilizando tres regímenes. Los parámetros son estimados y dados por el vector:

$\theta = (\alpha_{11}, \alpha_{12}, \alpha_{13}, \alpha_{21}, \alpha_{22}, \alpha_{23}, \beta_{1}, \beta_{2}, \beta_{3}, P_{1}, P_{2}, P_{2}, P_{4}, P_5, P_6)$ .

Donde la j de $\alpha_{ij}$ , $\beta_{j}$ denota el estado. La salida $P_i$ es de sólo seis elementos y con valores negativos. No son los nueve elementos esperados de la matriz de probabilidad de transición. ¿Alguien sabe qué es esto? O cómo buscar la matriz correcta $P$ ?

Este es el código para la salida del vector anterior (importsnp es una serie de retornos logarítmicos):

require(MSGARCH)

library(coda)

snp <- as.matrix(importsnp)*100

spec <- MSGARCH::create.spec(model = c("sGARCH","sGARCH","sGARCH"), 
                             distribution = c("norm","norm","norm"), 
                             do.skew = c(FALSE,FALSE,FALSE), 
                             do.mix = FALSE, 
                             do.shape.ind = FALSE)
set.seed(123) 

fit <- MSGARCH::fit.mle(spec = spec, y = snp)

theta <- fit$theta

1 votos

Bienvenido a Quant.SE. Sería útil si pudieras proporcionar tu código y la salida y especificar exactamente lo que intentas conseguir y dónde está el problema.

1 votos

Esto es mucho mejor, sería bueno añadir el código que crea los retornos (el importsnp variable) pero espero que esto se pueda responder ahora.

0 votos

Importsnp es sólo una serie arbitraria. El problema que sigo teniendo es con el objeto de salida $\theta$ .

3voto

Aaron J Spetner Puntos 31

Para una salida más legible del ajuste puede utilizar la función summary():

require(MSGARCH)

data("sp500")

snp <- as.matrix(sp500)

spec <- MSGARCH::create.spec(model = c("sGARCH","sGARCH","sGARCH"), 
                             distribution = c("norm","norm","norm"), 
                             do.skew = c(FALSE,FALSE,FALSE), 
                             do.mix = FALSE, 
                             do.shape.ind = FALSE)
set.seed(123) 

fit <- MSGARCH::fit.mle(spec = spec, y = snp, ctr = list(do.init = FALSE, do.enhance.theta0 = TRUE))

summary(fit)
[1] "Specification Type: Markov-Switching"
[1] "Specification Name: sGARCH_normal_sym sGARCH_normal_sym sGARCH_normal_sym"
[1] "Number of parameters in each variance model: 3 3 3"
[1] "Number of parameters in each distribution: 0 0 0"
[1] "Default parameters:"
     alpha0_1 alpha1_1 beta_1 alpha0_2 alpha1_2 beta_2 alpha0_3 alpha1_3 beta_3         P         P         P         P
[1,]      0.1      0.1    0.8      0.1      0.1    0.8      0.1      0.1    0.8 0.3333333 0.3333333 0.3333333 0.3333333
             P         P
[1,] 0.3333333 0.3333333
[1] "DEoptim initialization: FALSE"
[1] "Fitted Parameters:"
         alpha0_1   alpha1_1   beta_1 alpha0_2   alpha1_2    beta_2  alpha0_3  alpha1_3   beta_3       P          P
[1,] 0.0003991736 0.07382696 0.925262    1e-04 0.02250533 0.8543849 0.0848339 0.1587613 0.836886 0.72136 0.03285818
             P          P         P         P
[1,] 0.1856006 0.00248085 0.3555367 0.3865909
[1] "Transition matrix:"
               t = 1      t = 2     t = 3
t + 1 = 1 0.72135997 0.18560065 0.3555367
t + 1 = 2 0.03285818 0.00248085 0.3865909
t + 1 = 3 0.24578185 0.81191850 0.2578724
[1] "Stable probabilities:"
        Stable probabilities
State 1            0.5214967
State 2            0.1460292
State 3            0.3324741
[1] "Unconditional volatility:"
       State 1    State 2 State 3
[1,] 0.6619352 0.02850059 4.41474
Log-kernel:  -6517.631 
AIC:  13209.02 
BIC:  13305.3

Si sólo quiere dar salida a la matriz de transición, puede utilizar

MSGARCH::transmat(fit)
               t = 1      t = 2     t = 3
t + 1 = 1 0.72135997 0.18560065 0.3555367
t + 1 = 2 0.03285818 0.00248085 0.3865909
t + 1 = 3 0.24578185 0.81191850 0.2578724

Hay 6 parámetros porque los otros 3 son redundantes ya que es 1 menos la suma de las otras probabilidades asociadas al mismo estado.

El valor negativo era un error que acaba de ser corregido en la versión de desarrollo donde la función que transformaba el vector de parámetros en la matriz de transición era incorrecta cuando el número de estados era superior a 2. Además, a veces obteníamos un valor negativo cuando el optimizador no convergía. Hemos realizado un cambio en el esquema de optimización para evitar esto en la medida de lo posible. Puedes descargar el código fuente o el tarball de la versión de desarrollo en Github. Pronto estará en CRAN.

0 votos

Gracias por la demostración. ¿Cómo modelar cuando las probabilidades de transición son función de una o dos variables económicas? Como referencia: doi.org/10.1016/j.ememar.2008.02.005

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