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

在R中使用optimize()最大化含参数mu的生存函数期望值的方法

解决方案

1. 修正生存函数语法

你提供的生存函数初始定义存在R语法错误,先修正为合法的函数写法。另外注意你给出的公式中(1-exp(-(4/3)*x^(3/2)))+exp(-(-(4/3)*x^(3/2)))两项相加结果恒为1,大概率是笔误,你可以根据实际推导结果调整,以下代码先按你给出的公式实现:

surv_func <- function(x, mu) {
  term1 <- exp(-(x/mu)^(1/3))
  term2 <- (1 - exp(-(4/3)*x^(3/2))) + exp(-(-(4/3)*x^(3/2)))
  term3 <- exp(-(x/(3 - mu))^(1/3))
  return(term1 * term2 * term3)
}

2. 构造优化目标函数

你遇到的参数缺失报错,是因为integrate()调用被积函数时没有传入mu参数。我们需要包装一层单参数函数,输入为mu,返回对应mu下生存函数的期望值,作为optimize()的优化对象:

get_expected_value <- function(mu) {
  # 约束mu的合法取值范围,避免分母为0或负数
  if (mu <= 0 || mu >= 3) {
    return(-Inf)
  }
  # 计算积分时通过额外参数传入mu
  integrate_res <- integrate(surv_func, lower = 0, upper = Inf, mu = mu)
  return(integrate_res$value)
}

3. 调用optimize完成最大化

optimize()默认执行最小化,设置maximum = TRUE即可实现最大化,mu的搜索区间设置为(0,3)即可:

# 执行优化
optimize_result <- optimize(
  f = get_expected_value,
  interval = c(0, 3),
  maximum = TRUE
)

# 提取结果
best_mu <- optimize_result$maximum
best_lambda <- 3 - best_mu
max_expected <- optimize_result$objective

# 输出结果
cat("最优mu取值:", round(best_mu, 4), "\n")
cat("对应lambda取值:", round(best_lambda, 4), "\n")
cat("最大期望值:", round(max_expected, 4), "\n")

常见问题调整

  • 如果积分时出现收敛警告,可在integrate函数中添加subdivisions = 1000参数,提高积分细分次数解决精度问题。
  • 如果你原公式中的term2部分存在笔误,仅需要修改surv_func中的定义即可,后续优化逻辑不需要调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:09:03