Selamat, Anda telah menemukan bug. Prediksi untuk dynlm
dengan 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 newdata
argumen, predict
fungsi ini pada dasarnya mengambil model
elemen dari dynlm
output. Dengan newdata
argumen predict
mencoba untuk membentuk matriks model baru dari newdata
. Karena ini melibatkan parsing formula yang disuplai ke dynlm
dan 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 newdata
argumen 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.seed
sehingga 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.
dynlm
paket 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