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

固定分组均值下负二项分布共同离散参数的MLE优化问题

目标

在各组均值mu固定且组间不同的情况下,优化跨数据组的共同离散参数。

问题

我有n=10组数据,假设每组数据都是来自均值固定为$mu=m_i$的负二项分布的随机样本。

# 模拟手头的数据:

# N=10个长度可变的向量
# 固定数据:
N <- 10
ns <- sample(1:100, N)
# 固定均值:
mus <- sample(1:100, N)
list_v <- lapply(1:N, function(i){ rnbinom(ns[i], size=3, mu=mus[i]) })
list_mu <- as.list(mus)

我想要估计一个所有组共用的离散(size)参数,因此需要针对size参数优化联合极大似然。我编写了一个能处理不同mu参数的函数neg_jloglik_nbinom:

# 定义函数:

loglik_nbinom <- function(v, size, m){
  log(dnbinom(v, mu=m, size=size))
}

neg_jloglik_nbinom <- function(disp, v_list, mu_list){
  # 均值m对应的似然
  ind_lls <- list()
  for(i in 1:length(v_list)){
    ind_lls[[i]] <- loglik_nbinom(size=disp, v=v_list[[i]], m=mu_list[[i]])
  }
  # log(似然乘积) == 似然对数之和
  (-1)*sum(unlist(ind_lls))
}

随后我尝试将其传入bbmle::mle2:

fit <- bbmle::mle2(minuslogl=neg_jloglik_nbinom,
                   start=c(disp=3),
                   fixed=list(v_list=list_v,
                              mu_list=list_mu)
                   )

但这抛出了一个奇怪的错误:

Error in bbmle::mle2(minuslogl = neg_jloglik_nbinom, start = c(disp = 3),  : 
  some named arguments in 'fixed' are not arguments to the specified log-likelihood function:v_list1, v_list2, v_list3, v_list4, v_list5, v_list6, v_list7, v_list8, v_list9, v_list10, v_list11, v_list12, v_list13, v_list14, v_list15, v_list16, v_list17, v_list18, v_list19, v_list20, v_list21, v_list22, v_list23, v_list24, v_list25, v_list26, v_list27, v_list28, v_list29, v_list30, v_list31, v_list32, v_list33, v_list34, v_list35, v_list36, v_list37, v_list38, v_list39, v_list40, v_list41, v_list42, v_list43, v_list44, v_list45, v_list46, v_list47, v_list48, v_list49, v_list50, v_list51, v_list52, v_list53, v_list54, v_list55, v_list56, v_list57, v_list58, v_list59, v_list60, v_list61, v_list62, v_list63, v_list64, v_list65, v_list66, v_list67, v_list68, v_list69, v_list70, v_list71, v_list72, v_list73, v_list74, v_list75, v_list76, v_list77, v_list78, v_list79, v_list80, v_list81, v_list82, v_list83, v_list84, v_list85, v_list86, v_list87, v_list88, v_list89, v_list90, v_list91,
可行方案

如果不将v_list和mu_list作为函数参数传入,而是让neg_jloglik_nbinom从环境中获取它们,优化就能正常运行。这虽然不够理想,但也可以接受!

# 重写不带列表参数的目标函数:
neg_jloglik_nbinom <- function(disp){
  # 均值m对应的似然
  ind_lls <- list()
  for(i in 1:length(v_list)){
    ind_lls[[i]] <- loglik_nbinom(size=disp, v=v_list[[i]], m=mu_list[[i]])
  }
  # log(似然乘积) == 似然对数之和
  (-1)*sum(unlist(ind_lls))
}

# 将列表赋值到环境变量中:
v_list=list_v
mu_list=list_mu

# 不指定任何固定参数进行优化计算:
fit <- bbmle::mle2(minuslogl=neg_jloglik_nbinom,
                   start=c(disp=3))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:02:43