我试图用Python中的包scipy将我的数据拟合成负二项分布。然而,我的验证似乎失败了
以下是我的步骤:
mu = 1.4
std = 1.59
print(mu, std)
def convert_params(mu, theta):
"""
Convert mean/dispersion parameterization of a negative binomial to the ones scipy supports
See https://en.wikipedia.org/wiki/Negative_binomial_distribution#Alternative_formulations
"""
r = theta
var = mu + 1 / r * mu ** 2
p = (var - mu) / var
return r, 1 - p
我传递了(希望是正确的…)我的两个统计数据-不同来源之间的命名约定在这一点上相当混乱p
,r
,k
firstParam, secondParam = convert_params(mu, std)
from scipy.stats import nbinom
rv = nbinom(firstParam, secondParam)
然后我用百分比点函数.ppf(0.95)
计算一个值R
。我的问题上下文中的值R
是一个重新排序点
R = rv.ppf(0.95)
mean
和math.sqrt(var)
检索我的原始统计数据李>import math
mean, var = nbinom.stats(firstParam, secondParam, moments='mv')
print(mean, math.sqrt(var))
我错过了什么?对Scipy
中实现的参数化有任何反馈吗
看起来您正在使用不同的转换。引用的wikipedia section处的最后一个项目符号给出了如下公式。使用这些公式,您可以得到完全相同的
mu
和std
:输出:
转换代码是错误的,我相信,SciPy不是使用Wiki约定,而是Mathematica约定
代码打印回1.4,1.59对
和重新排序点计算为
输出
5
相关问题 更多 >
编程相关推荐