Python 中的泊松分布 QQ 图

3
我一直在尝试使用Python制作Poisson分布的QQ图。以下是我目前的代码:
import numpy as np
import statsmodels.api as sm
import scipy.stats as stats
pois = np.random.poisson(2.5, 100)  #creates random Poisson distribution with mean = 2.5
fig =sm.qqplot(pois, stats.poisson, line = 's')
plt.show()

每当我这样做时,就会出现“AttributeError:'poisson_gen'对象没有'fit'属性”的错误。
当搜索这个错误时,我发现很多人说没有Poisson.fit可用。我相当确定qqplot函数正在调用Poisson.fit。这是否意味着qqplot函数无法与泊松分布一起使用?如果qqplot函数不能与泊松分布一起使用,您会如何推荐生成此图?任何建议都将不胜感激。

当查看np.random.poisson文档时,第一句话为“从泊松分布中绘制样本”。你可能需要的是scipy.stats.poisson - cel
我按照你的建议更改了代码:pois = poisson.rvs(2.5, size=1000),但是我仍然得到相同的错误。 - beth
抱歉,我被这个注释弄糊涂了。实际问题是,scipy中的离散函数没有.fit()方法,因此无法在statsmodels的qqplot函数中使用。不过我还需要检查其中的原因。 - cel
相关链接:https://github.com/scipy/scipy/issues/2184 - cel
如果分布没有 .fit() 方法,QQ 函数会起作用吗?(这是我认为可能存在的问题。)如果有的话,还有其他方法可以制作 QQ 图吗? - beth
不,statsmodels的实现需要一个“fit”方法,因此会出现错误。但是qqplot只是将(真实?)分布的分位数绘制为样本分位数。自己实现这个可能并不难。 - cel
2个回答

5
我也遇到了同样的错误。以下方法对我有效:

我遇到相同的错误。以下方法似乎对我有用:

import matplotlib.pyplot as plt
import numpy as np
import scipy.stats as stats
data=np.random.poisson(2.5, 100)
stats.probplot(data, dist='poisson', sparams=(2.5,), plot=plt)
plt.show()

1

现在已经是2022年底了,这个问题仍然存在。我注意到statsmodels的qqplots可以接受冻结的scipy分布,这些分布没有进行拟合,因此不会对离散分布抛出错误。

from scipy import stats
import statsmodels.api as sm
import numpy as np
import matplotlib.pyplot as plt

mu = 10
test_array = stats.poisson.rvs(mu=mu, size=10000)
fig, ax = plt.subplots(figsize=(7, 5))
ax.set_title("Poisson vs Poisson Example Q-Q Plot", fontsize=14)
test_mu = np.mean(test_array)
qdist = stats.poisson(test_mu)
sm.qqplot(test_array, dist=qdist, line="45", ax=ax)

fig.set_tight_layout(True)
plt.savefig('poisson_qq_ex.png')
plt.close()

使用StatsModels绘制离散泊松分布的Q-Q图示例


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接