私はあなたの質問が好きですが、残念ながら私の答えはNOです、それはH0証明しません。その理由は非常に簡単です。p値の分布が均一であることをどのように知っていますか?おそらく、独自のp値を返す均一性のテストを実行する必要があり、回避しようとしていたのと同じ種類の推論の質問になります。元のH0 p値を調べる代わりに、元のp値の分布の均一性について、別のH′0 p値を調べます。
更新
これがデモンストレーションです。ガウス分布とポアソン分布から100個の観測値の100個のサンプルを生成し、各サンプルの正規性検定用に100個のp値を取得します。したがって、質問の前提は、p値が一様分布からのものである場合、帰無仮説が正しいことを証明することです。これは、統計的推論における通常の「拒否に失敗」よりも強力なステートメントです。問題は、「p値が一様である」という仮説自体であり、何らかの方法でテストする必要があるということです。
下の写真(最初の行)では、GuassianおよびPoissonサンプルの正規性テストのp値のヒストグラムを示しています。一方が他方よりも均一であるかどうかを判断するのは難しいことがわかります。それが私の重要なポイントでした。
2番目の行は、各分布からのサンプルの1つを示しています。サンプルは比較的小さいため、実際にはビンをあまり多く持つことはできません。実際、この特定のガウスサンプルは、ヒストグラム上ではそれほどガウスに見えません。
3番目の行では、ヒストグラム上の各分布の10,000個の観測値のサンプルを組み合わせて表示しています。ここでは、より多くのビンを使用でき、形状がより明確になります。
最後に、同じ正規性検定を実行し、結合されたサンプルのp値を取得します。ポアソンでは正規性を拒否しますが、ガウスでは拒否しません。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()