Congratulazioni, hai trovato un bug. La previsione per dynlm
con 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 newdata
argomento, la predict
funzione prende sostanzialmente l' model
elemento dynlm
dall'output. Con newdata
argomento predict
tenta di formare una nuova matrice di modello da newdata
. Poiché ciò implica l'analisi della formula fornita dynlm
e 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' newdata
argomento 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.seed
quindi 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.
dynlm
pacchetto 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