Learning Objectives
- 辨認自願回應、方便抽樣造成的抽樣偏誤,並說明為什麼加大樣本不能修正偏誤
- 辨認倖存者偏誤:只分析「留下來」的資料時,平均與相關會怎麼改變
- 用模擬說明多重比較與 p-hacking 為什麼會讓偽陽性大增,以及事先決定分析計畫、校正的作用
- 用固定種子、把分析決定寫進程式、記錄版本,讓分析可以重現
程式沒有錯,結論卻錯了
前面各課的程式都能正確執行,算出來的數字也都對。但一個分析的結論可能在程式之外就出了問題:
| 環節 | 可能的陷阱 | 這一課的例子 |
|---|---|---|
| 資料怎麼來 | 抽樣偏誤:樣本不能代表想了解的母體 | 只有愛讀書的人回問卷、只在宿舍門口問通勤時間 |
| 誰看得到 | 倖存者偏誤:只看到「留下來」的觀察 | 期中考差的人退選了,期末成績單上看不到他們 |
| 怎麼分析 | p-hacking、分析的分岔路:試很多種分析,只報顯著的那一個 | 20 個指標裡總會有一個 p < 0.05 |
| 別人能不能重做 | 可重現性:同樣的資料與程式,能不能得到同樣的結果 | 亂數沒設種子、在試算表裡手動刪列 |
這一課的資料都是程式產生的模擬資料,不是任何學校的真實資料;範例裡「退選」「回問卷」的規則也是為了示範而設定的。
抽樣偏誤:樣本和母體不一樣
簡單隨機抽樣讓母體裡每個人被抽到的機會相同,樣本平均才會在母體平均附近隨機變動。 實務上常見的兩種偏離:
- 自願回應:問卷放在網路上讓人自己填。願意填的人,常常就是對主題比較有興趣、表現比較好或意見比較強烈的人。
- 方便抽樣:只問容易找到的人,例如上課的同學、住宿生、自己的朋友。如果「容易找到」和要量的變數有關,結果就會偏。
偏誤和隨機誤差不同:隨機誤差會隨樣本變大而變小,偏誤不會。回覆的人從 70 人變成 7,000 人,只是把同一個偏掉的數字算得更精確。
逐步看:自願回應與方便抽樣
假設我們有全部 200 位學生的資料(母體),再看三種「抽樣」各得到什麼。注意右邊 answered 是每個人有沒有回覆的布林值。
倖存者偏誤:看不到離開的人
倖存者偏誤是抽樣偏誤的一種:資料只包含通過某個篩選、「活下來」的觀察,而篩選本身和你要分析的結果有關。 例如只看還在營業的店家歸納成功的原因、只訪問畢業的校友評價課程、只用期末還在修課的人評估一門課。
被篩掉的觀察不只會讓平均偏高,也會改變關聯:篩選把某一段範圍的人拿掉,兩個變數的相關常會變弱(這叫全距限制)。 所以分析前要先問:「這份資料裡少了誰?為什麼少?」
逐步看:只看留下來的人
用微積分的成績。假設期中考低於 50 分的人都退選,期末成績單上只剩留下來的人。
多重比較、p-hacking 與分析的分岔路
顯著水準 0.05 的意思是:虛無假設為真時,一次檢定有 5% 的機會得到 p < 0.05(型一錯誤)。 做一次檢定,偽陽性的機會是 5%;做 20 次彼此獨立的檢定,至少一次偽陽性的機會是 1 − 0.95²⁰ ≈ 64%。
p-hacking 指的是試了很多種分析,只報告顯著的那一個:換指標、換排除條件、只看某個子群組、換檢定方法、資料不夠顯著就再多收一些。 Simmons、Nelson 與 Simonsohn(2011,Psychological Science)用模擬示範:只要組合幾個這類常見的彈性,偽陽性率就會遠高於名目上的 5%。
即使研究者沒有刻意試很多次,問題也可能發生:Gelman 與 Loken(2013)稱為分析的分岔路(garden of forking paths)。 看到資料之後才決定怎麼分析,每一個「看起來合理」的選擇都可能被資料的隨機變動帶著走,結果等於從很多條路裡挑了一條。
美國統計學會(ASA)2016 年關於 p 值的聲明(Wasserstein 與 Lazar,The American Statistician)也明列:科學結論不應只看 p 值有沒有跨過某個門檻, 適當的推論需要完整報告與透明,只挑結果報告會讓報告出來的 p 值難以解讀。
可以怎麼做:
- 事先決定:資料還沒看之前,就寫下主要指標、排除條件、要比較的組與檢定方法(預先登記,preregistration)。
- 全部報告:試過幾種分析就寫出來,不要只留顯著的。
- 校正多重比較:例如 Bonferroni 校正,做 m 個檢定時,每個檢定改用 0.05 ÷ m 當門檻;它比較保守,會降低檢定力。
- 探索性的發現當作「值得再驗證的假設」,用新的資料確認。
逐步看:20 個沒有效果的指標
兩組的資料都從同一個常態分布抽出,真正的差異是 0。ttest_ind 加上 axis=1 可以一次做很多個 t 檢定。
可重現性:讓別人(和未來的你)能重做一次
可重現(reproducible)指的是:用同樣的資料與程式,別人能得到同樣的數字與圖。做到這一點的幾個習慣:
| 習慣 | 作法 |
|---|---|
| 亂數固定種子 | np.random.default_rng(2026)、df.sample(..., random_state=42) |
| 每一個分析決定都寫在程式裡 | 排除條件寫成 query("study_hours <= 20"),不要在試算表裡手動刪列 |
| 原始資料不覆蓋 | 清理後存成新檔,原始檔保持不動 |
| 記錄環境 | 印出或寫下 pandas、numpy、scipy 的版本,不同版本的預設值可能不同 |
| 從頭跑一次 | 交出前把 notebook 或程式從第一行重新執行,確定不依賴執行順序 |
這些習慣也讓「事先決定分析計畫」做得到:程式本身就是一份記錄。
逐步看:種子、寫成程式的排除條件、版本
實作:5 個指標的多重比較
模擬 1,000 份「兩組各 30 人、沒有效果」的研究,每份比較 5 個指標:
- 用
rng = np.random.default_rng(1)產生兩組資料,形狀都是(5000, 30),平均 0、標準差 1(rng.normal(0, 1, size=(5000, 30)),先產生a再產生b)。 stats.ttest_ind(a, b, axis=1).pvalue.reshape(1000, 5)得到每份研究的 5 個 p 值。- 依序印出:只看第 1 個指標時 p < 0.05 的比例、5 個裡至少一個 p < 0.05 的比例、用 Bonferroni 校正(p < 0.05 / 5)後至少一個的比例。
只看第 1 個結果: …
5 個裡至少一個: …
Bonferroni 後至少一個: …
小測驗:抽樣偏誤與倖存者偏誤
學生會在網路上發問卷調查「全校學生每週的運動時間」,結果有 3,000 人填寫。下列哪一個說法最恰當?
某課程只用「期末還在修課的同學」的問卷評估教學效果,結果滿意度很高。這最可能是哪一種陷阱?
下面程式會印出什麼?
print(round(1 - 0.95 ** 10, 2))
小測驗:p-hacking 與可重現性
一位同學分析資料時,先比較全體沒有顯著,再只看大三大四、換成 Mann-Whitney,終於得到 p = 0.03,報告中只寫了這一個結果。問題在哪裡?
做 8 個檢定時,Bonferroni 校正後每個檢定的顯著門檻是多少?
下列哪一種作法最不利於分析的可重現性?
重點整理
- 抽樣偏誤:自願回應、方便抽樣讓樣本和母體不同;偏誤不會隨樣本變大而消失。
- 倖存者偏誤:只看通過篩選的觀察,平均會偏、相關也會變;先問「資料裡少了誰?」。
- 多重比較:做 m 個檢定,至少一個偽陽性的機會約 1 − 0.95ᵐ;Bonferroni 校正改用 0.05 ÷ m。
- p-hacking 與分岔路:看了資料才決定分析、只報顯著的結果,會讓 p 值失去意義;事先決定分析計畫,並報告所有試過的分析。
- 可重現性:固定種子、決定寫進程式、原始資料不覆蓋、記錄版本、從頭跑一次。
- 下一課把這些整理成一份分析報告:怎麼寫問題、方法、數字、圖與不確定性。