Selamat, Anda telah menemukan bug. Prediksi untuk dynlmdengan data baru rusak jika variabel lagged digunakan. Untuk melihat mengapa melihat output dari
predict(model)
predict(model,newdata=data)
Hasilnya harus sama, tetapi tidak. Tanpa newdataargumen, predictfungsi ini pada dasarnya mengambil modelelemen dari dynlmoutput. Dengan newdataargumen predictmencoba untuk membentuk matriks model baru dari newdata. Karena ini melibatkan parsing formula yang disuplai ke dynlmdan formula memiliki fungsi L, yang hanya didefinisikan fungsi internaly dynlm, matriks model yang salah terbentuk. Jika Anda mencoba men-debug, Anda akan melihat, bahwa variabel dependen tertinggal tidak sedang tertinggal dalam kasus newdataargumen disediakan.
Apa yang dapat Anda lakukan adalah untuk lag variabel dependen dan memasukkannya ke dalam newdata. Berikut adalah kode yang menggambarkan pendekatan ini. Saya menggunakan set.seedsehingga akan mudah direproduksi.
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)
Inilah perilaku 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
Membentuk 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")
Bandingkan perkiraan dengan model yang cocok:
> 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
Seperti yang dapat Anda lihat untuk data historis, ramalan tersebut bertepatan dan elemen terakhir berisi ramalan 1 langkah di depan.
dynlmpaket tidak akan memberikan perkiraan untuk variabel dependen Anda. Memberikan perkiraan untuk variabel dependen Anda akan memerlukan model untuk menjelaskannya dan mungkin data tambahan. Saya menyarankan Anda untuk membaca sesuatu tentang regresi multivariat seperti "Analisis Statistik Multivariat Terapan" oleh Johnson dan Wichern. atau kursus perkiraan: duke.edu/~rnau/411home.htm