我有一个样本是离散值的集合(尤其是随时间变化的队列大小)。现在,我想找到它们所属的分布。为了实现此目标,我将采取与其他数量相同的操作,即绘制一个qqplot,启动
import statsmodels.api as sm
sm.qqplot(df, dist = 'geom', sparams = (.5,), line ='s', alpha = 0.3, marker ='.')
[如果dist
不是离散的随机变量(例如'exp'或'norm'),并且确实我曾经获得一些结果,但是当分布是离散的(例如'geom')时,我得到] >
AttributeError: 'geom_gen' object has no attribute 'fit'
我在互联网上搜索了如何制作一个qqplot(或类似的东西)以发现我的样本属于什么分布,但我什么都没发现
我有一个样本是离散值的集合(尤其是随时间变化的队列大小)。现在,我想找到它们所属的分布。为了实现这个目标,我将以与...相同的方式采取行动...
def discreteQQ(x_sample):
p_test = np.array([])
for i in range(0, 1001):
p_test = np.append(p_test, i/1000)
i = i + 1
x_sample = np.sort(x_sample)
x_theor = stats.geom.rvs(.5, size=len(x_sample))
ecdf_sample = np.arange(1, len(x_sample) + 1)/(len(x_sample)+1)
x_theor = stats.geom.ppf(ecdf_sample, p=0.5)
for p in p_test:
plt.scatter(np.quantile(x_theor, p), np.quantile(x_sample, p), c = 'blue')
plt.xlabel('Theoretical quantiles')
plt.ylabel('Sample quantiles')
plt.show()
您可以使用以下步骤创建自己的Q-Q图:1)以升序对数据进行排序; 2)生成与数据相同大小的理论分布并对其进行排序。这里的另一种方法是使用逆ecdf函数将样本的ecdf转换为理论分布的分位数。 3)相对于自身绘制理论分布-这会沿对角线给出一条直线; 4)相对于理论分布(x轴)绘制样本数据(y轴)。