2011-01-31 8 views
3

필자는 dyn 패키지를 사용하여 빌드 된 모델을 반복적으로 예측하는 함수를 작성했으며 이에 대한 피드백을 보내고 싶습니다. 이 작업을 수행하는 더 좋은 방법이 있습니까? 누군가 dyn 클래스 (또는 dynlm 클래스)에 대한 표준 "예측"메소드를 작성 했습니까? 아니면 여기서 미지의 영역으로 향하고 있습니까?반복적으로 dyn 모델을 예측합니다.

ipredict <-function(model, newdata, interval = "none", 
     level = 0.95, na.action = na.pass, weights = 1) { 
P<-predict(model,newdata=newdata,interval=interval, 
    level=level,na.action=na.action,weights=weights) 
for (i in seq(1,dim(newdata)[1])) { 
    if (is.na(newdata[i])) { 
    if (interval=="none") { 
    P[i]<-predict(model,newdata=newdata,interval=interval, 
    level=level,na.action=na.action,weights=weights)[i] 
    newdata[i]<-P[i] 
    } 
    else{ 
    P[i,]<-predict(model,newdata=newdata,interval=interval, 
    level=level,na.action=na.action,weights=weights)[i,] 
    newdata[i]<-P[i,1] 
    } 
    } 
} 
P_end<-end(P)[1]*frequency(P)+(end(P)[2]-1) #Convert (time,period) to decimal time 
P<-window(P,end=P_end-1*frequency(P)) #Drop last observation, which is NA 
return(P) 
} 

사용 예제 :

library(dyn) 
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) 
Error<-rnorm(10) 
y<-y+.5*A+.2*B-.3*C+.1*Error #Add relationship to independant variables 
data=cbind(y,A,B,C) 

#Fit linear model 
model.dyn<-dyn$lm(y~A+B+C+lag(y,-1),data=data) 
summary(model.dyn) 

#Forecast linear model 
A<-c(A,rnorm(5)) 
B<-c(B,rnorm(5)) 
C<-c(C,rnorm(5)) 
y=window(y,end=end(y)+c(5,0),extend=TRUE) 
newdata<-cbind(y,A,B,C) 
P1<-ipredict(model.dyn,newdata) 
P2<-ipredict(model.dyn,newdata,interval="prediction") 

#Plot 
plot(y) 
lines(P1,col=2) 

답변

3

predict.Arima R의 핵심에 앞서 n 단계를 예측하는 n.ahead 인수를 가지고 있으며 그 것 같다 당신은 DYN하지만 predict.dyn 않습니다와 함께 무엇을 찾고 현재 해당 기능을 지원하지 않습니다. 그 효과를 얻으려면 반복적으로 dyn$whatever으로 전화해야합니다.