如何在R的dataframe中基于列值条件计算个股周度beta值
R计算个股周度beta值解决方案
- 第一步:提取基准市场收益率
你数据中的SP500应和个股数据保存在同一张表的asset列中,假设SP500对应的asset标记为SP500,可替换为你实际的取值:
library(dplyr) # 提取SP500的日度收益率数据 mkt_ret <- df %>% filter(asset == "SP500") %>% select(date, week, mkt_ret = ret)
- 第二步:匹配个股与市场日度收益率
# 剔除SP500本身的行,将个股日度收益率和对应日期的市场收益率匹配 stock_ret <- df %>% filter(asset != "SP500") %>% left_join(mkt_ret, by = c("date", "week"))
- 第三步:按个股+周度分组计算beta
weekly_beta <- stock_ret %>% group_by(asset, week) %>% # 可选过滤:周内交易日不少于3天,避免计算结果失真,可自行调整阈值 filter(n() >= 3) %>% summarize( weekly_beta = cov(ret, mkt_ret, use = "complete.obs") / var(mkt_ret, use = "complete.obs"), .groups = "drop" )
注意:如果你的数据包含多个自然年,建议在生成周标识时同时关联年份,例如使用
lubridate包生成year_week = paste(year(date), week, sep = "_"),分组时用asset和year_week作为分组字段,避免不同年份的同一周被合并计算。use = "complete.obs"参数会自动跳过有缺失值的日期,避免计算报错。
内容的提问来源于stack exchange,提问作者Nish
相关产品推荐
相关产品推荐

