Python statsmodels-绘制拟合分布图

Python statsmodels-绘制拟合分布图,python,statistics,scipy,modeling,statsmodels,Python,Statistics,Scipy,Modeling,Statsmodels,以下代码使用statsmodels model = smf.glm('Y ~ 1', family=sm.families.NegativeBinomial(), data=df) results = model.fit() 这给出了系数和标准: coef stderr Intercept 2.9471 0.120 现在我想以图形方式比较变量Y(直方图)的真实分布和来自模型的分布 但是我需要两个参数r和p来评估stats.nbinom(r,p),并

以下代码使用
statsmodels

model = smf.glm('Y ~ 1', family=sm.families.NegativeBinomial(), data=df)
results = model.fit()
这给出了系数和标准:

               coef stderr   
Intercept    2.9471  0.120
现在我想以图形方式比较变量Y(直方图)的真实分布和来自模型的分布

但是我需要两个参数
r
p
来评估
stats.nbinom(r,p)
,并绘制它

是否有方法从拟合结果中检索参数?
如何绘制PMF?

statsmodels中的广义线性模型GLM目前未估计负二项分布的额外参数。负二项分布仅在形状参数固定的情况下才属于指数分布族

然而,statsmodels在估计所有参数的
离散_模型中也有负二项式作为最大似然模型

计数回归的负二项式参数化是根据平均值或期望值进行的,这与scipy.stats.nbinom中的参数化不同。实际上,负二项计数回归有两种不同的常用参数化,通常称为
nb1
nb2

下面是一个快速编写的脚本,可以从估计的参数中恢复scipy.stats.nbinom参数、
n=size
p=prob
。一旦获得了scipy.stats.distribution的参数,就可以使用所有可用的方法rvs、pmf等

类似的东西应该在statsmodels中提供

在一些示例运行中,我得到了如下结果

data generating parameters 50 0.25
estimated params           51.7167511571 0.256814610633
estimated params           50.0985814878 0.249989725917
此外,由于潜在的指数重参数化,scipy优化器有时会出现收敛问题。在这些情况下,提供更好的起始值或使用Nelder-Mead作为优化方法通常会有所帮助

import numpy as np
from scipy import stats
import statsmodels.api as sm

# generate some data to check
nobs = 1000
n, p = 50, 0.25
dist0 = stats.nbinom(n, p)
y = dist0.rvs(size=nobs)
x = np.ones(nobs)

loglike_method = 'nb1'  # or use 'nb2'
res = sm.NegativeBinomial(y, x, loglike_method=loglike_method).fit(start_params=[0.1, 0.1])

print dist0.mean()
print res.params

mu = res.predict()   # use this for mean if not constant
mu = np.exp(res.params[0])   # shortcut, we just regress on a constant
alpha = res.params[1]

if loglike_method == 'nb1':
    Q = 1
elif loglike_method == 'nb2':    
    Q = 0

size = 1. / alpha * mu**Q
prob = size / (size + mu)

print 'data generating parameters', n, p
print 'estimated params          ', size, prob

#estimated distribution
dist_est = stats.nbinom(size, prob)
顺便说一句:我以前碰到过这个,但没有时间看它

glm不估计负项的形状参数。您可以使用离散_模型negativeBiomial。您能提供一个代码示例吗?statsmodels和scipy.stats之间的参数化不同,我仍然需要找出如何匹配它们。不幸的是,在statsmodels中仍然缺少一些“额外的”。