Eu acho que você acertou bastante, mas ao criar um modelo VAR, geralmente certifico-me de seguir estas etapas:
1. Selecione as variáveis
Essa é a parte mais importante da construção do seu modelo. Se você deseja prever o preço de um ativo, é necessário incluir variáveis relacionadas ao mecanismo de formação de preço. A melhor maneira de fazer isso é através de um modelo teórico. Como você não mencionou o que é o ativo e quais são as outras variáveis incluídas no seu modelo, eu realmente não posso dizer muito sobre esse item, mas você pode encontrar um resumo dos modelos de preços de ativos aqui .
2. Verifique os dados e faça os ajustes adequados
Depois de selecionar as variáveis, você pode fazer alguns ajustes nos dados que melhorarão a estimativa e a interpretação do modelo. É útil usar estatísticas resumidas e ver um gráfico da série para detectar discrepâncias, dados ausentes e outros comportamentos estranhos. Ao trabalhar com dados de preços, as pessoas geralmente usam logs naturais, o que é uma transformação estabilizadora de variações e também tem uma boa interpretação (a diferença de preço nos logs se torna retornos continuamente compostos). Não tenho certeza se você fez registros antes de estimar o modelo, mas é uma boa ideia fazê-lo se estiver trabalhando com preços de ativos.
3. Verifique se os dados contêm componentes não estacionários
Agora você pode usar testes de raiz unitária para verificar se suas séries são estacionárias. Se você estiver interessado apenas na previsão, conforme observado por @JacobH, poderá executar o VAR em níveis mesmo quando suas séries não forem estacionárias, mas seus erros padrão não serão confiáveis, o que significa que você não pode inferir sobre o valor de os coeficientes. Você testou estacionário usando o teste do ADF, que é muito comum nesses aplicativos, mas observe que você deve especificar se deseja executar o teste com i) sem constante e sem tendência; ii) uma constante e nenhuma tendência; e iii) uma constante e uma tendência. Geralmente, as séries de preços têm tendências estocásticas, portanto, uma tendência linear não será precisa. Nesse caso, você pode escolher a especificação ii. No seu código, você usou ondiffs
função do pacote de previsão. Não tenho certeza de qual dessas três alternativas essa função implementa para calcular o número de diferenças (não a encontrei na documentação). Para verificar seu resultado, você pode querer usar a ur.df
função no pacote "urca":
adf <- ur.df(x[, "VAR1"], type = "drift", lags = 10, selectlags = "AIC")
Observe que este comando executará o teste do ADF com uma constante e os lags selecionados pelo comando AIC, com atraso máximo de 10. Se você tiver problemas para interpretar os resultados, basta olhar para esta pergunta . Se as séries forem I (1), basta usar a diferença, que será igual aos retornos compostos continuamente. Se o teste indicar que a série é I (2) e você tiver dúvidas sobre o uso de outros testes, por exemplo, teste de Phillips-Perron (PP.test
função em R). Se todos os testes confirmarem que sua série é I (2) (lembre-se de usar o log da série antes de executar os testes), faça a segunda diferença, mas observe que sua interpretação dos resultados mudará, pois agora você está trabalhando com o diferença dos retornos continuamente compostos. Os preços dos ativos são geralmente I (1), pois estão próximos de uma caminhada aleatória, o que é um ruído branco quando se aplica a primeira diferença.
4. Selecione a ordem do modelo
Isso pode ser feito com critérios comumente usados, como Akaike, Schwarz (BIC) e Hannan-Quinn. Você fez isso com a VARselect
função e isso está certo, mas lembre-se de qual é o critério usado para tomar sua decisão. Geralmente, critérios diferentes indicam pedidos diferentes para o VAR.
5. Verifique se há relacionamentos cointegrantes
Se todas as suas séries forem I (1) ou I (2), antes de executar um modelo VAR, geralmente é uma boa ideia verificar se não há relações de cointegração entre as séries, especialmente se você deseja fazer uma análise de resposta a impulso com o resíduos. Você pode fazer isso usando o teste de Johansenn ou o Engle-Granger (apenas para modelos bivariados). No R, você pode executar o teste de Johansen com a ca.jo
função do pacote "urca". Observe que este teste também tem especificações diferentes. Para séries de preços, geralmente uso o seguinte código (onde p
é o comprimento do atraso do item 4, realizado com a série em níveis):
jo_eigen <- ca.jo(x, type = "eigen", ecdet = "const", K = p)
jo_trace <- ca.jo(x, type = "trace", ecdet = "const", K = p)
6. Estime o modelo
Se sua série não estiver cointegrada, é possível estimar facilmente o modelo com o VAR
comando, conforme feito no seu código. Caso as séries sejam cointegradas, é necessário considerar o relacionamento de longo prazo, estimando um modelo de Correção de erro vetorial com o seguinte código (onde k
está a ordem de cointegração):
vecm <- cajorls(joeigen, r = k)
7. Execute testes de diagnóstico
Para testar se seu modelo está bem especificado, você pode executar um teste de correlação serial nos resíduos. No seu código, você usou um teste do Portmanteau com a serial.test
função Eu nunca usei essa função, mas acho que está OK. Há também uma versão multivariada do teste de Ljung-Box implementado nos MTS pacote que você pode executar com a função mq
.
8. Faça previsões
Depois de ter certeza de que seu modelo está bem especificado, você pode usar a predict
função como fez no seu código. Você pode até plotar funções de resposta a impulso para verificar como as variáveis respondem a um choque específico usando a irf
função.
9. Avalie previsões
Depois de fazer suas previsões, você deve avaliá-las e comparar com outros modelos. Alguns métodos para avaliar a precisão das previsões podem ser encontrados aqui , mas para isso é crucial que você divida suas séries em um conjunto de treinamento e teste, conforme explicado no link.