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

R语言使用optimise求解泊松对数似然最大化的lambda参数

实现方案

核心问题修正

你之前的代码存在3个核心问题:

  • 待优化函数的第一个入参必须是待优化的lambda,而非数据
  • 对数似然需要对所有样本的计算结果求和,optimise仅支持对标量返回值做优化
  • 无需手动生成lambda网格序列,optimise会自动在指定区间内做数值搜索

完整实现代码

首先封装仅接收newdata单参数的估计函数:

# 泊松分布lambda最大似然估计函数,仅接收输入数据newdata
estimate_poisson_lambda <- function(newdata) {
  # 内部定义待优化的总对数似然函数
  total_log_lik <- function(lambda, input_data) {
    sum(dpois(x = input_data, lambda = lambda, log = TRUE))
  }
  # 调用optimise执行最大化优化
  optim_result <- optimise(
    f = total_log_lik,
    input_data = newdata, # 把固定输入数据传递给对数似然函数
    lower = 0, # 泊松lambda取值必须大于0
    upper = max(newdata) + 2, # 上界取数据最大值+2足够覆盖最优解
    maximum = TRUE
  )
  # 返回最优lambda值,如需完整优化结果可直接返回optim_result
  return(optim_result$maximum)
}

测试调用

# 你的测试数据
newdata <- c(23,16,18,14,19,20,12,15,15,21)
# 调用函数得到最优lambda
best_lambda <- estimate_poisson_lambda(newdata)
# 输出结果
best_lambda
# 可通过样本均值验证结果(泊松lambda最大似然估计解析解为样本均值)
mean(newdata)

逻辑说明

  • 所有优化逻辑封装在estimate_poisson_lambda内部,外部仅需传入newdata一个参数,符合要求
  • optimise会自动迭代调整lambda的取值,找到总对数似然最大的取值,无需手动处理lambda的入参遍历逻辑
  • 计算结果和样本均值一致,可作为正确性校验标准

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 08:36:05