7.2 單樣本 t 檢定#
本節目標#
- 會做單樣本 t 檢定,並逐行讀懂
r.t_test的 print 輸出 - 分辨雙尾與單尾檢定何時該用哪一個,理解單尾的代價
- 完整走一遍實例:飲料填充機的重量是否達到標示值
問題:填充機有沒有「短給」?#
飲料瓶身標示淨重 500 公克。品管規定:平均填充量不得低於標示。我們從生產線隨機抽了 16 瓶秤重,想知道填充機的平均填充量是否達標。
資料(公克):
499.8 493.1 498.2 497.2 494.8 487.0 494.5 493.3 498.1
495.6 495.9 494.5 496.7 496.7 486.9 503.3
樣本平均 495.35,比 500 低了 4.65 公克。但每瓶的抽樣誤差就有 4 公克左右——這 4.65 公克的落差是機器真的短給,還是抽樣運氣?這正是第 7.1 節檢定邏輯要上場的地方。
理論:t 統計量的誕生#
母體標準差 \(\sigma\) 未知是關鍵障礙。若 \(\sigma\) 已知,\(Z = (\bar{X}-\mu_0)/(\sigma/\sqrt{n})\) 在 \(H_0\) 下就是標準常態。但實務上 \(\sigma\) 總是未知的,我們只能用樣本標準差 \(s\) 頂替:
$$ T = \frac{\bar{X} - \mu_0}{s / \sqrt{n}} \;\sim\; t_{n-1} \quad (\text{當 } H_0 \text{ 為真})
$$ 1908 年,William Gosset 以筆名 "Student" 在《The Probable Error of a Mean》發表了這個分布——他在 Guinness 啤酒廠工作,公司禁止員工發表論文(怕洩露釀造機密),所以只能化名。小樣本 + 未知變異數正是啤酒廠品管每天的處境,\(t\) 分配就是為此而生。\(t_{n-1}\) 比標準常態尾巴更厚(因為 \(s\) 本身也在晃動),樣本越小尾巴越厚;自由度 \(df = n-1\) 來自 \(s^2 = \frac{1}{n-1}\sum (X_i - \bar{X})^2\) 中 \(\bar{X}\) 吃掉了一個自由度。
三個假設,缺一不可:
- 觀測值獨立(同一批填充的瓶子之間不能互相影響);
- 母體近常態(\(n\) 小時重要;\(n\) 大時中央極限定理會救場);
- 資料是連續的量測值,不是比例或次數(那些用第 7.4 節的方法)。
動手:用 r.t_test 檢定填充量#
雙尾檢定#
先看最通用的版本:\(H_0: \mu = 500\) 對 \(H_1: \mu \ne 500\)(不管偏高或偏低都算問題)。
import rstatistics as r
x = [499.8, 493.1, 498.2, 497.2, 494.8, 487.0, 494.5, 493.3, 498.1,
495.6, 495.9, 494.5, 496.7, 496.7, 486.9, 503.3]
t = r.t_test(x, mu=500)
print(t)
One Sample t-test
data: x
t = -4.4826, df = 15, p-value = 0.0004382
alternative hypothesis: true mean is not equal to 500
95 percent confidence interval:
493.139 497.561
sample estimates:
mean of x
495.35
輸出逐行解讀#
One Sample t-test:檢定名稱。單一樣本、對一個固定值 \(\mu_0 = 500\)。data: x:分析的資料。t = -4.4826:檢定統計量 \(T = (\bar{x} - 500)/(s/\sqrt{16})\)。手算驗證:\(\bar{x} = 495.35\)、\(s = 4.1494\)、標準誤 \(s/\sqrt{16} = 1.0373\),故 \(T = -4.65/1.0373 = -4.4826\)。負號表示樣本平均低於 500。df = 15:自由度 \(n-1 = 16-1\),\(T\) 在 \(H_0\) 下服從 \(t_{15}\)。p-value = 0.0004382:在 \(H_0: \mu = 500\) 為真時,出現 \(|T| \ge 4.4826\) 的機率。手算:\(2 \cdot P(t_{15} \le -4.4826) = 0.00044\)。遠小於 0.05,證據非常強:填充機的平均填充量確實不是 500 公克。95 percent confidence interval: 493.139 497.561:母體平均 \(\mu\) 的 95% 信賴區間。注意 500 不在區間內——與 p 值 < 0.05 是同一件事的兩種說法(對偶性,第 7.5 節專講)。區間整體在 500 左側,方向一致:機器偏少。sample estimates: mean of x 495.35:點估計。
一句話總結:有非常強的證據顯示平均填充量低於標示 500 公克,估計約 495.4 公克(95% CI:493.1–497.6)。
單尾檢定:品管問題其實是右尾#
品管關心的只有「是否短給」,即 \(H_1: \mu < 500\)。方向明確時可用單尾檢定:
t1 = r.t_test(x, mu=500, alternative='less')
print(t1)
One Sample t-test
data: x
t = -4.4826, df = 15, p-value = 0.0002191
alternative hypothesis: true mean is less than 500
95 percent confidence interval:
-Inf 497.1685
sample estimates:
mean of x
495.35
與雙尾的差異:
- p 值恰為雙尾的一半(0.0002191 = 0.0004382 / 2):因為 \(T\) 的極端機率全數集中在左尾,不再分一半給右尾。手算:\(P(t_{15} \le -4.4826) = 0.000219\)。
- 信賴區間變成單邊
(-Inf, 497.1685]:95% 信心說 \(\mu\) 低於 497.17 公克。上半界 497.17 比雙尾的上半界 497.56 更緊——單尾把全部 \(\alpha\) 預算押在一邊,那一側的界就換得更窄。 - 臨界值從 \(\pm t_{0.975,15} = \pm 2.131\) 變成單一 \(-t_{0.95,15} = -1.753\):拒絕域更大,但只朝左。
單尾的代價:使用前必須先聲明方向。若機器其實是「超給」(浪費原料),單尾左檢定的 p 值會趨近 1,永遠不會警報。實務建議:除非方向有事先的科學或契約依據,否則報雙尾。
亂數重現這批資料#
本節資料可用亂數重現,方便練習改參數:
import rstatistics as r
g = r.set_seed(2026)
x = [round(v, 1) for v in g.rnorm(16, mean=497.6, sd=4.2)]
print([round(r.mean(x), 2), round(r.sd(x), 2)])
[495.35, 4.15]
與上面手算的 \(\bar{x}=495.35\)、\(s=4.15\) 一致,整套分析可以完全重現。
與 R 對照#
R 的 t.test 是這個檢定的原廠實作(R 內建即 S 語言傳統):
x <- c(499.8, 493.1, 498.2, 497.2, 494.8, 487.0, 494.5, 493.3, 498.1,
495.6, 495.9, 494.5, 496.7, 496.7, 486.9, 503.3)
t.test(x, mu = 500)
t.test(x, mu = 500, alternative = "less")
One Sample t-test
data: x
t = -4.4826, df = 15, p-value = 0.0004382
alternative hypothesis: true mean is not equal to 500
95 percent confidence interval:
493.139 497.561
sample estimates:
mean of x
495.35
One Sample t-test
data: x
t = -4.4826, df = 15, p-value = 0.0002191
alternative hypothesis: true mean is less than 500
95 percent confidence interval:
-Inf 497.1685
sample estimates:
mean of x
495.35
與 rstatistics 的輸出一字不差:參數名也對應(mu、alternative、R 的 "less" 對 Python 的 'less')。r.t_test 回傳的 HTest 物件提供 p_value、statistic、parameter、conf_int、estimate 屬性,方便在程式裡取值(R 則用 $p.value、$statistic、$conf.int)。
小結#
- 單樣本 t 檢定檢驗 \(H_0: \mu = \mu_0\),統計量 \(T = (\bar{X}-\mu_0)/(s/\sqrt{n}) \sim t_{n-1}\);\(t\) 分配由 Gosset(Student, 1908)為啤酒廠小樣本品管而生。
- 輸出五要素:t 值(效應除以標準誤)、df(\(n-1\))、p 值(\(H_0\) 下的極端機率)、CI(不含 \(\mu_0\) ⇔ 顯著)、mean of x(點估計)。
- 單尾 p 值是雙尾的一半(方向猜對時),且把 \(\alpha\) 預算集中到一側;先聲明方向才能用。
- 品管實例結論:p = 0.00044,平均填充量 495.4 公克,顯著低於標示 500——不是抽樣運氣。
練習#
- 用
r.t_test(x, mu=500, alternative='greater')做「超給」單尾檢定。p 值是多少?為什麼接近 1?提示:\(T\) 是負的,右尾機率自然很大。 - 把上面的 16 筆資料每筆加 3 公克(模擬重新校正機器後),重跑雙尾檢定。p 值變多少?結論反轉了嗎?提示:\(\bar{x}\) 會變成 498.35,先猜猜 \(T\) 會落在哪。
- 只保留前 5 筆資料,重跑檢定。t 值與 df 各是多少?p 值還顯著嗎?體會小樣本下檢定力下滑。提示:df = 4,\(t_{4}\) 尾巴很厚。
- 用模擬估計:\(n=16\)、真實 \(\mu = 497\)、\(\sigma = 4.2\) 時,「\(H_0: \mu = 500\) 左尾檢定」的檢定力。提示:重複
g.rnorm(16, mean=497, sd=4.2)幾千次,算p_value < 0.05的比例。 - 信賴區間
[493.139, 497.561]的長度是 4.42。若希望長度減半,\(n\) 大約要幾?提示:區間長度約 \(2 t_{0.975,df} \cdot s/\sqrt{n}\),與 \(\sqrt{n}\) 成反比。