Congratulazioni, hai trovato un bug. La previsione per dynlmcon i nuovi dati viene interrotta se si utilizzano variabili ritardate. Per vedere perché guardare l'output di
predict(model)
predict(model,newdata=data)
I risultati dovrebbero essere gli stessi, ma non lo sono. Senza newdataargomento, la predictfunzione prende sostanzialmente l' modelelemento dynlmdall'output. Con newdataargomento predicttenta di formare una nuova matrice di modello da newdata. Poiché ciò implica l'analisi della formula fornita dynlme la formula ha funzione L, che è definita solo internamente in funzione dynlm, si forma la matrice del modello errata. Se provi a eseguire il debug, vedrai che la variabile dipendente ritardata non viene ritardata nel caso in cui l' newdataargomento sia fornito.
Quello che puoi fare è ritardare la variabile dipendente e includerla nel file newdata. Ecco il codice che illustra questo approccio. Lo uso set.seedquindi sarebbe facilmente riproducibile.
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)
Ecco il comportamento 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
Forma il 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")
Confronta le previsioni con l'adattamento del modello:
> 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
Come puoi vedere per i dati storici, la previsione coincide e l'ultimo elemento contiene la previsione a un passo.
dynlmpacchetto non fornirà previsioni per le variabili dipendenti. Fornire previsioni per le variabili dipendenti richiederà un modello per spiegarle e probabilmente dati aggiuntivi. Ti suggerisco di leggere qualcosa sulla regressione multivariata come "Analisi statistica multivariata applicata" di Johnson and Wichern. o un corso sulle previsioni: duke.edu/~rnau/411home.htm