5

ローリングウィンドウ回帰を実装し、過去の各日について、推定と利用可能な最後の日の差を計算して記録することにより、回帰の予測可能性をバックテストしようとしています (一歩先の予測を取得しようとしています)。 、列に。

ローリング回帰でChristoph_Jの答えを適用しようとしました複数のオブジェクトを返す

コードに構文エラーはありません。ただし、セマンティック エラーがあるかどうかはわかりません。「予測」列の行の値は、列の行値のi事前予測ですか?iOpCl

library(zoo) 
library(dynlm)
library(quantmod)
sp <- getSymbols("^GSPC", auto.assign=FALSE)
sp$GSPC.Adjusted <- NULL
colnames(sp) <- gsub("^GSPC\\.","",colnames(sp))

sp$Number<-NA
sp$Number<-1:nrow(sp)

sp$OpCl <- OpCl(sp) 
sp$ClHi <- HiCl(sp) 
sp$LoCl <- LoCl(sp) 
sp$LoHi <- LoHi(sp) 

#### LAG

spLag <- lag(sp)
colnames(spLag) <- paste(colnames(sp),"lag",sep="")
sp <- na.omit(merge(sp, spLag))

### REGRESSION

f <- OpCl ~ Openlag + Highlag + OpCllag + ClHilag 

OpClLM <- lm(f, data=sp)

#sp$OpClForecast <- NA
#sp$OpClForecast <- tail(fitted(OpClLM),1)

#####################################################

rolling.regression <- function(series) {
mod <- dynlm(formula = OpCl ~ L(Open) + L(High) + L(OpCl) + L(ClHi), 
data = as.zoo(series))    

nextOb <- min(series[,6])+1 # To get the first row that follows the window
if (nextOb<=nrow(sp)) {   # You won't predict the last one

# 1) Make Predictions
predicted=predict(mod,newdata=data.frame(OpCl=sp[nextOb,'OpCl'],
Open=sp[nextOb,'Open'],High=sp[nextOb,'High'],


OpCl=sp[nextOb,'OpCl'], ClHi=sp[nextOb,'ClHi']))
attributes(predicted)<-NULL

#Solution ; Get column names right
c(predicted=predicted, 
AdjR = summary(mod)$adj.r.squared)
}
}

rolling.window <- 300
results.sp <-  rollapply(sp, width=rolling.window, 
FUN=rolling.regression,  by.column=F, align='right')
sp<-cbind(sp,results.sp)

View(sp)
4

0 に答える 0