Xin chúc mừng, bạn đã tìm thấy một lỗi. Dự đoán dynlm
với dữ liệu mới bị phá vỡ nếu các biến bị trễ được sử dụng. Để xem tại sao nhìn vào đầu ra của
predict(model)
predict(model,newdata=data)
Các kết quả nên giống nhau, nhưng chúng thì không. Không có newdata
đối số, predict
hàm về cơ bản lấy model
phần tử từ dynlm
đầu ra. Với newdata
đối số predict
cố gắng hình thành ma trận mô hình mới từ newdata
. Vì điều này liên quan đến công thức phân tích cú pháp được cung cấp cho dynlm
và công thức có chức năng L
, chỉ được xác định trong hàm dynlm
, nên ma trận mô hình không chính xác được hình thành. Nếu bạn cố gắng gỡ lỗi, bạn sẽ thấy, biến phụ thuộc bị trễ không bị trễ trong trường hợpnewdata
đối số được cung cấp.
Những gì bạn có thể làm là để trễ biến phụ thuộc và đưa nó vào newdata
. Đây là mã minh họa cho phương pháp này. Tôi sử dụng set.seed
để nó sẽ dễ dàng tái sản xuất.
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)
Đây là hành vi lỗi:
> 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
Hình thành 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")
So sánh dự báo với mô hình phù hợp:
> 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
Như bạn có thể thấy đối với dữ liệu lịch sử, dự báo trùng khớp và phần tử cuối cùng chứa dự báo trước 1 bước.
dynlm
gói sẽ không cung cấp dự báo cho các biến phụ thuộc của bạn. Cung cấp dự báo cho các biến phụ thuộc của bạn sẽ yêu cầu một mô hình để giải thích chúng và có thể là dữ liệu bổ sung. Tôi đề nghị bạn nên đọc một cái gì đó về hồi quy đa biến, chẳng hạn như "Phân tích thống kê đa biến ứng dụng" của Johnson và Wicotta. hoặc một khóa học về dự báo: duke.edu/~rnau/411home.htmlm