Félicitations, vous avez trouvé un bug. La prédiction pour les dynlmnouvelles données est rompue si des variables retardées sont utilisées. Pour voir pourquoi regarder la sortie de
predict(model)
predict(model,newdata=data)
Les résultats devraient être les mêmes, mais ils ne le sont pas. Sans newdataargument, la predictfonction récupère essentiellement l' modelélément de la dynlmsortie. Avec newdataargument predictessaie de former une nouvelle matrice de modèle à partir de newdata. Étant donné que cela implique l'analyse de la formule fournie à dynlmet que la formule a une fonction L, qui n'est définie qu'en interne dynlm, la matrice de modèle incorrecte est formée. Si vous essayez de déboguer, vous verrez que la variable dépendante retardée n'est pas retardée dans le cas où l' newdataargument est fourni.
Ce que vous pouvez faire est de retarder la variable dépendante et de l'inclure dans le newdata. Voici le code illustrant cette approche. J'utilise set.seeddonc ce serait facilement reproductible.
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)
Voici le comportement du 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
Former le 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")
Comparer les prévisions avec l'ajustement du modèle:
> 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
Comme vous pouvez le voir pour les données historiques, les prévisions coïncident et le dernier élément contient les prévisions à 1 étape.
dynlmpackage ne fournira pas de prévisions pour vos variables dépendantes. Fournir des prévisions pour vos variables dépendantes nécessitera un modèle pour les expliquer et probablement des données supplémentaires. Je vous suggère de lire quelque chose sur la régression multivariée comme "Applied Multivariate Statistical Analysis" de Johnson et Wichern. ou un cours sur les prévisions: duke.edu/~rnau/411home.htm