我喜欢您的问题,但不幸的是我的回答是“否”,它不能证明H0。原因很简单。您怎么知道p值的分布是均匀的?您可能必须运行均匀性测试,该测试将返回您自己的p值,并且最终会遇到您试图避免的相同类型的推理问题,只有一步之遥。而不是寻找在原来的p值H0,现在你看看其他的p值H′0大约原始p值的分布的均匀性。
更新
这是示范。我从高斯和泊松分布中生成了100个观测值的100个样本,然后为每个样本的正态性检验获得100个p值。因此,问题的前提是,如果p值来自均匀分布,则证明零假设是正确的,这比统计推断中通常的“不拒绝”要强。问题在于“ p值来自统一”本身就是一个假设,您必须以某种方式对其进行检验。
在下面的图片(第一行)中,我显示了来自Guassian和Poisson样本的正态性检验的p值的直方图,您可以看到很难说一个是否比另一个更均匀。那是我的重点。
第二行显示每个分布的样本之一。样本相对较小,因此您确实不能有太多垃圾箱。实际上,这个特定的高斯样本在直方图上看起来并没有那么多。
在第三行中,我将在直方图上显示每个分布的10,000个观测值的组合样本。在这里,您可以拥有更多的垃圾箱,并且形状更加明显。
最后,我运行相同的正态性检验,并为合并的样本获取p值,它拒绝了Poisson的正态性,而未能拒绝高斯。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()