Metodología de pronóstico VAR

19

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?

usted acaba de leer esto
fuente
1
¿Estás usando segundas diferencias? Esto es un poco inusual y podría hacer que el modelo sea más sensible de lo que debería ser. Además, ¿puede esperar la cointegración en su sistema? ¿Y qué hay de las tendencias de tiempo deterministas y / o estacionalidades, has comprobado esas?
Richard Hardy
@ Richard, las diferencias para lograr la estacionariedad están, según tengo entendido, determinadas por la prueba adf, y se ajustarían de acuerdo con su sugerencia. Si la prueba adf determina que es estacionaria (retorno 0, no diferenciaría la variable). No he pensado en la cointegración y la estacionalidad, pero tenía la impresión de que el método anterior se encargaría de cualquier tendencia en las variables.
acabas de leer este
2
La prueba ADF no es más que una prueba, viene con sus limitaciones. Al trazar los datos sin procesar, las primeras diferencias y eventualmente las segundas diferencias pueden ser más informativas que simplemente ejecutar la prueba. Además, la prueba ADF tiene diferentes especificaciones: (1) sin constante, sin tendencia; (2) constante, sin tendencia; (3) constante y tendencia; La selección del orden de retraso para la prueba también puede ser no trivial. Por lo tanto, no confíe ciegamente en los resultados. Desde la perspectiva del tema, los precios de los activos generalmente están integrados de orden uno, I (1). Yo (2) sería difícil de justificar ...
Richard Hardy
@youjustreadthis He incluido una respuesta a continuación. Le recomiendo que considere algunas de sus implicaciones
Jacob H

Respuestas:

28

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 elndiffsfunció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 la ur.dffunció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.testfunció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 VARselectfunció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.jofunció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 (donde pes la longitud de retraso del elemento 4, realizada con la serie en niveles):

jo_eigen <- ca.jo(x, type = "eigen", ecdet = "const", K = p)
jo_trace <- ca.jo(x, type = "trace", ecdet = "const", K = p)

6. Estima el modelo

Si sus series no están integradas, puede estimar fácilmente el modelo con el VARcomando, 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 (donde kestá el orden de cointegración):

vecm <- cajorls(joeigen, r = k)

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.testfunció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ón mq.

8. Haz predicciones

Una vez que esté seguro de que su modelo está bien especificado, puede usar la predictfunció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 la irffunció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.

Regis A. Ely
fuente
¡Muchas gracias por esta respuesta detallada! Con respecto a la prueba de Johansen para la cointegración, ¿cambia la implementación cuando se incluyen más de 2 variables? Creo que leí que la integración múltiple conlleva dificultades propias. Lo siento si esto es más adecuado para una pregunta propia.
usted acaba de leer este
1
No, puede hacerlo con el mismo código que el anterior, pero puede encontrar más de un vector de cointegración en este caso. La única limitación de este tipo es con la prueba Engle-Granger, que es adecuada solo para series bivariadas, pero generalmente es mejor en este caso.
Regis A. Ely
1
Este enlace puede ayudar a ejecutar e interpretar pruebas johansenn.
Regis A. Ely
¡Gran trabajo! Sin embargo, he editado algunos formatos y ortografías. Tenga en cuenta que es bueno tener piezas de código (incluso tan pequeñas como los nombres de las funciones) en los backticks ', por ejemplo 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.
Richard Hardy
@RichardHardy, buen resumen del procedimiento de estimación VAR. Sin embargo, creo que puede haber ignorado el hecho de que el OP quiere pronosticar. En consecuencia, él / ella probablemente querría estimar en niveles.
Jacob H
9

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).

Jacob H
fuente
1
ytXtyt=β0 0+β1yt-1+...+βpagyt-pag+γXtγ^OLSse acerca a cero (¿verdad? ¿Dónde está la prueba?), el problema desaparece gradualmente. Pero, ¿qué tan grande se necesita una muestra para eso? Hasta que se presente una prueba, continuaría evitando relaciones espurias.
Richard Hardy
1
En cuanto a ¿Por qué me importa? , si el proceso tiene una raíz que está muy cerca de una raíz unitaria, se comporta de la misma manera que un proceso de raíz unitaria. Al pronosticar, por lo tanto, hay poca diferencia entre suponer que los choques son permanentes y mantener que se desvanecen extremadamente lentamente. A menos que esté pronosticando un futuro muy lejano, el resultado será prácticamente el mismo. Es por eso que no me preocupa demasiado que la prueba de raíz unitaria tenga poca potencia para las alternativas locales.
Richard Hardy
1
Otra pequeña nota con respecto a Primero : cuando hablamos de la prueba ADF en ¿Por qué me importa? , usted dice "su pronóstico va a estar equivocado, porque su modelo está equivocado". Bueno, esto también se aplica a Primero , ¿no? La predicción utilizando un modelo en el que el lado izquierdo diverge del lado derecho se caracteriza por la cita anterior.
Richard Hardy
1
@ Richardharddy Para una prueba de mi primera afirmación, vea el Capítulo 18 en Hamilton 1994. En particular, la sección 18.2, Curas para la regresión espuria. Vale la pena señalar que los estimadores de OLS también son eficientes, ya que convergen a una tasa del sqrt de T.
Jacob H
1
@RichardHardy tu segundo comentario es un punto justo. Pensé que mi respuesta es que por qué dedicar tiempo a las pruebas previas y luego a filtrar los datos solo para estimar potencialmente el modelo incorrecto. Para el pronóstico, la especificación de niveles generalmente será correcta
Jacob H