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