从滚动的1年回归中计算公司特定的Fama-French beta系数

时间:2017-06-04 10:18:45

标签: r finance rollapply performanceanalytics

我想知道是否有人可以引导我完成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;
&#13;
&#13;

但是,我没有获得每周5年的滚动测试版,而是整个期间的回归:

&#13;
&#13;
  (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;
&#13;
&#13;

在整个期间,输出也给了我与其他fama-french因子相同的beta。

&#13;
&#13;
2011-01-04                                        
2011-01-11                                        
2011-01-18                                        
2011-01-25                                        
2011-02-01 
&#13;
&#13;
&#13;

我认为这个xts代码会确保R知道数据集是一个时间序列。

我也试过这个:

&#13;
&#13;
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;
&#13;
&#13;

仍然给我相同的输出。

我对R很新,所以非常感谢任何帮助。

谢谢!

1 个答案:

答案 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)