Herzlichen Glückwunsch, Sie haben einen Fehler gefunden. Die Vorhersage für dynlmmit 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 newdataArgument predicterfasst die Funktion grundsätzlich ein modelElement aus der dynlmAusgabe. Mit newdataArgument wird predictversucht, eine neue Modellmatrix aus zu bilden newdata. Da dies das Parsen der gelieferten Formel beinhaltet dynlmund 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 newdataArgumentation 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.seedes 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.
dynlmPaket 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