我試圖獲得R中動態時間序列的滾動預測(然後計算預測的平方誤差)。我基於this StackOverflow question上的很多代碼,但我對R非常陌生,所以我掙扎了很多。任何幫助將非常感激。動態時間序列預測和滾動
require(zoo)
require(dynlm)
set.seed(12345)
#create variables
x<-rnorm(mean=3,sd=2,100)
y<-rep(NA,100)
y[1]<-x[1]
for(i in 2:100) y[i]=1+x[i-1]+0.5*y[i-1]+rnorm(1,0,0.5)
int<-1:100
dummydata<-data.frame(int=int,x=x,y=y)
zoodata<-as.zoo(dummydata)
prediction<-function(series)
{
mod<-dynlm(formula = y ~ L(y) + L(x), data = series) #get model
nextOb<-nrow(series)+1
#make forecast
predicted<-coef(mod)[1]+coef(mod)[2]*zoodata$y[nextOb-1]+coef(mod)[3]*zoodata$x[nextOb-1]
#strip timeseries information
attributes(predicted)<-NULL
return(predicted)
}
rolling<-rollapply(zoodata,width=40,FUN=prediction,by.column=FALSE)
這將返回:
20 21 ..... 80
10.18676 10.18676 10.18676
裏面有兩個問題,我沒想到:從20-> 80,不40-> 100我希望
- 奔跑(如寬度爲40)
- 它給出的預測值是常數:10.18676
我在做什麼錯?有沒有更容易的方法來做預測,而不是全部寫出來?謝謝!
非常感謝!完美的作品! – MatthewK 2012-07-21 02:56:05