5 votos

Multivariate GARCH en Python

¿Existe un paquete para ejecutar modelos GARCH multivariados simplificados en Python? Encontré el paquete Arch pero parece que solo funciona en modelos univariados. Me gustaría probar algunos de los métodos más simples descritos en Bauwends et. al. (2006) como la correlación condicional constante.

Se prefieren las bibliotecas de Python aunque también jugaré con R.

4voto

Brannon Puntos 12633

PYTHON
He encontrado esta clase de la librería statsmodels para el cálculo de modelos Garch.
Desafortunadamente, no he encontrado una clase o librería MGARCH. A continuación puedes ver la información básica sobre los modelos garch en la clase mencionada de statsmodels. Probablemente tendrás que implementarlo por tu cuenta en python, por lo que esta clase podría servir como punto de inicio.

hoja de ruta para garch:
* caso simple
* valores iniciales: fórmulas explícitas garch11
* arma-garch, se asume separable, Hessiano blockdiagonal
* otros garch estándar: egarch, pgarch,
* distribuciones no normales
* otros métodos: pronóstico, curvas de impacto de noticias (respuesta de impulso)

R
En R hay un paquete llamado mgarch que está disponible en este repositorio de github y aquí puedes encontrar algunos ejemplos.

3voto

manicphase Puntos 106

Recientemente me encontré con el mismo problema y encontré una manera de lograrlo usando R en Python.

   from rpy2.robjects import pandas2ri
   import rpy2.robjects as objects 
   import numpy as np

    # pd_rets - un dataframe de pandas de retornos diarios, donde los nombres de las columnas son los tickers de las acciones e index es los días de operación.

    # Calcular DCC-Garch en R usando el paquete rmgarch
    pandas2ri.activate()
    r_rets = pandas2ri.py2ri(pd_rets) # convertir los retornos diarios de un dataframe de pandas en Python a un dataframe en R
    r_dccgarch_code = """
                    library('rmgarch')
                    function(r_rets, n_days){
                            univariate_spec <- ugarchspec(mean.model = list(armaOrder = c(0,0)),
                                                        variance.model = list(garchOrder = c(1,1),
                                                                            variance.targeting = FALSE, 
                                                                            model = "sGARCH"),
                                                        distribution.model = "norm")
                            n <- dim(r_rets)[2]
                            dcc_spec <- dccspec(uspec = multispec(replicate(n, univariate_spec)),
                                                dccOrder = c(1,1),
                                                distribution = "mvnorm")
                            dcc_fit <- dccfit(dcc_spec, data=r_rets)
                            forecasts <- dccforecast(dcc_fit, n.ahead = n_days)
                            list(dcc_fit, forecasts@mforecast$H)
                    }
                    """
    r_dccgarch = robjects.r(r_dccgarch_code)
    r_res = r_dccgarch(r_rets,n_days)
    pandas2ri.deactivate()
    # fin de R

    r_dccgarch_model = r_res[0] # parámetros del modelo
    r_forecast_cov = r_res[1] # matrices de covarianza pronosticadas para n_days

    # acceder y transformar las matrices de covarianza en formato R
    n_cols = pd_rets.shape[1] # obtener el número de acciones en pd_rets
    n_elements = n_cols*n_cols # el número de elementos en cada matriz de covarianza
    n_matrix = int(len(r_forecast_cov[0])/(n_elements))
    print(n_matrix) # esto debería ser igual a n_days

    # sumar las matrices de covarianza pronosticadas diarias 
    cov_matrix = 0
    for i in range(n_matrix):
        i_matrix = np.array([v for v in r_forecast_cov[0][i*n_elements:(i+1)*n_elements]])
        i_matrix = i_matrix.reshape(n_cols,n_cols)    
        cov_matrix += i_matrix

1voto

BrianWa Puntos 399

Pequeña corrección: el paquete en R se llama rmgarch, no mgarch. Funciona bien con rugarch, que proporciona una variedad de modelos GARCH univariados. Ambos paquetes permiten la computación en paralelo en un clúster local y devuelven un conjunto completo y detallado de parámetros ajustados, especificaciones del modelo, etc. Proporcioné algunos enlaces adicionales en esta publicación.

1voto

firegrass Puntos 582

Mgarch es un paquete de Python para predecir la volatilidad de los rendimientos diarios en mercados financieros.

DCC-GARCH(1,1) para distribución multivariante normal y t de Student.

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