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

如何在R中用极大似然估计求解负二项分布参数(含mle2问题及示例)

没问题,我来帮你解决用MLE估计负二项分布(r,p)参数的问题——你之前用mle2没得到有效结果,大概率是参数化或者初始值设置的问题,咱们一步步来:

用MLE估计负二项分布的(r,p)参数(R语言)

首先得明确:R里的负二项分布有两种常见参数化方式,这很容易踩坑——dnbinom()默认支持两种输入:size+prob(对应你要的(r,p),r是成功次数,p是单次成功概率),或者size+mu(均值μ = r*(1-p)/p)。用mle2的时候必须对应正确的参数化,还要给合理的初始值,不然拟合容易失败。

步骤1:准备数据和初始值

初始值对MLE的收敛至关重要,我们可以用矩估计先算出一个合理的初始值:

  • 样本均值 mu = mean(x)
  • 样本方差 var_x = var(x)
  • 对于负二项分布,方差满足 var_x = mu + mu²/r,所以可以解出 r = mu²/(var_x - mu)
  • 再由 mu = r*(1-p)/p 推导出 p = r/(r+mu)

代码实现:

# 加载bbmle包(mle2的所在包)
library(bbmle)

# 你的示例数据
word_a <- c(141,97,103,158,71,101)

# 计算矩估计初始值
mu <- mean(word_a)
var_x <- var(word_a)
r_init <- mu^2 / (var_x - mu)
p_init <- r_init / (r_init + mu)

# 看看初始值:r≈16.4,p≈0.126
r_init
p_init

步骤2:用mle2拟合参数

有两种方式可以拟合:自定义对数似然函数,或者用公式接口,我都给你列出来:

方式1:自定义对数似然函数

我们手动定义对数似然,同时给参数加范围约束(r>0,0<p<1),避免拟合出无效参数:

# 定义负二项对数似然函数
nb_loglik <- function(r, p) {
  # 参数不合法时返回负无穷,让MLE自动避开
  if (r <= 0 || p <= 0 || p >= 1) return(-Inf)
  # 计算对数似然之和
  sum(dnbinom(word_a, size = r, prob = p, log = TRUE))
}

# 用mle2拟合
fit <- mle2(nb_loglik, start = list(r = r_init, p = p_init))

# 查看结果
summary(fit)

方式2:公式接口(更简洁)

mle2支持公式语法,直接调用dnbinom的参数化,更省事:

fit_formula <- mle2(word_a ~ dnbinom(size = r, prob = p), 
                    start = list(r = r_init, p = p_init))

summary(fit_formula)

运行后你会得到参数的估计值、标准误、对数似然值等结果,比如示例数据的估计结果大概是r≈16.3,p≈0.126。

步骤3:验证结果(可选)

你可以用MASS包的glm.nb()来交叉验证,它用的是(mu, theta)参数化(theta就是我们的r),转换后和mle2的结果应该一致:

library(MASS)
fit_nb <- glm.nb(word_a ~ 1)

# 转换为(r,p)参数
r_glm <- fit_nb$theta
p_glm <- r_glm / (r_glm + fit_nb$fitted.values[1])

# 对比结果
cat("glm.nb估计的r:", r_glm, "\n")
cat("glm.nb估计的p:", p_glm, "\n")

为什么你之前可能失败?

  • 初始值不合理:如果随便给初始值(比如r=1,p=0.5),MLE可能无法收敛到有效解。
  • 参数化错误:比如误把dnbinom的mu参数当成了prob,导致似然函数定义错误。
  • 没有参数约束:如果没限制r>0和0<p<1,拟合过程中可能出现无效参数,导致似然值计算出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:27:14