Hypothesis-Testing

許多 p 值的均勻分佈是否提供了 H0 為真的統計證據?

  • November 13, 2018

單個統計檢驗可以證明原假設 (H0) 為假,因此備擇假設 (H1) 為真。但它不能用來證明 H0 是真的,因為沒有拒絕 H0 並不意味著 H0 是真的。

但是讓我們假設您有可能進行多次統計測試,因為您有許多數據集,它們彼此獨立。所有數據集都是同一過程的結果,您希望對過程本身進行一些陳述(H0/H1),並且對每個測試的結果不感興趣。然後,您收集所有生成的 p 值,並碰巧通過直方圖看到 p 值明顯均勻分佈。

我現在的推理是,只有當 H0 為真時才會發生這種情況——否則 p 值的分佈會不同。因此,這是否足以證明 H0 為真?還是我在這裡遺漏了一些重要的東西,因為我花了很多意志力來寫“結論 H0 是真的”,這在我的腦海中聽起來非常錯誤。

我喜歡你的問題,但不幸的是我的回答是否定的,這並不能證明 $ H_0 $ . 原因很簡單。你怎麼知道 p 值的分佈是均勻的?您可能必須運行一致性測試,這將返回您自己的 p 值,並且您最終會遇到與您試圖避免的相同類型的推理問題,僅一步之遙。而不是查看原始的 p 值 $ H_0 $ , 現在你看看另一個的 p 值 $ H'_0 $ 關於原始 p 值分佈的均勻性。

更新

這是演示。我從高斯和泊松分佈中生成 100 個觀測值的 100 個樣本,然後為每個樣本的正態性檢驗獲得 100 個 p 值。因此,問題的前提是,如果 p 值來自均勻分佈,則證明原假設是正確的,這比統計推斷中通常的“拒絕失敗”要強。問題在於“p 值來自統一”本身就是一個假設,您必須以某種方式對其進行測試。

在下面的圖片(第一行)中,我顯示了來自高斯和泊松樣本的正態性檢驗的 p 值直方圖,您可以看到很難說一個是否比另一個更均勻。這是我的主要觀點。

第二行顯示來自每個分佈的樣本之一。樣本相對較小,因此您確實不能擁有太多垃圾箱。實際上,這個特殊的高斯樣本在直方圖上看起來一點也不像高斯。

在第三行中,我在直方圖上顯示每個分佈的 10,000 個觀測值的組合樣本。在這裡,您可以擁有更多的 bin,並且形狀更加明顯。

最後,我運行相同的正態性檢驗並獲得組合樣本的 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()

引用自:https://stats.stackexchange.com/questions/376772

comments powered by Disqus