Félicitations, vous avez trouvé un bug. La prédiction pour les dynlm
nouvelles 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 newdata
argument, la predict
fonction récupère essentiellement l' model
élément de la dynlm
sortie. Avec newdata
argument predict
essaie de former une nouvelle matrice de modèle à partir de newdata
. Étant donné que cela implique l'analyse de la formule fournie à dynlm
et 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' newdata
argument 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.seed
donc 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.
dynlm
package 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