跳轉到

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》,把「顯著性檢定」變成實驗科學的日常工具。他的邏輯是:

  1. 先假設一個「沒事」的世界(例如:新配方與舊配方沒有差別);
  2. 在這個假設下,計算「出現這麼極端(或更極端)的資料」的機率,就是 p 值;
  3. 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)

$$ 四個必須記住的要點:

  1. p 值不是「\(H_0\) 為真的機率」(貝氏才談那種機率)。
  2. p 值不是「結果由運氣造成的機率」。
  3. p 值大不代表 \(H_0\) 為真,只代表資料沒有提供反對證據。
  4. 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 值最快的方式。

上圖中第一根藍色長柱(\(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 偏移,偏移多少由檢定力決定。
  • 檢定力隨樣本數與效應大小上升;低檢定力的實驗「抓不到」不是因為沒效,而是因為看得不夠久。

練習#

  1. 把實驗一的樣本數從 20 改成 5,重跑模擬。拒絕率還是接近 0.05 嗎?各桶還是約 1000 嗎?提示:p 值的均勻性不依賴 \(n\),只要統計量在 \(H_0\) 下是連續的。
  2. 在實驗二中把效應從 0.5 改成 1.0 與 0.2,估計檢定力。畫出「效應大小 → 檢定力」曲線,這就是 power curve。提示:每個效應值跑 2000 次就夠穩。
  3. 想要「效應 0.5 時檢定力 80%」,雙尾 \(\alpha=0.05\),\(n\) 大約要多大?用模擬二分搜尋 \(n\)。提示:\(n=40\) 與 \(n=60\) 之間應該就會跨過 0.8。
  4. 有人說「p = 0.03 代表有 3% 的機率結論是錯的」。請用本節的兩類錯誤表,指出這句話錯在哪裡。提示:0.03 是 \(P(\text{資料} \mid H_0)\),不是 \(P(H_0 \mid \text{資料})\)。
  5. 若改用單尾檢定(\(H_1: \mu > 0\)),實驗一的拒絕率會變多少?實驗二的檢定力會變多少?提示:單尾把整個 \(\alpha\) 預算放在右尾;方向猜對時檢定力上升,猜錯時歸零。