He ajustado un modelo ARIMA (1,1,1) -GARCH (1,1) a la serie temporal de precios de registro del tipo de cambio AUD / USD muestreados a intervalos de un minuto en el transcurso de varios años, lo que me da más de dos millones de puntos de datos para estimar el modelo. El conjunto de datos está disponible aquí . Para mayor claridad, este fue un modelo ARMA-GARCH ajustado para registrar las devoluciones debido a la integración de primer orden de los precios de los registros. La serie temporal original de AUD / USD se ve así:
Luego intenté simular una serie temporal basada en el modelo ajustado, dándome lo siguiente:
Espero y deseo que la serie temporal simulada sea diferente de la serie original, pero no esperaba que hubiera una diferencia tan significativa. En esencia, quiero que la serie simulada se comporte o se parezca ampliamente a la original.
Este es el código R que utilicé para estimar el modelo y simular la serie:
library(rugarch)
rows <- nrow(data)
data <- (log(data[2:rows,])-log(data[1:(rows-1),]))
spec <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1)), mean.model = list(armaOrder = c(1, 1), include.mean = TRUE), distribution.model = "std")
fit <- ugarchfit(spec = spec, data = data, solver = "hybrid")
sim <- ugarchsim(fit, n.sim = rows)
prices <- exp(diffinv(fitted(sim)))
plot(seq(1, nrow(prices), 1), prices, type="l")
Y esta es la salida de estimación:
*---------------------------------*
* GARCH Model Fit *
*---------------------------------*
Conditional Variance Dynamics
-----------------------------------
GARCH Model : sGARCH(1,1)
Mean Model : ARFIMA(1,0,1)
Distribution : std
Optimal Parameters
------------------------------------
Estimate Std. Error t value Pr(>|t|)
mu 0.000000 0.000000 -1.755016 0.079257
ar1 -0.009243 0.035624 -0.259456 0.795283
ma1 -0.010114 0.036277 -0.278786 0.780409
omega 0.000000 0.000000 0.011062 0.991174
alpha1 0.050000 0.000045 1099.877416 0.000000
beta1 0.900000 0.000207 4341.655345 0.000000
shape 4.000000 0.003722 1074.724738 0.000000
Robust Standard Errors:
Estimate Std. Error t value Pr(>|t|)
mu 0.000000 0.000002 -0.048475 0.961338
ar1 -0.009243 0.493738 -0.018720 0.985064
ma1 -0.010114 0.498011 -0.020308 0.983798
omega 0.000000 0.000010 0.000004 0.999997
alpha1 0.050000 0.159015 0.314436 0.753190
beta1 0.900000 0.456020 1.973598 0.048427
shape 4.000000 2.460678 1.625568 0.104042
LogLikelihood : 16340000
Agradecería enormemente cualquier orientación sobre cómo mejorar mi modelado y simulación, o cualquier idea sobre los errores que podría haber cometido. Parece que el residual del modelo no se está utilizando como término de ruido en mi intento de simulación, aunque no estoy seguro de cómo incorporarlo.
ugarchspec()
yugarchsim()
). Asegúrese de que su código sea reproducible cada vez que haga una pregunta aquí y "ayudará a las personas a ayudarlo".Respuestas:
Estoy trabajando con el pronóstico de datos forex y confía en mí cada vez que usas métodos de pronóstico estadístico, ya sea ARMA, ARIMA, GARCH, ARCH, etc. Siempre tienden a deteriorarse a medida que intentas predecir mucho a tiempo. Pueden o no funcionar durante los próximos uno o dos períodos, pero definitivamente no más que eso. Debido a que los datos con los que está tratando no tienen correlación automática, ni tendencia ni estacionalidad.
Mi pregunta para usted, ¿ha revisado ACF y PACF o las pruebas de tendencia, estacionalidad antes de usar ARMA y GARCH? Sin las propiedades mencionadas anteriormente en los datos, el pronóstico estadístico no funciona porque está violando los supuestos básicos de estos modelos.
fuente
Mis sugerencias serían asegurarme de que el modelo que ha seleccionado sea apropiado para los datos.
fuente
distribution.model="std"