Estoy construyendo un modelo VAR para pronosticar el precio de un activo y me gustaría saber si mi método es estadísticamente sólido, si las pruebas que he incluido son relevantes y si se necesitan más para garantizar un pronóstico confiable basado en mis variables de entrada.
A continuación se muestra mi proceso actual para verificar la causalidad de Granger y pronosticar el modelo VAR seleccionado.
require("forecast")
require("vars")
#Read Data
da=read.table("VARdata.txt", header=T)
dac <- c(2,3) # Select variables
x=da[,dac]
plot.ts(x)
summary(x)
#Run Augmented Dickey-Fuller tests to determine stationarity and differences to achieve stationarity.
ndiffs(x[, "VAR1"], alpha = 0.05, test = c("adf"))
ndiffs(x[, "VAR2"], alpha = 0.05, test = c("adf"))
#Difference to achieve stationarity
d.x1 = diff(x[, "VAR1"], differences = 2)
d.x2 = diff(x[, "VAR2"], differences = 2)
dx = cbind(d.x1, d.x2)
plot.ts(dx)
#Lag optimisation
VARselect(dx, lag.max = 10, type = "both")
#Vector autoregression with lags set according to results of lag optimisation.
var = VAR(dx, p=2)
#Test for serial autocorrelation using the Portmanteau test
#Rerun var model with other suggested lags if H0 can be rejected at 0.05
serial.test(var, lags.pt = 10, type = "PT.asymptotic")
#ARCH test (Autoregressive conditional heteroscedasdicity)
arch.test(var, lags.multi = 10)
summary(var)
#Granger Causality test
#Does x1 granger cause x2?
grangertest(d.x2 ~ d.x1, order = 2)
#Does x2 granger cause x1?
grangertest(d.x1 ~ d.x2, order = 2)
#Forecasting
prd <- predict(var, n.ahead = 10, ci = 0.95, dumvar = NULL)
print(prd)
plot(prd, "single")
¿Suena este método?
r
forecasting
modeling
var
usted acaba de leer esto
fuente
fuente
Respuestas:
Creo que lo entendiste bien, pero cuando construyo un modelo VAR, generalmente me aseguro de seguir estos pasos:
1. Seleccione las variables
Esta es la parte más importante de la construcción de su modelo. Si desea pronosticar el precio de un activo, debe incluir variables relacionadas con el mecanismo de formación de precios. La mejor manera de hacerlo es a través de un modelo teórico. Como no mencionó cuál es el activo y cuáles son las otras variables que incluyó en su modelo, realmente no puedo decir mucho sobre este artículo, pero puede encontrar un resumen de los modelos de precios de activos aquí .
2. Verifique los datos y realice los ajustes adecuados
Una vez que seleccione las variables, puede hacer algunos ajustes a los datos que mejorarán la estimación e interpretación del modelo. Es útil usar estadísticas resumidas y ver un diagrama de la serie para detectar valores atípicos, datos faltantes y otros comportamientos extraños. Cuando se trabaja con datos de precios, las personas suelen tomar registros naturales, que es una transformación estabilizadora de la varianza y también tiene una buena interpretación (la diferencia de precios en los registros se convierte en rendimientos compuestos continuos). No estoy seguro de si ha tomado registros antes de estimar el modelo, pero es una buena idea hacerlo si está trabajando con los precios de los activos.
3. Compruebe si los datos contienen componentes no estacionarios
Ahora puede usar pruebas de raíz unitaria para verificar si sus series son estacionarias. Si solo está interesado en pronosticar, como lo señaló @JacobH, puede ejecutar VAR en niveles incluso cuando sus series no son estacionarias, pero entonces no se puede confiar en sus errores estándar, lo que significa que no puede hacer inferencia sobre el valor de Los coeficientes. Ha realizado pruebas estacionarias utilizando la prueba ADF, que se usa muy comúnmente en estas aplicaciones, pero tenga en cuenta que debe especificar si desea ejecutar la prueba con i) sin constante y sin tendencia; ii) una tendencia constante y sin tendencia; y iii) una constante y una tendencia. Por lo general, las series de precios tienen tendencias estocásticas, por lo que una tendencia lineal no será precisa. En este caso, puede elegir la especificación ii. En tu código usaste el
ndiffs
función del paquete de pronóstico. No estoy seguro de cuál de esas tres alternativas implementa esta función para calcular el número de diferencias (no pude encontrarla en la documentación). Para verificar su resultado, puede utilizar laur.df
función en el paquete "urca":adf <- ur.df(x[, "VAR1"], type = "drift", lags = 10, selectlags = "AIC")
Tenga en cuenta que este comando ejecutará la prueba ADF con una constante y los retrasos seleccionados por el comando AIC, con un retraso máximo de 10. Si tiene problemas para interpretar los resultados, solo mire esta pregunta . Si las series son I (1) solo use la diferencia, que será igual a los rendimientos compuestos continuamente. Si la prueba indica que la serie es I (2) y tiene dudas sobre eso, puede usar otras pruebas, por ejemplo, la prueba de Phillips-Perron (
PP.test
función en R). Si todas las pruebas confirman que su serie es I (2) (recuerde usar el registro de la serie antes de ejecutar las pruebas), tome la segunda diferencia, pero tenga en cuenta que su interpretación de los resultados cambiará, ya que ahora está trabajando con diferencia de los rendimientos continuamente compuestos. Los precios de los activos suelen ser I (1) ya que están cerca de una caminata aleatoria, que es un ruido blanco al aplicar la primera diferencia.4. Seleccione el orden del modelo.
Esto se puede hacer con criterios de uso común, como Akaike, Schwarz (BIC) y Hannan-Quinn. Lo ha hecho con la
VARselect
función y es correcto, pero recuerde cuál es el criterio que utilizó para tomar su decisión. Por lo general, diferentes criterios indican diferentes órdenes para el VAR.5. Compruebe si hay relaciones de cointegración
Si todas sus series son I (1) o I (2), antes de ejecutar un modelo VAR, generalmente es una buena idea verificar si no hay relaciones de cointegración entre las series, especialmente si desea realizar un análisis de respuesta al impulso con el derechos residuales de autor. Puede hacerlo utilizando la prueba de Johansenn o el Engle-Granger (solo para modelos bivariados). En R puede ejecutar la prueba de Johansen con la
ca.jo
función del paquete "urca". Tenga en cuenta que esta prueba también tiene diferentes especificaciones. Para las series de precios, generalmente utilizo el siguiente código (dondep
es la longitud de retraso del elemento 4, realizada con la serie en niveles):6. Estima el modelo
Si sus series no están integradas, puede estimar fácilmente el modelo con el
VAR
comando, como se hace en su código. En caso de que las series estén cointegradas, debe considerar la relación a largo plazo estimando un modelo de corrección de errores vectoriales con el siguiente código (dondek
está el orden de cointegración):7. Ejecute pruebas de diagnóstico
Para probar si su modelo está bien especificado, puede ejecutar una prueba de correlación en serie en los residuos. En su código, utilizó una prueba de Portmanteau con la
serial.test
función. Nunca he usado esta función pero creo que está bien. También hay una versión multivariada de la prueba Ljung-Box implementada en el paquete MTS que puede ejecutar con la funciónmq
.8. Haz predicciones
Una vez que esté seguro de que su modelo está bien especificado, puede usar la
predict
función como lo hizo en su código. Incluso puede trazar funciones de respuesta a impulsos para verificar cómo responden las variables a un choque particular usando lairf
función.9. Evaluar predicciones
Una vez que haya hecho sus predicciones, debe evaluarlas y compararlas con otros modelos. Aquí se pueden encontrar algunos métodos para evaluar la precisión de los pronósticos , pero para hacerlo es crucial que divida su serie en un conjunto de entrenamiento y prueba, como se explica en el enlace.
fuente
predict
. Los fragmentos de código más grandes pueden formatearse como código seleccionando el texto y haciendo clic en el botón "citas" en la parte superior de la ventana del editor.Pensé que agregaría a Regis A Ely una muy buena respuesta. Su respuesta no es incorrecta, pero usar un VAR para pronosticar es diferente de usar un VAR para hacer otras cosas de tipo VAR (es decir, IRF, FEVD, Descomp. Histórico, etc.). En consecuencia, algunos de los pasos descritos por Regis A Ely afectarán negativamente su pronóstico en algunos casos.
Descargo de responsabilidad:
Cuando me refiero a datos no estacionarios, quiero decir que la serie contiene una tendencia estocástica. Si los datos tienen una tendencia temporal / estacional, deben filtrarse adecuadamente.
primero
En términos generales, en un VAR sin restricciones no hay necesidad de preocuparse por una relación espuria. Una regresión espuria ocurre cuando regresas una serie no estacionaria (Y) en otra serie no estacionaria (X) y ambas series no están integradas. Sin embargo, si retrocede Y en X, así como los retrasos de Y, entonces la regresión no será espuria ya que la inclusión del retraso Y asegura que los errores serán estacionarios. Dicho de otra manera, los rezagos de Y recogen la variación que anteriormente se asignó erróneamente a X. Dado que un VAR sin restricciones es esencialmente un sistema de regresiones ARDL donde cada ecuación contiene el mismo número de rezagos y regresores, debe quedar claro que la regresión espuria es Por lo tanto, no es probable que sea un problema. Dicho de otra manera, si sus datos son todos I (1), independientemente de si están cointegrados, puede ejecutar un VAR. VECM solo es necesario cuando desea modelar e identificar la relación a corto y largo plazo / cointegración entre variables. La pregunta ahora es si debe ejecutar el VAR en niveles o en primeras diferencias.
Segundo
Al pronosticar, no es necesario diferenciar primero los datos I (1). Si lo desea, puede hacerlo, aunque una cantidad sorprendente de practicantes no. Recuerde que cuando tenemos una serie no estacionaria, aún podemos obtener un estimador consistente. Para una regresión con un solo retraso de la variable dependiente, esto es intuitivo. Si una serie sigue una caminata aleatoria (es decir, no estacionaria), sabemos que la mejor estimación de dónde será el próximo período es exactamente donde fue el último período (es decir, beta es 1). Sin embargo, los errores estándar de las estimaciones derivadas de modelos con datos no estacionarios son diferentes porque, estrictamente hablando, la varianza de la estimación se aproxima al infinito a medida que T se aproxima al infinito. Esto, sin embargo, no es un problema para pronosticar. El pronóstico es esencialmente una expectativa condicional y, por lo tanto, solo se basa en las estimaciones de parámetros de su modelo y no en errores estándar. Además, los intervalos de predicción de su pronóstico se obtendrán directamente de sus errores, mediante errores de arranque, o si tiene muchos datos a través de intervalos de predicción empíricos (¡mi favorito!), Estos tres enfoques no se ven afectados por los datos no estacionarios porque nuevamente sus errores serán estacionarios según nuestra discusión de regresión espuria anterior.
¿Porqué me importa?
La prueba ADF tiene baja potencia, especialmente cuando la serie está cerca de ser la raíz de la unidad, pero no lo es. Dicho otro, la prueba ADF tenderá a afirmar erróneamente que una serie no es estacionaria cuando en realidad no lo es.
Suponga que su prueba ADF asegura erróneamente que la serie no es estacionaria. Si realiza todas las transformaciones necesarias y estima un VECM, su pronóstico será incorrecto porque su modelo está equivocado. Es por eso que la gente pronostica en niveles.
¿Qué pasa con la causalidad de Granger?
Incluso puede probar GC con un VAR en niveles cuando los datos son I (1). Sé que eso suena loco. Sabemos que la inferencia generalmente no es posible con datos no estacionarios. Sin embargo, es posible probar hipótesis conjuntas, por ejemplo, GC. Esto se muestra en Toda y Yamamoto (1995) que se basa en Sims, Stock y Watson (1990). Para ver una aplicación, visite http://davegiles.blogspot.com/2011/04/testing-for-granger-causality.html .
Última cosa
Sin embargo, si desea usar su VAR para otras cosas que no sean pronósticos, tenga cuidado. Un VAR en niveles con series no estacionarias y cointegradas puede producir algunos resultados extraños. Por ejemplo, estrictamente hablando, la representación de la media móvil del VAR no existe ya que la matriz de parámetros no será invertible. A pesar de este hecho, todavía se puede obtener IRF. La inferencia tampoco es factible (las hipótesis conjuntas de pensamiento se pueden probar como se discutió anteriormente).
También se preocupe por las pequeñas muestras. Todo lo que he discutido funciona bien en muestras grandes, pero las cosas pueden volverse extrañas en muestras pequeñas. Esto es especialmente cierto para GC con datos I (1).
fuente