3

パッケージdynを使用して構築されたモデルを繰り返し予測する関数を作成しましたが、フィードバックをお願いします。これを行うためのより良い方法はありますか?誰かがdynクラス(またはdynlmクラス)の標準的な「予測」メソッドを書いたことがありますか、それとも私はここで未知の領域に足を踏み入れていますか?

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)
4

1 に答える 1

3

predict.ArimaRのコアには、今後のステップn.aheadを予測するという議論がnあり、それがdynと組み合わせて探しているもののようですが、predict.dyn現在その機能をサポートしていません。その効果を得るにはdyn$whatever、あなたがしているように繰り返し呼び出す必要があります。

于 2011-02-01T02:42:08.957 に答える