축하합니다. 버그를 발견했습니다. dynlm
지연된 변수를 사용하면 새 데이터에 대한 예측 이 중단됩니다. 왜 출력을 보는지 보려면
predict(model)
predict(model,newdata=data)
결과는 동일해야하지만 그렇지 않습니다. newdata
인수가 없으면 predict
함수는 기본적으로 출력 model
에서 요소를 가져옵니다 dynlm
. newdata
인수를 사용하면 predict
에서 새 모델 행렬을 만들려고합니다 newdata
. 여기에는 제공된 수식 구문 분석이 포함 dynlm
되고 수식에는 함수 L
내부에서만 정의 된 함수 dynlm
가 있으므로 잘못된 모델 행렬이 형성됩니다. 디버깅하려고하면 newdata
인수가 제공된 경우 지연 종속 변수가 지연되지 않는 것을 알 수 있습니다.
할 수있는 일은 종속 변수를 지연시키고에 포함시키는 것입니다 newdata
. 이 접근법을 설명하는 코드는 다음과 같습니다. 나는 set.seed
쉽게 재현 할 수 있도록 사용합니다.
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)
버기 동작은 다음과 같습니다.
> 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
양식 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")
모형 적합과 예측을 비교합니다.
> 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
과거 데이터를 볼 수 있듯이 예측은 일치하며 마지막 요소에는 1 단계 사전 예측이 포함됩니다.
dynlm
패키지 만 사용하면 종속 변수에 대한 예측이 제공되지 않습니다. 종속 변수에 대한 예측을 제공하려면 변수 및 추가 데이터를 설명하는 모델이 필요합니다. Johnson과 Wichern의 "Applied Multivariate Statistical Analysis"와 같은 다변량 회귀 분석에 대해 읽어보십시오. 또는 예측 과정 : duke.edu/~rnau/411home.htm