R的`dnbinom`与Python的`scipy.stats.nbinom.pmf`结果不同,即使考虑了参数化差异
我正在尝试把我同事的R代码转换成Python。这段代码涉及到使用负二项分布的概率质量函数进行计算,但问题是R中的dnbinom
和Python中的scipy.stats.nbinom.pmf
使用的参数设置不同。根据这个问题及其回答,给定R中的mu
(均值)和size
(离散度),我应该能够用以下代码得到Scipy的n
和p
:
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