Herzlichen Glückwunsch, Sie haben einen Fehler gefunden. Die Vorhersage für dynlm
mit neuen Daten wird unterbrochen, wenn verzögerte Variablen verwendet werden. Um zu sehen, warum schauen Sie sich die Ausgabe von an
predict(model)
predict(model,newdata=data)
Die Ergebnisse sollten gleich sein, sind es aber nicht. Ohne newdata
Argument predict
erfasst die Funktion grundsätzlich ein model
Element aus der dynlm
Ausgabe. Mit newdata
Argument wird predict
versucht, eine neue Modellmatrix aus zu bilden newdata
. Da dies das Parsen der gelieferten Formel beinhaltet dynlm
und die Formel eine Funktion hat L
, die nur intern in der Funktion definiert ist dynlm
, wird die falsche Modellmatrix gebildet. Wenn Sie versuchen zu debuggen, werden Sie feststellen, dass die verzögerte abhängige Variable im Fall der angegebenen newdata
Argumentation nicht verzögert wird.
Sie können die abhängige Variable verzögern und in die Variable aufnehmen newdata
. Hier ist der Code, der diesen Ansatz veranschaulicht. Ich benutze set.seed
es also leicht reproduzierbar.
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)
Hier ist das Buggy-Verhalten:
> 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
Bilde die 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")
Vergleichen Sie die Prognose mit der Modellanpassung:
> 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
Wie Sie für historische Daten sehen können, stimmt die Prognose überein und das letzte Element enthält die Prognose für einen Schritt voraus.
dynlm
Paket verwenden, werden keine Prognosen für Ihre abhängigen Variablen bereitgestellt. Für die Bereitstellung von Prognosen für Ihre abhängigen Variablen sind ein Modell zur Erläuterung und wahrscheinlich zusätzliche Daten erforderlich. Ich empfehle Ihnen, etwas über multivariate Regression zu lesen, wie "Applied Multivariate Statistical Analysis" von Johnson und Wichern. oder ein Kurs über Prognosen: duke.edu/~rnau/411home.htm