Learning Objectives
- 說出標準誤(SE)與標準差的差別,並用 s/√n 算出平均數的標準誤
- 用 t 分布算出平均數的 95% 信賴區間,並正確說明「95%」指的是什麼
- 說出信心水準與樣本數如何影響區間的寬度
- 用 bootstrap 重抽樣算出平均數或中位數的信賴區間,並畫出各組平均的信賴區間圖
樣本平均有多可靠?
第 16 課看過:從同一個母體抽很多次樣本,每次算出的平均都不一樣,這些平均形成抽樣分布。 實際做分析時,你通常只有一個樣本,例如這 200 位學生的每週讀書時數平均是 9.93 小時。 問題是:如果換一批學生,平均可能差多少?
信賴區間用一個範圍來回答這個問題:與其只報「9.93 小時」,不如報「9.93 小時,95% 信賴區間 9.29~10.58 小時」。 區間越窄,估計越精確;區間很寬,就表示這筆資料還不足以把平均估準。
這一課的資料是 students.csv,是程式產生的模擬資料,不是任何學校的真實資料。
標準誤與 t 分布
標準差(s)描述的是「每個人之間差多少」;標準誤(standard error,SE)描述的是「樣本平均會差多少」:
SE = s ÷ √n
人數越多,平均越穩定,所以 SE 隨 √n 變小。人數變成 4 倍,SE 才減半。
平均數的信賴區間是「平均 ± 臨界值 × SE」。母體的標準差不知道、只能用樣本的 s 代替時,臨界值要用 t 分布(自由度 n − 1):
| 信心水準 | 臨界值(n 很大時) | 用 SciPy 算 |
|---|---|---|
| 90% | 約 1.645 | stats.t.ppf(0.95, df=n-1) |
| 95% | 約 1.96 | stats.t.ppf(0.975, df=n-1) |
| 99% | 約 2.576 | stats.t.ppf(0.995, df=n-1) |
ppf 是累積機率的反函數:t.ppf(0.975, df) 是「左邊面積 97.5%」的那個點,兩邊各留 2.5%,中間就是 95%。
n 小的時候 t 分布的尾巴比較厚,臨界值比 1.96 大,區間也比較寬。
逐步看:用公式算出 95% 信賴區間
每一步只算一個量:平均、標準差、標準誤、臨界值,最後組成區間。注意右邊記憶體區的數字怎麼一路變過來。
「95%」到底是什麼的 95%
這是信賴區間最常被說錯的地方。母體的真實平均是一個固定的數(只是你不知道),它不會跑來跑去; 會變的是區間:每抽一次樣本,就算出一個不同的區間。
正確:用這個方法重複抽樣、每次都算一個 95% 信賴區間,長期下來約 95% 的區間會涵蓋真值。
錯誤:「真值有 95% 的機率落在 9.29~10.58 之間。」算出來之後,這個區間要嘛涵蓋了真值、要嘛沒有。
所以 95% 是方法的成功率,不是某一個區間的成功率。下面的小工具把「重複抽樣」做給你看: 每一條橫線是一個樣本算出的區間,綠色直線是真值,沒有涵蓋到的區間畫成紅色。
這個「約 95%」有前提:樣本是隨機抽的,而且平均數的抽樣分布接近常態。母體很偏、樣本又小時,t 區間的實際涵蓋率可能低於名目的 95%,小工具的最後一個任務會讓你看到。
bootstrap:用電腦重抽樣
公式法需要知道統計量的標準誤公式。平均數有現成公式,中位數、兩個中位數的差、相關係數就麻煩得多。 bootstrap(Efron, 1979)的想法是:把手上的樣本當成母體的縮影,用電腦從樣本裡抽後放回,抽出和原樣本一樣多的人, 重複幾千次,每次都算一次統計量,看這些統計量散布多廣。
- 從 n 筆資料中抽後放回抽 n 筆(同一筆可能被抽到好幾次,有些一次都沒抽到)。
- 算這個重抽樣本的統計量(平均、中位數…)。
- 重複 2000 次,取這 2000 個值的第 2.5 與第 97.5 百分位數,當成 95% 區間(百分位數法)。
bootstrap 不是萬靈丹:它仍然假設樣本能代表母體,樣本很小時區間也不可靠。
逐步看:2000 次重抽的平均與中位數
2000 次重抽不用迴圈:一次產生 2000×200 個隨機位置,用陣列一次取值。注意 boot 的形狀。
各組平均的信賴區間
比較各組時,只畫平均的長條圖,看不出哪些差別可能只是抽樣的變動。在每個平均旁畫出信賴區間(誤差線,error bar)會誠實得多:
人數少的組,區間比較寬。pandas 的 sem() 直接算出標準誤(同樣除以 n − 1)。
讀這種圖要小心:兩組的區間沒有重疊,差別通常是顯著的;但有重疊不代表差別不顯著,要比較兩組,請用第 19 課的檢定。 圖上也要寫清楚誤差線是什麼(信賴區間、標準誤還是標準差),三者的長度差很多。
逐步看:各系讀書時數的信賴區間圖
實作:睡眠時數平均的 95% 信賴區間
讀入 students.csv,用 t 分布算出每晚睡眠時數(sleep_hours)平均的 95% 信賴區間。
平均、下限、上限都四捨五入到小數 2 位,印成兩行:
平均: ...
95% CI: 下限 上限
小測驗:信賴區間
算出某個平均的 95% 信賴區間是 6.36~6.59。下面哪一個說法正確?
其他條件不變,樣本人數從 50 人增加到 200 人(4 倍),平均數信賴區間的寬度大約會?
同一份資料,99% 信賴區間和 95% 信賴區間比起來?
bootstrap 每一次重抽是怎麼抽的?
下面程式會印出什麼?
import numpy as np
x = np.array([4, 6, 8, 10, 12])
se = x.std(ddof=1) / np.sqrt(len(x))
print(round(se, 3))
重點整理
- 標準誤 SE=s ÷ √n,描述樣本平均的不確定程度;人數變 4 倍,SE 才減半。
- 平均數的信賴區間=平均 ± t 臨界值 × SE;
stats.t.ppf(0.975, df=n-1)或stats.t.interval(0.95, df, loc, scale)。 - 95% 的意思:重複抽樣時約 95% 的區間會涵蓋真值;不是「真值有 95% 的機率在這個區間裡」。
- 信心水準越高、區間越寬;樣本越多、區間越窄。母體很偏且樣本小時,實際涵蓋率可能低於名目值。
- bootstrap:從樣本抽後放回、重複幾千次,取百分位數;可以用在中位數這類沒有簡單公式的統計量。
- 比較各組時畫出誤差線,並寫清楚它代表什麼。
- 下一課:兩組的平均差,是真的不同,還是抽樣的變動?用假設檢定回答。
延伸閱讀:Efron, B. (1979). Bootstrap methods: Another look at the jackknife. The Annals of Statistics, 7(1), 1–26。