韋爾奇檢驗似乎比等方差 t 檢驗差得多
Python 中的 SciPy 函數,
ttest_ind()
默認情況下與 $ t $ -假設方差相等的測試。有一個參數equal_var = False
可以將其切換到 Welch 檢驗,其中不假定兩個樣本的方差相等。這似乎表明,當兩個樣本在設計上具有不同的方差時,Welch 檢驗應該表現更好。所以,我開始對此進行測試。令人驚訝的是,我得到的結論恰恰相反。
from scipy.stats import norm, ttest_ind a1 = norm.rvs(10, 14, size = 6) a2 = norm.rvs(13, 3, 100) p_val1 = ttest_ind(a1, a2)[1] p_val2 = ttest_ind(a1, a2, equal_var = False)[1]
在這裡,我們從平均值為 10 和標準差為 14 的正態分佈中生成 6 個樣本。然後從另一個正態分佈中生成 100 個樣本,平均值為 13 和標準差為 3。很明顯,這兩個樣本的方差不相等。首先 $ p $ -價值來自簡單 $ t $ -假設方差相等的測試,而第二個來自 Welch 測試。首先 $ p $ - 值始終小於 1%,而第二個值通常約為 30-40%。而且由於手段實際上不同,韋爾奇測試表現不佳。這裡的一個批評是我沒有考慮誤報率,只考慮功率。這在下圖中得到了糾正,該圖繪製了兩個測試的假陽性到假陰性率,因此考慮了兩者。
這可以在兩個測試的 alpha-beta 曲線中可視化(假陽性率與假陰性率一起繪製)。兩個樣本 $ t $ -test 的假陰性率比 Welch 測試低得多(以藍色繪製)。
為什麼韋爾奇測試如此輕鬆地被擊敗?是否存在其他可能優於兩個樣本的條件 $ t $ -測試?如果沒有,為什麼要使用它?
編輯:下面的情節有一個錯誤。就統計功效而言,這兩個測試的實際表現是相同的。請參閱我的答案以獲得更正的情節。
您只關注檢測差異的能力,而忽略了錯誤拒絕原假設的可能性,從而使用了有缺陷的指標來衡量測試的性能。如果您只想優化此指標,那麼您可以使用的“最佳”統計測試將是只為所有輸入數據返回 p = 0 的測試。
您應該複製您的示例,並將兩個樣本中的均值設置為 0。
從下面的示例中可以看出,如果沒有差異,則正常 t 檢驗在大約 50% 的時間裡錯誤地拒絕了原假設。
n.sim <- 1e4 p1.w <- p2.t <- rep(0, n.sim) for (i in 1:n.sim) { x <- rnorm(6, 0, 13) y <- rnorm(100, 0, 3) p1.w[i] <- t.test(x,y, var.equal = FALSE)$p.value p2.t[i] <- t.test(x,y, var.equal = TRUE)$p.value } sum(p1.w < 0.05)/n.sim sum(p2.t < 0.05)/n.sim
如果樣本量不相等,則正態 t.test 最容易違反等方差假設。如果較小的樣本具有較高的方差,則它會經常錯誤地拒絕原假設;如果較小的樣本量具有較低的方差,則它過於保守。你的例子是第一種情況。