我想我的数据拟合为负二项分布与包SciPy的在Python中。但是,我的验证似乎失败了。
这些是我的步骤:
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)
然后,我R
用百分比点函数 计算一个值.ppf(0.95)
。R
我的问题中的值是一个再订货点。
R = rv.ppf(0.95)
mu
,并std
与mean
和math.sqrt(var)
分别。import math
mean, var = nbinom.stats(firstParam, secondParam, moments='mv')
print(mean, math.sqrt(var))
我想念什么?有关在中实现的参数化的任何反馈Scipy
?
转换代码是错误的,我相信SciPy不是使用Wiki约定,而是使用Mathematica约定
#%%
import numpy as np
from scipy.stats import nbinom
def convert_params(mean, std):
"""
Convert mean/dispersion parameterization of a negative binomial to the ones scipy supports
See https://mathworld.wolfram.com/NegativeBinomialDistribution.html
"""
p = mean/std**2
n = mean*p/(1.0 - p)
return n, p
mean = 1.4
std = 1.59
n, p = convert_params(mean, std)
print((n, p))
#%%
m, v = nbinom.stats(n, p, moments='mv')
print(m, np.sqrt(v))
代码打印回1.4、1.59对
并重新排序点计算为
rv = nbinom(n, p)
print("reorder point:", rv.ppf(0.95))
输出 5
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句