【发布时间】:2020-01-28 16:23:42
【问题描述】:
我正在处理每日股票数据,我正在尝试根据 t-11 个月时间窗口的每日股票数据计算第 t 月的每月 beta 值(例如,12 月的 beta 包含从 1 月到 12 月的每日股票数据) )。此外,我想在回归方程中包含至少 150 个观察值。 ->Link to data screenshot
我想通过计算过去 12 个月的超额股票收益对超额市场收益的回归系数来计算 beta。我的样本数据在最后一列列出了每只股票的超额收益(股票按数字分类)和市场收益 mktrf。
我想出了以下代码,但不幸的是我找不到错误:我在过去 12 个月中使用了 width=252 的天数,但尚未在代码中包含至少 150 次观察的先决条件。当股票退市时,我也遇到了 NA 的麻烦。我搜索了论坛,我只能找到与答案中相同的代码,所以我不知道我做错了什么。
rollingbeta <- rollapply(joined_data,
width=252,
FUN = function(x) {
t = lm(formula=paste0(" ` ", x , " ` ~ mktrf"), data = x, na.rm=T);
return(t$coef) },
by.column=TRUE,
align="right")
理想情况下,我希望以与输入表相同的数据格式查找输出。
对此有什么想法吗?非常感谢任何帮助!
这是一个使用 dput 创建的示例:
结构(列表(日期 = 结构(c(16804、16805、16806、16807、 16808, 16811, 16812, 16813, 16814, 16815), class= "日期"),
10001= c(NA, -0.0132978723404255, 0.0148247978436657, 0.0146082337317397, 0.0196335078534031, 0.0346598202824133, 0.0235732009925558, 0, -0.0145454545454544, -0.0172201722017221),93436= c(NA, 8.95215075422673e-05, -0.0196482119679542,-0.0154766252739225,-0.0215627173661025, -0.0149289099526067,0.0101996632186674,-0.0460065723674811, 0.0293045779042485, -0.00577165583470751), mktrf = c(-0.0159, 0.0012, -0.0135, -0.0244, -0.0111, -6e-04, 0.0071, -0.0267, 0.0165, -0.0214)), row.names = c(NA, 10L), class= "data.frame")
【问题讨论】:
-
对此@G.Grothendieck 感到抱歉。我只是想确保为这么大的滚动窗口包含足够的观察结果。我更新了较小版本的 dput 输出,希望现在可以使用!
-
data.table 对象不适用于
dput,因为它们包含不可重现的内部指针。请先转换成数据框。 -
很抱歉,没有意识到这一点!我现在改了。