Eu tenho quatro séries temporais diferentes de medições horárias:
- O consumo de calor dentro de uma casa
- A temperatura fora de casa
- A radiação solar
- A velocidade do vento
Quero poder prever o consumo de calor dentro de casa. Existe uma clara tendência sazonal, tanto anualmente como diariamente. Como existe uma correlação clara entre as diferentes séries, desejo ajustá-las usando um modelo ARIMAX. Isso pode ser feito em R, usando a função arimax do pacote TSA.
Tentei ler a documentação desta função e ler as funções de transferência, mas até agora meu código:
regParams = ts.union(ts(dayy))
transferParams = ts.union(ts(temp))
model10 = arimax(heat,order=c(2,1,1),seasonal=list(order=c(0,1,1),period=24),xreg=regParams,xtransf=transferParams,transfer=list(c(1,1))
pred10 = predict(model10, newxreg=regParams)
me dá:
onde a linha preta é os dados reais medidos e a linha verde é meu modelo ajustado em comparação. Não é apenas um bom modelo, mas claramente algo está errado.
Admito que meu conhecimento dos modelos ARIMAX e das funções de transferência é limitado. Na função arimax (), (tanto quanto eu entendi), xtransf é a série temporal exógena que eu quero usar (usando funções de transferência) para prever minha principal série temporal. Mas qual é realmente a diferença entre xreg e xtransf?
De maneira mais geral, o que fiz de errado? Gostaria de conseguir um ajuste melhor do que o obtido com lm (heat ~ temp radi wind * time).
Edições: com base em alguns comentários, removi a transferência e adicionei o xreg:
regParams = ts.union(ts(dayy), ts(temp), ts(time))
model10 = arimax(heat,order=c(2,1,1),seasonal=list(order=c(0,1,1),period=24),xreg=regParams)
onde dayy é o "número do dia do ano" e time é a hora do dia. Temp é novamente a temperatura externa. Isso me dá o seguinte resultado:
o que é melhor, mas não é o que eu esperava ver.
fonte
predict()
é usado para previsão, enquantofitted()
retorna o ajuste do modelo durante o período histórico. Se você quiser uma ajuda mais específica, publique um exemplo reproduzível com algum código.heat
aumentar linearmente com a hora do dia e depois voltar para baixo quando a hora retornar a 1. Se você usar variáveis fictícias, cada hora do dia terá seu próprio efeito. Execute meu código de exemplo e preste muita atenção em como eu construo meu objeto xreg.stats
eforecast
é que elas não se ajustam às funções de transferência prober. A documentação dastats::arima
função declara o seguinte: Se um termo xreg for incluído, uma regressão linear (com um termo constante se include.mean for verdadeira e não houver diferenciação) será ajustada com um modelo ARMA para o termo de erro. Portanto, se você realmente precisar ajustar as funções de transferência, parece que aTSA::arimax
função é o caminho a seguirR
.Estou usando o R para fazer previsão de carga há um tempo e posso sugerir que você use o
forecast
pacote e suas funções inestimáveis (comoauto.arima
).Você pode construir um modelo ARIMA com o seguinte comando:
com
y
sua previsão (suponhodayy
),order
a ordem do seu modelo (considerando a sazonalidade) eexogenous_data
sua temperatura, radiação solar etc. A funçãoauto.arima
ajuda a encontrar a ordem ideal do modelo. Você pode encontrar um breve tutorial sobre o pacote `forecast ' aqui .fonte
Pessoalmente, não entendo as funções de transferência, mas acho que você entendeu
xtransf
exreg
reverteu. Pelo menos na base de Rarima
éxreg
que contém suas variáveis exógenas. Tenho a impressão de que uma função de transferência descreve como (dados atrasados afetam valores futuros) e não o que .Eu tentaria usar
xreg
para suas variáveis exógenas, talvez usandoarima
searimax
exige uma função de transferência. O problema é que seu modelo é diário, mas seus dados têm sazonalidade diária e anual, e não tenho certeza no momento se uma primeira diferença (oorder=(*, 1, *)
) resolverá isso ou não. (Você certamente não obterá previsões mágicas durante todo o ano de um modelo que considera apenas a sazonalidade diária.)PS O
time
que você usa no seulm
? Hora literal do relógio ou número de observação de 1 em 1? Eu acho que você pode obter algo usando um modelo de efeito misto (lmer
nolme4
pacote), embora eu não tenha descoberto se fazer isso corretamente é responsável pela autocorrelação que ocorrerá em uma série temporal. Se não for considerado, o quelm
não é verdade, você pode ter um ajuste interessante, mas seu conceito de quão precisa é sua previsão será otimista demais.fonte