Creo que lo has hecho bastante bien, pero cuando construyo un modelo VAR, suelo asegurarme de seguir estos pasos:
1. Seleccione las variables
Esta es la parte más importante de la construcción de su modelo. Si quiere predecir el precio de un activo, debe incluir variables relacionadas con el mecanismo de formación de precios. La mejor forma de hacerlo es mediante un modelo teórico. Como no ha mencionado cuál es el activo y cuáles son las demás variables que ha incluido en su modelo, realmente no puedo decir mucho sobre este punto, pero puede encontrar un resumen de los modelos de valoración de activos en aquí .
2. Compruebe los datos y realice los ajustes adecuados
Una vez seleccionadas las variables, puede realizar algunos ajustes en los datos que mejorarán la estimación y la interpretación del modelo. Es útil utilizar estadísticos de resumen y ver un gráfico de las series para detectar valores atípicos, datos que faltan y otros comportamientos extraños. Cuando se trabaja con datos de precios, la gente suele tomar logaritmos naturales, que es una transformación estabilizadora de la varianza y también tiene una buena interpretación (la diferencia de precios en logaritmos se convierte en rendimientos compuestos continuos). No estoy seguro de si has tomado los logaritmos antes de estimar el modelo, pero es una buena idea hacerlo si trabajas con precios de activos.
3. Comprobar si los datos contienen componentes no estacionarios
Ahora puede utilizar las pruebas de raíz unitaria para comprobar si sus series son estacionarias. Si sólo te interesa la previsión, como señala @JacobH, puedes ejecutar el VAR en niveles incluso cuando tus series sean no estacionarias, pero entonces tus errores estándar no son fiables, lo que significa que no puedes hacer inferencia sobre el valor de los coeficientes. Ha realizado la prueba de estacionariedad utilizando la prueba ADF, que se utiliza muy comúnmente en estas aplicaciones, pero tenga en cuenta que debe especificar si desea realizar la prueba con i) ninguna constante y ninguna tendencia; ii) una constante y ninguna tendencia; y iii) una constante y una tendencia. Normalmente, 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 su código ha utilizado la especificación ndiffs
del paquete de previsión. No estoy seguro de cuál de las tres alternativas implementa esta función para calcular el número de diferencias (no he podido encontrarlo en la documentación). Para comprobar el resultado puede utilizar la función ur.df
del 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 rezagos seleccionados por el comando AIC, con un rezago máximo de 10. Si tiene problemas para interpretar los resultados, consulte esta pregunta . Si las series son I(1) basta con utilizar la diferencia, que será igual a los rendimientos compuestos de forma continua. Si la prueba indica que las series son I(2) y tiene dudas al respecto, puede utilizar otras pruebas, por ejemplo, la prueba de Phillips-Perron ( PP.test
en R). Si todas las pruebas confirman que su serie es I(2) (recuerde utilizar el logaritmo de la serie antes de ejecutar las pruebas), entonces tome la segunda diferencia, pero tenga en cuenta que su interpretación de los resultados cambiará, ya que ahora está trabajando con la diferencia de los rendimientos compuestos continuamente. Los precios de los activos suelen ser I(1), ya que se aproximan a un paseo aleatorio, que es un ruido blanco al aplicar la primera diferencia.
4. Seleccione el orden del modelo
Esto puede hacerse con criterios comúnmente utilizados como Akaike, Schwarz (BIC) y Hannan-Quinn. Ya lo ha hecho con el VARselect
función y eso es correcto, pero recuerde cuál es el criterio que ha utilizado para tomar su decisión. Por lo general, diferentes criterios indican diferentes órdenes para el VAR.
5. Comprobar si existen relaciones de cointegración
Si todas sus series son I(1) o I(2), antes de ejecutar un modelo VAR, suele ser una buena idea comprobar si no existen relaciones de cointegración entre las series, especialmente si desea realizar análisis de respuesta al impulso con los residuos. Puede hacerlo utilizando la prueba de Johansenn o la de Engle-Granger (sólo para modelos bivariantes). En R puedes ejecutar el test de Johansen con el comando ca.jo
del paquete "urca". Tenga en cuenta que esta prueba también tiene diferentes especificaciones. Para las series de precios suelo utilizar el siguiente código (donde p
es la longitud del retardo del elemento 4, realizado 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. Estimación del modelo
Si sus series no están cointegradas, puede estimar fácilmente el modelo con la función VAR
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 vectorial de errores con el siguiente código (donde k
es el orden de cointegración):
vecm <- cajorls(joeigen, r = k)
7. Ejecutar pruebas de diagnóstico
Para comprobar si el modelo está bien especificado, puede realizar una prueba de correlación serial en los residuos. En su código ha utilizado una prueba de Portmanteau con la variable serial.test
función. Nunca he utilizado esta función, pero creo que está bien. También hay una versión multivariante de la prueba de Ljung-Box implementada en el paquete MTS que puedes ejecutar con la función mq
.
8. Hacer predicciones
Cuando esté seguro de que su modelo está bien especificado, puede utilizar la función predict
como ha hecho en su código. Incluso puede trazar funciones de respuesta al impulso para comprobar cómo responden las variables a un determinado impacto utilizando la función irf
función.
9. Evaluar las predicciones
Una vez hechas las predicciones, hay que evaluarlas y compararlas con otros modelos. Puede encontrar algunos métodos para evaluar la precisión de las predicciones aquí pero para ello es crucial que dividas tus series en un conjunto de entrenamiento y otro de prueba, como se explica en el enlace.