2

我想知道是否有人可以指导我完成 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 <- (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 相当陌生,因此非常感谢任何帮助。

谢谢!

4

1 回答 1

1

尝试用函数(滚动回归)替换函数(Z)...

coeffs <- rollapply(Rollingregression, width=52, FUN = function(Rollingregression) 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")

(参考埃里克·齐沃特)

于 2017-06-27T12:49:39.873 回答