R dnbinom与Python nbinom.pmf结果不一致,参数转换存疑
R与Scipy负二项分布PMF参数转换错误排查
- 核心问题:你用的参数转换公式完全错误,才导致结果不一致。
- 先明确两者的参数定义逻辑:
- R的
dnbinom(k, size=r, mu=μ):size是负二项分布的形状参数(离散度),mu是分布均值,背后对应的单次成功概率为p_R = r/(r+μ),概率质量函数基于「获得r次成功前的失败次数为k」定义。 - Scipy的
nbinom.pmf(k, n, p):n直接对应R的size(即形状参数r),p是单次成功概率,分布均值公式为n*(1-p)/p,和R的mu等价。
- R的
- 正确的转换公式:
- Scipy的
n= R的size - Scipy的
p= R的size/ (R的size+ R的mu)
- Scipy的
- 用你的例子验证:
- R参数:
size=0.463965,mu=15 - 转换后Scipy参数:
n=0.463965,p=0.463965/(0.463965+15)≈0.03 - 执行
scipy.stats.nbinom.pmf(3, 0.463965, 0.03),结果会和R的dnbinom(3, mu=15, size=0.463965)一致(约0.05)
- R参数:
- 错误原因:
- 你错误地将Scipy的
n设为1/size,混淆了不同教材里的参数化方式(R和Scipy均直接使用原始形状参数r,而非其倒数);同时p的推导公式完全错误,正确的p需要从均值等价的等式反推得出,不是1/(1+size*mu)。
- 你错误地将Scipy的
内容的提问来源于stack exchange,提问作者Pacific Bird
相关产品推荐
相关产品推荐

