我想知道是否有人可以引导我完成R中的rollapply功能。我想用fama-french因子进行1年滚动回归。数据集在Excel中准备,包含2011-2017的每周数据。因此,时间窗口设置为52周。我想计算2012 - 2017年期间的1年滚动beta系数,因此时间窗口将从2011年的第一周开始从[1:52]移动到[2:53]。我有几个定价因素,这个意味着我必须运行多元线性回归。
这是我到目前为止所尝试的:
Rollingregression <- read_excel("C:/Users/neri_/Desktop/Fama French Regression.xlsx", col_names = TRUE, sheet = 1)
Rollingregression <- xts(Rollingregression[,2:7],order.by = Rollingregression[,1])
coeffs <- rollapply(Rollingregression, width=52, FUN = function(Z) coef(lm(Rollingregression$`Excess Return` ~ Rollingregression$OBX + Rollingregression$SMB + Rollingregression$HML + Rollingregression$PR1YR + Rollingregression$LIQ, data = as.data.frame(Z))), by.column=FALSE, align="right")
&#13;
但是,我没有获得每周5年的滚动测试版,而是整个期间的回归:
(Intercept) Rollingregression$OBX Rollingregression$SMB
[1,] 0.0001511391 0.7529416 -0.007408397
[2,] 0.0001511391 0.7529416 -0.007408397
[3,] 0.0001511391 0.7529416 -0.007408397
[4,] 0.0001511391 0.7529416 -0.007408397
[5,] 0.0001511391 0.7529416 -0.007408397
&#13;
在整个期间,输出也给了我与其他fama-french因子相同的beta。
2011-01-04
2011-01-11
2011-01-18
2011-01-25
2011-02-01
&#13;
我认为这个xts代码会确保R知道数据集是一个时间序列。
我也试过这个:
coeffs <- (rollapply(zoo(Rollingregression), width=52, FUN = function(Z){t = lm(Rollingregression$`Excess Return` ~ Rollingregression$OBX + Rollingregression$SMB + Rollingregression$HML + Rollingregression$PR1YR + Rollingregression$LIQ, data = as.data.frame(Z), model = TRUE); return(t$coef)}, by.column = FALSE, align = "right"))
&#13;
仍然给我相同的输出。
我对R很新,所以非常感谢任何帮助。
谢谢!
答案 0 :(得分:1)
尝试用函数(Rollingregression)替换函数(Z)......
coeffs&lt; - rollapply(Rollingregression,width = 52,FUN = function(Rollingregression)coef(lm(Rollingregression $ Excess Return
~Rollregression $ OBX + Rollingregression $ SMB + Rollingregression $ HML + Rollingregression $ PR1YR + Rollingregression $ LIQ,data = as.data.frame(Z))),by.column = FALSE,align =&#34; right&#34;)
(参考Eric Zivot)