나는 당신의 질문을 좋아하지만 불행히도 내 대답은 아니오입니다 증명하지 못합니다 . 이유는 매우 간단합니다. p- 값의 분포가 균일하다는 것을 어떻게 알 수 있습니까? 당신은 아마도 자신의 p- 값을 돌려 줄 균일성에 대한 테스트를 수행해야 할 것이며, 당신은 피하려고했던 것과 같은 종류의 추론 질문으로 끝날 것입니다. 원래 의 p- 값을 보는 대신 이제 원래 p- 값의 분포 균일성에 대해 다른 의 p- 값을 봅니다.H0H0H′0
최신 정보
여기 데모가 있습니다. Gaussian 및 Poisson 분포에서 100 개의 관측치로 100 개의 표본을 생성 한 다음 각 표본의 정규성 검정에 대해 100 개의 p- 값을 얻습니다. 따라서 문제의 전제는 p- 값이 균일 분포에 의한 것이라면, 귀무 가설이 정확하다는 것을 증명하는데, 이는 통계적 추론에서 일반적인 "거부 실패"보다 더 강력한 진술입니다. 문제는 "p- 값은 균일하다"는 가설 자체이며, 어떻게 든 테스트해야한다는 것이다.
아래 그림 (첫 번째 행)에서 Guassian 및 Poisson 샘플에 대한 정규성 검정의 p- 값 히스토그램을 보여 주므로 하나가 다른 것보다 더 균일한지 말하기 어렵다는 것을 알 수 있습니다. 그것이 나의 요점이었다.
두 번째 행에는 각 분포의 표본 중 하나가 표시됩니다. 샘플은 상대적으로 작으므로 실제로 너무 많은 용지함을 가질 수 없습니다. 실제로,이 특정 가우시안 샘플은 히스토그램에서 그리 많은 가우시안으로 보이지 않습니다.
세 번째 행에서는 히스토그램의 각 분포에 대해 10,000 개의 관측치가 결합 된 표본을 보여줍니다. 여기에 더 많은 쓰레기통을 가질 수 있으며 모양이 더 분명합니다.
마지막으로 동일한 정규성 테스트를 실행하고 결합 된 샘플에 대해 p- 값을 가져 오며 포아송에 대한 정규성을 거부하고 가우시안에 대해서는 거부하지 않습니다. p- 값은 [0.45348631] [0.]입니다.
이것은 물론 증거는 아니지만 하위 샘플에서 p- 값의 분포를 분석하는 대신 결합 된 샘플에 대해 동일한 테스트를 더 잘 실행한다는 아이디어를 보여줍니다.
파이썬 코드는 다음과 같습니다.
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()