2011-01-31 29 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.ahead參數來預測未來n步驟,似乎這就是你連同DYN但predict.dyn確實找目前不支持該功能。爲了達到這個效果,你必須像你一樣迭代地調用dyn$whatever