R的`dnbinom`与Python的`scipy.stats.nbinom.pmf`结果不同,即使考虑了参数化差异

0 投票
1 回答
26 浏览
提问于 2025-04-13 02:33

我正在尝试把我同事的R代码转换成Python。这段代码涉及到使用负二项分布的概率质量函数进行计算,但问题是R中的dnbinom和Python中的scipy.stats.nbinom.pmf使用的参数设置不同。根据这个问题及其回答,给定R中的mu(均值)和size(离散度),我应该能够用以下代码得到Scipy的np

 p = 1 / (1 + size * mu)
 n = 1 / size

但是,如果我假设convert_params做了上述计算,并像这样应用它:

 from scipy.stats import nbinom
 n, p = convert_params(15, 0.463965)
 nbinom.pmf(3, n, p) 

我得到的结果是0.036,而如果我在R中这样做:

 dnbinom(3, mu=15, size=0.463965)

我得到的结果是0.05

有没有人知道这是怎么回事?我是不是用了错误的公式来改变参数设置?

1 个回答

1

注意,从R的文档中可以看到,

size -- 这是指成功试验的目标数量,或者叫做离散参数(也就是伽马混合分布的形状参数)。这个值必须是严格大于零的,不一定要是整数。

而在Python中:

n 是成功的次数。成功的次数 n 也可以用“离散”、“异质性”或“聚合”参数来表示。...

平均值 mu 和成功的概率有关,公式是 p = n/(n + mu)

所以你需要把Python中的 n 直接等同于R中的 size

mu, size = 15, 0.463965
scipy.stats.nbinom(n = size, p = 1/(1 + mu/size)).pmf(3)
0.050034315664281

dnbinom(3, mu=15, size=0.463965)
[1] 0.05003432

撰写回答