H0H0H′0
ОНОВЛЕННЯ
Ось демонстрація. Я генерую 100 зразків із 100 спостережень з розподілу Гаусса та Пуассона, потім отримую 100 p-значень для тесту на нормальність кожного зразка. Отже, передумова питання полягає в тому, що якщо значення р є від рівномірного розподілу, то це доводить, що нульова гіпотеза є правильною, що є більш сильним твердженням, ніж звичайне "не вдається відкинути" статистичні умовиводи. Біда в тому, що "р-значення є рівномірними" - це сама гіпотеза, яку потрібно якось перевірити.
На малюнку (перший рядок) нижче я показую гістограми p-значень з тесту на нормальність для вибірки Гуассіана та Пуассона, і ви можете бачити, що важко сказати, чи одна рівномірніша за іншу. Це було моє головне.
Другий рядок показує один із зразків з кожного розподілу. Зразки порівняно невеликі, тому дійсно не можна мати занадто багато контейнерів. Насправді цей конкретний зразок Гаусса зовсім не такий гауссовий на гістограмі.
У третьому ряді я показую комбіновані вибірки з 10 000 спостережень за кожне розподілення на гістограмі. Тут ви можете мати більше бункерів, а форми більш очевидні.
Нарешті, я запускаю той самий тест на нормальність і отримую p-значення для комбінованих зразків, і він відкидає нормальність для Пуассона, не відхиляючи його для Гауссана. Значення р: [0.45348631] [0.]
Це, звичайно, не доказ, а демонстрація ідеї про те, що вам краще провести той же тест на комбінованій вибірці, а не намагатися проаналізувати розподіл p-значень за підпробочками.
Ось код Python:
import numpy as np
from scipy import stats
from matplotlib import pyplot as plt
def pvs(x):
pn = x.shape[1]
pvals = np.zeros(pn)
for i in range(pn):
pvals[i] = stats.jarque_bera(x[:,i])[1]
return pvals
n = 100
pn = 100
mu, sigma = 1, 2
np.random.seed(0)
x = np.random.normal(mu, sigma, size=(n,pn))
x2 = np.random.poisson(15, size=(n,pn))
print(x[1,1])
pvals = pvs(x)
pvals2 = pvs(x2)
x_f = x.reshape((n*pn,1))
pvals_f = pvs(x_f)
x2_f = x2.reshape((n*pn,1))
pvals2_f = pvs(x2_f)
print(pvals_f,pvals2_f)
print(x_f.shape,x_f[:,0])
#print(pvals)
plt.figure(figsize=(9,9))
plt.subplot(3,2,1)
plt.hist(pvals)
plt.gca().set_title('True Normal')
plt.gca().set_ylabel('p-value')
plt.subplot(3,2,2)
plt.hist(pvals2)
plt.gca().set_title('Poisson')
plt.gca().set_ylabel('p-value')
plt.subplot(3,2,3)
plt.hist(x[:,0])
plt.gca().set_title('a small sample')
plt.gca().set_ylabel('x')
plt.subplot(3,2,4)
plt.hist(x2[:,0])
plt.gca().set_title('a small Sample')
plt.gca().set_ylabel('x')
plt.subplot(3,2,5)
plt.hist(x_f[:,0],100)
plt.gca().set_title('Full Sample')
plt.gca().set_ylabel('x')
plt.subplot(3,2,6)
plt.hist(x2_f[:,0],100)
plt.gca().set_title('Full Sample')
plt.gca().set_ylabel('x')
plt.show()