7.1 檢定的邏輯#
本節目標#
- 說清楚假設檢定要回答的問題:資料與某個「無聊解釋」相容嗎?
- 認識兩條歷史路線:Fisher 的 p 值與 Neyman–Pearson 的錯誤率控制
- 掌握 \(H_0\) / \(H_1\)、第一類與第二類錯誤、檢定力
- 給 p 值一個精確的定義,並用模擬親眼看到「\(H_0\) 為真時 p 值均勻分布」
問題:一句「看起來比較高」不夠#
工廠聲稱新配方讓電池平均壽命從 100 小時進步到 110 小時。抽了 20 顆電池,樣本平均是 106 小時——你該相信嗎?樣本平均本來就會晃動,晃到 106 完全可能是運氣。假設檢定要做的,就是把「運氣能晃到多遠」算成一個機率,讓「資料是否令人意外」有一個客觀的量尺。
1925:Fisher 的路線——p 值與「顯著性」#
Ronald Fisher 在 1925 年出版《Statistical Methods for Research Workers》,把「顯著性檢定」變成實驗科學的日常工具。他的邏輯是:
- 先假設一個「沒事」的世界(例如:新配方與舊配方沒有差別);
- 在這個假設下,計算「出現這麼極端(或更極端)的資料」的機率,就是 p 值;
- p 值很小,代表「沒事」的世界很難解釋這筆資料,於是我們對「沒事」失去信心。
Fisher 主張以 \(p < 0.05\) 作為約定俗成的門檻,但他在書中說的是一種證據的強度:p 值越小,反對「沒事」的證據越強,並沒有一個「接受/拒絕」的二分決策。
1928–1933:Neyman–Pearson 的路線——錯誤率與決策#
Jerzy Neyman 與 Egon Pearson(Karl Pearson 的兒子)在 1928 年起、1933 年的經典論文《On the Problem of the Most Efficient Tests of Statistical Hypotheses》中,把檢定重構成長期決策規則:明確寫下兩個假設 \(H_0\) 與 \(H_1\),事先設定錯誤率,在所有能達成該錯誤率的檢定中挑檢定力最高的。Neyman–Pearson 引理(1933)證明:對簡單 \(H_0\) 對簡單 \(H_1\),概度比檢定是檢定力最強的檢定——這就是為什麼教科書裡的 t 檢定、比例檢定,骨子裡都是概度比的化身。
兩條路線在實務上被攪在一起用(用 Fisher 的 p 值報數字、用 Neyman–Pearson 的 \(\`\alpha\`\) 做決策),這也是 p 值常年被誤讀的歷史根源。本章兩者都教:p 值是你看到的量,\(\alpha\) 與檢定力是你在設計實驗時承諾的長期性質。
理論:假設、錯誤與檢定力#
虛無假設與對立假設#
- \(H_0\)(虛無假設):「沒事」的敘述,通常含等號,例如 \(\mu = 100\)。它是我們用來計算機率的假設。
- \(H_1\)(對立假設):我們想偵測的「有事」,例如 \(\mu \ne 100\)(雙尾)、\(\mu > 100\)(右尾)。
檢定統計量 \(T = T(\mathbf{X})\) 是把樣本濃縮成一個數;p 值由 \(H_0\) 下 \(T\) 的抽樣分布算出。
兩類錯誤#
| 真相 \ 決策 | 不拒絕 \(H_0\) | 拒絕 \(H_0\) |
|---|---|---|
| \(H_0\) 為真 | 正確 | 第一類錯誤(機率 \(\alpha\)) |
| \(H_1\) 為真 | 第二類錯誤(機率 \(\beta\)) | 正確(檢定力 \(1-\beta\)) |
- 第一類錯誤:把沒效說成有效(冤枉)。檢定的水準 \(\alpha\) 就是長期上犯這種錯的比率上限,常取 0.05。
- 第二類錯誤:把有效說成沒效(放過)。檢定力 \(1-\beta\) 是真有效時能偵測到的機率。
- 兩者互相拉扯:門檻調嚴(\(\alpha\) 變小)會讓 \(\beta\) 變大。唯一能同時改善兩者的方法,是增加樣本數或增大效應。
p 值的精確定義#
定義:p 值是「在 \(H_0\) 為真的前提下,檢定統計量取到不低於(就極端程度而言)實際觀察值」的機率:
$$ p = P_{H_0}\big( T \text{ 與觀察值同樣極端或更極端} \big)
$$ 四個必須記住的要點:
- p 值不是「\(H_0\) 為真的機率」(貝氏才談那種機率)。
- p 值不是「結果由運氣造成的機率」。
- p 值大不代表 \(H_0\) 為真,只代表資料沒有提供反對證據。
- p 值的計算以 \(H_0\) 為條件——它回答的問題是「若沒事,這資料多奇怪?」,而不是「有事的機率多高?」。
為什麼門檻 0.05 能控制 \(\alpha\)#
若 p 值在 \(H_0\) 下是 Uniform(0,1)(連續統計量的普遍性質,下面用模擬驗證),則
$$ P_{H_0}(p \le \alpha) = \alpha,
$$ 「p 值小於 0.05 就拒絕」這條規則的長期錯誤率恰好是 0.05。這把 Fisher 的量尺和 Neyman–Pearson 的錯誤率接在同一個開關上。
動手:模擬 p 值的分布#
實驗一:\(H_0\) 為真——p 值應該是均勻分布#
抽 10000 次「純無效資料」:每次 20 個 \(N(0,1)\) 觀測,對 \(\mu=0\) 做 t 檢定,收集 p 值。
import rstatistics as r
g = r.set_seed(42)
N = 10000
ps = []
for i in range(N):
x = g.rnorm(20) # H0 為真:mu = 0
t = r.t_test(x, mu=0.0)
ps.append(t.p_value)
cnt = sum(1 for p in ps if p < 0.05)
print("H0 為真時 p<0.05 的比例:", cnt/N)
b = [0]*10 # 十個等寬桶
for p in ps:
b[min(int(p*10), 9)] += 1
print("各桶計數(每桶理論值 1000):")
for i, c in enumerate(b):
print(f" [{i/10:.1f},{(i+1)/10:.1f}): {c}")
H0 為真時 p<0.05 的比例: 0.0493
各桶計數(每桶理論值 1000):
[0.0,0.1): 992
[0.1,0.2): 1010
[0.2,0.3): 1028
[0.3,0.4): 1029
[0.4,0.5): 949
[0.5,0.6): 959
[0.6,0.7): 1003
[0.7,0.8): 1029
[0.8,0.9): 1001
[0.9,1.0): 1000
解讀:
- 拒絕率 0.0493 ≈ 0.05——這就是 \(\alpha\) 的經驗版本,證明門檻真的控制了第一類錯誤。
- 十個桶各約 1000 個——p 值在 \(H_0\) 下是均勻分布。所以 p 值本身沒有「越小越常見」的傾向;只要沒事,每個區間等可能。
實驗二:真有效應——p 值集體偏小#
把每次抽樣改成 \(N(0.5, 1)\)(\(H_0\) 仍寫 \(\mu=0\),即真實效應 0.5 個標準差),其餘不變:
import rstatistics as r
g = r.set_seed(1)
N = 10000
ps = []
for i in range(N):
x = g.rnorm(20, mean=0.5) # 真實 mu = 0.5,效應存在
t = r.t_test(x, mu=0.0)
ps.append(t.p_value)
cnt = sum(1 for p in ps if p < 0.05)
print("H1 為真(delta=0.5)時 p<0.05 的比例:", cnt/N)
b = [0]*10
for p in ps:
b[min(int(p*10), 9)] += 1
print("各桶計數:")
for i, c in enumerate(b):
print(f" [{i/10:.1f},{(i+1)/10:.1f}): {c}")
H1 為真(delta=0.5)時 p<0.05 的比例: 0.5575
各桶計數:
[0.0,0.1): 6947
[0.1,0.2): 1212
[0.2,0.3): 637
[0.3,0.4): 374
[0.4,0.5): 246
[0.5,0.6): 178
[0.6,0.7): 119
[0.7,0.8): 87
[0.8,0.9): 106
[0.9,1.0): 94
解讀:
- 0.5575 就是這個設定的檢定力:效應 0.5、\(n=20\)、雙尾 \(\alpha=0.05\) 時,約 56% 的實驗能抓到它。換句話說,還有 44% 的實驗會「沒事」——第二類錯誤一點也不罕見。
- p 值分布整體向 0 塌縮:69% 落在 [0, 0.1)。有效應時 p 值偏小、無效應時 p 值均勻,這兩張對照圖是理解 p 值最快的方式。
xychart-beta
title "p 值落入各十分位桶的次數(10000 次模擬)"
x-axis "[0,.1)" "[.1,.2)" "[.2,.3)" "[.3,.4)" "[.4,.5)" "[.5,.6)" "[.6,.7)" "[.7,.8)" "[.8,.9)" "[.9,1]"
y-axis "次數" 0 --> 7000
bar [992, 1010, 1028, 1029, 949, 959, 1003, 1029, 1001, 1000]
bar [6947, 1212, 637, 374, 246, 178, 119, 87, 106, 94]上圖中第一根藍色長柱(\(H_1\) 為真、p 在 [0, 0.1))與其餘藍色短柱的落差,就是「效應存在」的視覺特徵;橘色(\(H_0\) 為真)則平平的像一條直線。
統一量尺:摘要成一句話#
import rstatistics as r
print("效應存在時 p<0.1 的比例:", 0.5575 + 0.1212)
print("無效應時 p<0.1 的比例:", 0.0992)
效應存在時 p<0.1 的比例: 0.6787
無效應時 p<0.1 的比例: 0.0992
同一個門檻下,「證據會出現」與「證據不該出現」的機率差了將近七倍——這就是檢定力 \(1-\beta\) 與水準 \(\alpha\) 之間的距離。
與 R 對照#
R 是 Fisher 與 Neyman 兩系傳統的直系後代(R 的前身 S 誕生於貝爾實驗室,但檢定函式命名完全承襲教科書)。我們在 R 裡重跑實驗一:
set.seed(42)
ps <- replicate(10000, t.test(rnorm(20))$p.value)
mean(ps < 0.05)
table(cut(ps, breaks=seq(0, 1, by=0.1)))
[1] 0.0493
(0,0.1] (0.1,0.2] (0.2,0.3] (0.3,0.4] (0.4,0.5] (0.5,0.6] (0.6,0.7] (0.7,0.8]
992 1010 1028 1029 949 959 1003 1029
(0.8,0.9] (0.9,1]
1001 1000
與 Python 版逐桶一致:rstatistics 的亂數與 R 的 set.seed 位元等價,t 檢定也用同一套公式,所以模擬可以完全重現。順帶一提,t.test 回傳的 $p.value 就是本章定義的 p 值,R 從不「接受 \(H_0\)」,只說 fail to reject——這是 Neyman 的語言。
小結#
- 假設檢定有兩條路線:Fisher(1925)的 p 值衡量「\(H_0\) 多難解釋資料」,Neyman–Pearson(1928–1933)的 \(\alpha\) / 檢定力控制長期錯誤率;實務上兩者合成一句「p < 0.05 就拒絕」。
- p 值 = 在 \(H_0\) 下看到這麼極端資料的機率;它不是 \(H_0\) 為真的機率,也不是結果由運氣造成的機率。
- \(H_0\) 為真時 p 值 Uniform(0,1),因此門檻 \(\alpha\) 直接給出第一類錯誤率;真有效應時 p 值分布向 0 偏移,偏移多少由檢定力決定。
- 檢定力隨樣本數與效應大小上升;低檢定力的實驗「抓不到」不是因為沒效,而是因為看得不夠久。
練習#
- 把實驗一的樣本數從 20 改成 5,重跑模擬。拒絕率還是接近 0.05 嗎?各桶還是約 1000 嗎?提示:p 值的均勻性不依賴 \(n\),只要統計量在 \(H_0\) 下是連續的。
- 在實驗二中把效應從 0.5 改成 1.0 與 0.2,估計檢定力。畫出「效應大小 → 檢定力」曲線,這就是 power curve。提示:每個效應值跑 2000 次就夠穩。
- 想要「效應 0.5 時檢定力 80%」,雙尾 \(\alpha=0.05\),\(n\) 大約要多大?用模擬二分搜尋 \(n\)。提示:\(n=40\) 與 \(n=60\) 之間應該就會跨過 0.8。
- 有人說「p = 0.03 代表有 3% 的機率結論是錯的」。請用本節的兩類錯誤表,指出這句話錯在哪裡。提示:0.03 是 \(P(\text{資料} \mid H_0)\),不是 \(P(H_0 \mid \text{資料})\)。
- 若改用單尾檢定(\(H_1: \mu > 0\)),實驗一的拒絕率會變多少?實驗二的檢定力會變多少?提示:單尾把整個 \(\alpha\) 預算放在右尾;方向猜對時檢定力上升,猜錯時歸零。