Parabéns, você encontrou um bug. A previsão para dynlm
novos dados é interrompida se variáveis atrasadas forem usadas. Para ver por que olhar para a saída de
predict(model)
predict(model,newdata=data)
Os resultados devem ser os mesmos, mas não são. Sem newdata
argumento, a predict
função basicamente pega o model
elemento da dynlm
saída. Com newdata
argumento predict
tenta formar nova matriz de modelo a partir de newdata
. Como isso envolve a análise da fórmula fornecida dynlm
e a fórmula possui uma função L
, definida apenas internamente na função dynlm
, a matriz do modelo incorreta é formada. Se você tentar depurar, verá que a variável dependente defasada não está sendo defasada no caso de newdata
argumento ser fornecido.
O que você pode fazer é atrasar a variável dependente e incluí-la no newdata
. Aqui está o código que ilustra essa abordagem. Eu uso set.seed
para que seja facilmente reproduzível.
library(dynlm)
set.seed(1)
y<-arima.sim(model=list(ar=c(.9)),n=10) #Create AR(1) dependant variable
A<-rnorm(10) #Create independant variables
B<-rnorm(10)
C<-rnorm(10)
y<-y+.5*A+.2*B-.3*C #Add relationship to independant variables
data=cbind(y,A,B,C)
#Fit linear model
model<-dynlm(y~A+B+C+L(y,1),data=data)
Aqui está o comportamento do buggy:
> predict(model)
2 3 4 5 6 7 8 9 10
3.500667 2.411196 2.627915 2.813815 2.468595 1.733852 2.114553 1.423225 1.470738
> predict(model,newdata=data)
1 2 3 4 5 6 7 8 9 10
2.1628335 3.7063579 2.9781417 2.1374301 3.2582376 1.9534558 1.3670995 2.4547626 0.8448223 1.8762437
Forme o newdata
#Forecast fix.
A<-c(A,rnorm(1)) #Assume we already have 1-step forecasts for A,B,C
B<-c(B,rnorm(1))
C<-c(C,rnorm(1))
newdata<-ts(cbind(A,B,C),start=start(y),freq=frequency(y))
newdata<-cbind(lag(y,-1),newdata)
colnames(newdata) <- c("y","A","B","C")
Compare a previsão com o ajuste do modelo:
> predict(model)
2 3 4 5 6 7 8 9 10
3.500667 2.411196 2.627915 2.813815 2.468595 1.733852 2.114553 1.423225 1.470738
> predict(model,newdata=newdata)
1 2 3 4 5 6 7 8 9 10 11
NA 3.500667 2.411196 2.627915 2.813815 2.468595 1.733852 2.114553 1.423225 1.470738 1.102367
Como você pode ver nos dados históricos, a previsão coincide e o último elemento contém a previsão de um passo à frente.
dynlm
pacote não fornecerá previsões para suas variáveis dependentes. O fornecimento de previsões para suas variáveis dependentes exigirá um modelo para explicá-las e provavelmente dados adicionais. Sugiro que você leia algo sobre regressão multivariada, como "Análise Estatística Multivariada Aplicada", de Johnson e Wichern. ou um curso sobre previsão: duke.edu/~rnau/411home.htm