【问题标题】:Calculating firm specific Fama-French beta coefficients from a rolling 1 year regression从滚动 1 年回归计算公司特定的 Fama-French 贝塔系数
【发布时间】:2017-11-05 06:51:07
【问题描述】:

我想知道是否有人可以指导我完成 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")

但是,我没有得到 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

输出还为我提供了整个期间其他 fama-french 因子的相同 beta。

2011-01-04                                        
2011-01-11                                        
2011-01-18                                        
2011-01-25                                        
2011-02-01 

我认为这个 xts 代码可以确保 R 理解数据集是一个时间序列。

我也试过这个:

coeffs &lt;- (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"))

仍然给我相同的输出。

我是 R 的新手,因此非常感谢任何帮助。

谢谢!

【问题讨论】:

标签: r finance rollapply performanceanalytics


【解决方案1】:

尝试用函数(Rollingregression)替换函数(Z)...

coeffs Excess Return ~ Rollingregression$OBX + Rollingregression$SMB + Rollingregression$HML + Rollingregression$PR1YR + Rollingregression$LIQ, data = as.data.frame(Z))), by.column=FALSE, align="right")

(参考埃里克·齐沃特)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-12
    • 2020-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多