【发布时间】:2017-11-19 14:27:36
【问题描述】:
我有大量公司股票回报率和价值加权标准普尔 500 指数回报率。我想应用滚动窗口回归,将过去十二个月的公司收益回归到价值加权 S&P500 收益,并提取平方残差的标准差。
我的代码如下所示
stdev <- matrix(NA,nrow = nrow(ReturnMatrix),ncol = 1)
pb <- winProgressBar(title = "",label = "",min = 1,max =
nrow(ReturnMatrix)-11)
for(i in 1:(nrow(ReturnMatrix)-11))
{
VWRet <- ReturnMatrix$VWReturn[i:(i+11)]
Ret <- ReturnMatrix$Return[i:(i+11)]
if(sum(is.na(Ret)) >= 6)
{
stdev[i+11] <- NA
}
else{
Model <- glm(Ret~VWRet-1)
stdev[i+11] <- sigma(Model)
}
setWinProgressBar(pb,value = i,title = paste0(round(100*
(i/(nrow(ReturnMatrix) - 11)),2)," % Done"))
}
SD <- cbind.data.frame(ReturnMatrix,stdev)
数据框 ReturnMatrix 非常大,它包含 3239065 行。数据框中的变量是 PERMNO 是公司标识符,YearMonth 是 YYYYMM 格式的日期,Return 是该月的公司回报,而 VWReturn 是价值加权 S&P500 回报。
目前,运行此 for 循环大约需要 1 小时。
我的问题是:有什么方法可以加快这个过程,我已经尝试在 zoo(ReturnMatrix) 上使用 rollapply,但这只会更慢。
任何帮助将不胜感激。
【问题讨论】:
标签: r regression