You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

金融经济学作业:R语言计算投资组合Beta遇Date对象运算错误

问题分析与解决方案

报错根源

报错Error in Ops.Date(left, right) : * not defined for "Date" objects的核心原因是:你用来计算组合收益的returns_data数据框中,前5列包含了日期(Date类型)列。当执行returns_data[, 1:5] * as.numeric(ponderaciones)时,Date类型无法与数值进行乘法运算,直接触发了这个错误。

修复步骤

  • 调整数据列选择:先检查returns_data的结构,确认日期列的位置,确保用来计算的5列都是股票收益率的数值列。比如如果日期列是第1列,就把代码里的returns_data[, 1:5]改成returns_data[, 2:6],或者直接指定收益率列的名称:returns_data[, c("股票1", "股票2", "股票3", "股票4", "股票5")]。
  • 修正优化器参数:你在optim里设置的control = list(fnscale = -1)是错误的——这个参数会把目标函数变成最大化逻辑,但你的需求是最小化beta的绝对误差,直接删掉这个参数即可。
  • 清理冗余代码:restricciones <- list(sum = 1)这个变量根本没被用到,而且L-BFGS-B方法不支持这种约束,你已经在目标函数里做了权重归一化,直接删掉该变量即可。

修正后的完整代码

# 定义正确的组合beta计算函数
calcular_beta_portafolio <- function(ponderaciones, returns_data) {
  # 假设日期列是第1列,取2-6列作为5家公司的收益率数据
  portafolio_retorno <- rowSums(returns_data[, 2:6] * as.numeric(ponderaciones))
  modelo_portafolio <- lm(portafolio_retorno ~ returns_data$GSPC)
  return(coef(modelo_portafolio)["returns_data$GSPC"])
}

betas_deseados <- c(0.8, 1.0, 1.2)

ponderaciones_resultados <- matrix(NA, nrow = length(betas_deseados), ncol = 5)

for (i in 1:length(betas_deseados)) {
  objetivo <- function(ponderaciones) {
    ponderaciones <- ponderaciones / sum(ponderaciones)
    return(abs(calcular_beta_portafolio(ponderaciones, returns_data) - betas_deseados[i]))
  }
  
  resultado_optimizacion <- optim(rep(0.2, 5), objetivo, method = "L-BFGS-B", lower = rep(0, 5), upper = rep(1, 5))
  
  ponderaciones_resultados[i, ] <- resultado_optimizacion$par / sum(resultado_optimizacion$par)
}

resultados <- data.frame(Beta_Deseado = betas_deseados, Ponderaciones = NA)
for (i in 1:length(betas_deseados)) {
  resultados$Ponderaciones[i] <- paste(round(ponderaciones_resultados[i, ], 3), collapse = ", ")
}

print(resultados)

额外验证建议

可以提前检查数据列的类型,确保用于计算的列都是数值型:

# 查看前5列的数据类型
sapply(returns_data[, 1:5], class)

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 21:06:31