Вы можете создать свой собственный график QQ, выполнив следующие действия: 1) Сортировать данные в порядке возрастания; 2) Создайте теоретическое распределение того же размера, что и ваши данные, и отсортируйте его. Другой подход заключается в преобразовании ecdf образца в квантили теоретического распределения с использованием обратной функции ecdf; 3) Постройте теоретическое распределение против себя - это даст вам прямую линию по диагонали; 4) Постройте данные выборки (ось Y) относительно теоретического распределения (ось X).
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
n = 100
p_theor = [1/2, 1/3, 1/4, 1/5] # The probabilities we check for
p_sample = 1/5 # The true probability of the sample distribution
# Generate the experimental data and sort it
x_sample = np.sort(stats.geom.rvs(p_sample, size=n))
# EDCF calculation
ecdf_sample = np.arange(1, len(x_sample) + 1)/(len(x_sample)+1)
# Generate Q-Q plot for the different hypothetical distributions
n = x_sample.shape[0]
plt.subplots(2, 2)
for i, p in enumerate(p_theor):
# Generate the theoretical distribution and sort it
# x_hyp = np.sort(stats.geom.rvs(p, size=n))
# Or inverse the samle ecdf as done in the following line
x_theor = stats.geom.ppf(ecdf_sample, p=p)
plt.subplot(2, 2, i+1)
plt.scatter(x_theor, x_theor, label='p_theor = {}'.format(np.round(p, 2)))
plt.scatter(x_theor, x_sample, label='p_sample = 0.2')
plt.xlabel('Theoretical quantiles')
plt.ylabel('Sample quantiles')
plt.legend()
![enter image description here](https://i.stack.imgur.com/AwMII.png)
Редактировать: вот функция, которая выводит график QQ для распределения геометрии c. По умолчанию теоретическое распределение рассчитывается с p = 0,5. Вы можете изменить его, указав альтернативную вероятность в качестве второго параметра функции geom_QQ_plot. Помните, что график QQ должен иметь две кривые: теоретическая и теоретическая выборка, чтобы понять, соответствуют ли выборка и теоретические распределения. Ниже образец был сгенерирован с использованием p = 0.2, тогда как теоретические квантили были сгенерированы с использованием p = 0.5. Расхождение между выборкой и гипотетическим распределением очевидно.
def geom_QQ_plot(x_sample, p=0.5):
""" Plot the Q-Q plot of the geometric distribution """
ecdf_sample = np.arange(1, len(x_sample) + 1)/(len(x_sample)+1)
x_theor = stats.geom.ppf(ecdf_sample, p=p)
plt.scatter(x_theor, x_theor, label='theor-theor quantiles')
plt.scatter(x_theor, x_sample, label='theor-sample quantiles')
plt.xlabel('Theoretical quantiles')
plt.ylabel('Sample quantiles')
plt.legend()
geom_QQ_plot(x_sample)
![enter image description here](https://i.stack.imgur.com/Gywn4.png)