J'ai ajusté un modèle avec plusieurs variables indépendantes, dont l'une est le décalage de la variable dépendante, en utilisant le package dynlm.
En supposant que j'ai des prévisions à un pas pour mes variables indépendantes, comment puis-je obtenir des prévisions à un pas pour mes variables dépendantes?
Voici un exemple:
library(dynlm)
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)
#Forecast
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))
y=window(y,end=end(y)+c(1,0),extend=TRUE)
newdata<-cbind(y,A,B,C)
predict(model,newdata)
Et voici un exemple d'utilisation du package dyn, qui fonctionne.
library(dyn)
#Fit linear model
model<-dyn$lm(y~A+B+C+lag(y,-1),data=data)
#Forecast
predict(model,newdata)the dyn packages, which works:
r
dynamic-regression
Zach
la source
la source
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.htmRéponses:
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 deLes résultats devraient être les mêmes, mais ils ne le sont pas. Sans
newdata
argument, lapredict
fonction récupère essentiellement l'model
élément de ladynlm
sortie. Avecnewdata
argumentpredict
essaie de former une nouvelle matrice de modèle à partir denewdata
. Étant donné que cela implique l'analyse de la formule fournie àdynlm
et que la formule a une fonctionL
, qui n'est définie qu'en internedynlm
, 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'utiliseset.seed
donc ce serait facilement reproductible.Voici le comportement du buggy:
Former le
newdata
Comparer les prévisions avec l'ajustement du modèle:
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.
la source
lag(y,-1)+lag(y,-2)
?Suite à la demande de @ md-azimul-haque, j'ai fouillé dans mon code source de 4 ans et j'ai trouvé la fonction suivante nommée de manière appropriée. Vous ne savez pas si c'est ce que recherche @ md-azimul-haque?
la source