You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

为data.table新增列:计算个股预测前5天与组合收益的相关性

解决方案:计算个股预测收益与投资组合收益的相关性

没问题,我来帮你搞定这个需求!咱们用data.table的高效语法就能轻松实现,具体步骤如下:

1. 提取投资组合的日收益向量

首先,我们需要从portfolio_profit_daily中把前5天的收益数据提取成一个数值向量,方便后续计算相关性:

set.seed(1)
portfolio_profit_daily <- data.table(`Stat`="Profit","2019-01-01"=rnorm(1), "2019-01-02"=rnorm(1), "2019-01-03"=rnorm(1), "2019-01-04"=rnorm(1), "2019-01-05"=rnorm(1))
asset_forecasted_daily <- data.table(`Asset`=c("A1","A2","A3","A4"),"2019-01-01"=rnorm(4), "2019-01-02"=rnorm(4), "2019-01-03"=rnorm(4), "2019-01-04"=rnorm(4), "2019-01-05"=rnorm(4), "2019-01-06"=rnorm(4),"2019-01-07"=rnorm(4),"2019-01-08"=rnorm(4),"2019-01-09"=rnorm(4),"2019-01-10"=rnorm(4))

# 提取投资组合的5天收益向量(去掉Stat列)
port_profit_vec <- as.numeric(portfolio_profit_daily[, -"Stat"])

2. 新增相关性列到个股预测数据

接下来,我们用data.table.SD(Subset of Data)特性,对每只个股的前5天预测收益,计算其与投资组合收益的相关性,并把结果作为新列加入asset_forecasted_daily

方式一:指定具体日期列(硬编码)

如果日期固定,可以直接写出前5天的列名:

asset_forecasted_daily[, corr_with_portfolio := apply(.SD, 1, function(row_vals) {
  cor(row_vals, port_profit_vec)
}), .SDcols = c("2019-01-01", "2019-01-02", "2019-01-03", "2019-01-04", "2019-01-05")]

方式二:自动匹配日期列(更灵活)

如果后续日期有变化,我们可以自动提取前5个日期列(跳过第一列的Asset):

# 自动获取前5个日期列名
date_cols <- colnames(asset_forecasted_daily)[2:6]

# 新增相关性列
asset_forecasted_daily[, corr_with_portfolio := apply(.SD, 1, function(row_vals) {
  cor(row_vals, port_profit_vec)
}), .SDcols = date_cols]

3. 查看结果

运行完上述代码后,你可以打印asset_forecasted_daily,就能看到新增的corr_with_portfolio列,里面就是每只个股前5天预测收益和投资组合收益的相关系数:

print(asset_forecasted_daily)

关键说明

  • apply(.SD, 1, ...):对.SD指定的列(前5天日期列)逐行应用相关性计算函数;
  • :=data.table中用于新增或修改列的高效操作符,避免复制整个数据集;
  • 因为我们设置了set.seed(1),所以运行结果是完全可复现的。

内容的提问来源于stack exchange,提问作者FG7

火山引擎 最新活动