我正在尝试将同事的 R 代码翻译成 Python。它涉及使用负二项式分布的概率质量函数进行计算,但问题是 R 的
dnbinom
使用与 Python 的 scipy.stats.nbinom.pmf
不同的参数化。根据this问题及其答案,给定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
。
有人知道这是怎么回事吗?我是否使用了错误的公式来更改参数化?
注意 R 的文档,
size——成功试验次数的目标,或分散参数(伽玛混合分布的形状参数)。必须严格为正数,不必是整数。
来自Python:
n 是成功次数。成功次数 n 也可以用 a 来指定 “分散”、“异质性”或“聚集”参数。 ...
平均值 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