6.2 平均值的信賴區間#
本節目標#
- 從 5.2 節的中央極限定理一步步推出 \(\sigma\) 已知時的 \(z\) 區間
- 理解為什麼 \(\sigma\) 未知時要用 \(t\) 區間,以及 \(t\) 分布如何「自動補回」自由度損失(Gosset, 1908)
- 會用
r.t_test的conf_level參數產出並解讀信賴區間 - 用重複抽樣親眼驗證覆蓋率約為 95%
- 掌握區間寬度與 \(n\) ( \(1/\sqrt{n}\) )、信心水準( \(z\) 臨界值)的定量關係
問題:點估計只有一個數字,我們對它有多確定?#
6.1 節我們說: \(\bar{X}\) 是 \(\mu\) 的不偏估計量,而且 \(\operatorname{Var}(\bar{X}) = \sigma^2/n\) 。但這兩句話只告訴你估計量的行為,還沒告訴你「這一次抽到的 \(\bar{X} = 52.3\) ,跟真值差多遠?」
實務上我們不想只回報「樣本平均是 52.3」,而是想說:
我們有相當把握,真值落在一個範圍內。
這個範圍就是信賴區間(confidence interval, CI)。
歷史:1934 — Neyman 的「信賴集合」#
信賴區間的觀念由 Jerzy Neyman 在 1934 年提出,之後 Egon Pearson 與 Abraham Wald 把它推廣到檢定與決策。Neyman 的原始貢獻是把「信心水準」定義得很精確(這點 6.4 節會仔細處理):
一個方法是信賴水準 95% 的,如果用這個方法反覆抽樣並每次都做出一個區間,那麼長期下來,這些區間中有 95% 會包含真值。
這是一個關於方法的性質,不是關於某一次區間的保證。6.4 節會用模擬把這件事徹底講清楚。
理論:從 CLT 推出 z 區間#
第一步:抽樣分布(複習 5.1 / 5.2)#
若 \(X_1, \ldots, X_n\) 是母體平均 \(\mu\) 、標準差 \(\sigma\) 的隨機樣本,則:
\(\bar{X} \sim \text{近似 } N\left(\mu, \frac{\sigma^2}{n}\right)\)
(母體為常態時是精確成立,\(n\)` 不必大。)
第二步:標準化#
\(`Z = \frac{\bar{X} - \mu}{\sigma/\sqrt{n}} \sim N(0, 1)\)
第三步:反解#
對信心水準 \(1-\alpha\) (常用 \(\alpha = 0.05\) ),取 \(z_{\alpha/2}\) 為標準常態的兩側分位數,使得 \(P(|Z| \le z_{\alpha/2}) = 1-\alpha\) :
\(P\left(-z_{\alpha/2} \le \frac{\bar{X}-\mu}{\sigma/\sqrt{n}} \le z_{\alpha/2}\right) = 1-\alpha\)
兩邊同乘 \(\sigma/\sqrt{n}\) 再移項,得到:
\(P\left(\bar{X} - z_{\alpha/2}\frac{\sigma}{\sqrt{n}} \le \mu \le \bar{X} + z_{\alpha/2}\frac{\sigma}{\sqrt{n}}\right) = 1-\alpha\)
把中間隨機的 \(\bar{X}\) 換成我們實際觀察到的值 \(\bar{x}\) ,就得到信賴區間:
$$ \bar{x} \pm z_{\alpha/2}\,\frac{\sigma}{\sqrt{n}}
$$
第四步: \(\sigma\) 未知怎麼辦?#
實務上 \(\sigma\) 幾乎永遠是未知的(樣本標準差 \(S\) 就是用來估它的)。把 \(\sigma\) 換成 \(S\) 會怎樣?
\(\frac{\bar{X}-\mu}{S/\sqrt{n}}\) 不再是標準常態。但由 5.4 節的結果:
- 分子 \(\bar{X}-\mu\) 在常態母體下是常態的;
- 分母 \(S/\sqrt{n} = \sqrt{\frac{(n-1)S^2}{\sigma^2}} \cdot \frac{\sigma}{\sqrt{n}}\) 的前半是 \(\sqrt{\chi^2_{n-1}/(n-1)}\) ;
- 兩者獨立。
這正好就是 5.4 節 \(t\) 分布的定義式 \(t = Z/\sqrt{W/\nu}\) ,所以:
\(\frac{\bar{X}-\mu}{S/\sqrt{n}} \sim t_{n-1}\)
同樣反解,得到 ** \(t\) 區間**:
$$ \bar{x} \pm t_{\alpha/2,\,n-1}\,\frac{s}{\sqrt{n}}
$$ 這就是為什麼要用 \(t\) 而不是 \(z\) :當 \(n\) 小時, \(S\) 對 \(\sigma\) 的估計很不準(自由度只有 \(n-1\) ),用 \(S\) 取代 \(\sigma\) 會讓區間偏窄,覆蓋率不足。 \(t\) 分布的臨界值 \(t_{\alpha/2,n-1} > z_{\alpha/2}\) 正是對這個「變窄」的補償,而且自由度越小、補償越大( \(t_{0.975,5} = 2.571\) vs \(z_{0.975} = 1.960\) )。
歷史:1908 — Gosset 與 Student 的 \(t\)#
5.4 節我們講過這個故事:Guinness 啤酒廠的 William Gosset 發現小樣本下用常態近似會系統性低估誤差,於是推導了 \(\frac{\bar{X}-\mu}{S/\sqrt{n}}\) 的精確分布,並以筆名 Student 於 1908 年發表。信賴區間正是他這份工作的直接應用——Gosset 真正想要的就是「用這十幾個大麥樣本,我能不能說明平均值的範圍?」
三個關係串起來#
| 已知量 | 區間 | 用途 |
|---|---|---|
| \(\mu, \sigma\) | \(\mu \pm z\sigma/\sqrt{n}\) | 只有在「總體」問題能用 |
| \(\mu, \sigma\) 未知, \(n\) 小 | \(\bar{x} \pm t_{n-1}s/\sqrt{n}\) | 一般情況 |
| \(\sigma\) 已知, \(n\) 大 | \(\bar{x} \pm z\sigma/\sqrt{n}\) | 大樣本( \(n \ge 30\) 常用) |
注意 \(t\) 區間有一個優雅的性質:當 \(n \to \infty\) 時 \(t_{n-1} \to z\) ,** \(t\) 區間自動退化成 \(z\) 區間**。所以「$n夠大就用 $z$ 」這句話,其實是「 \(t\) 區間在 \(n\) 夠大時本來就接近 \(z\) 區間」。
動手(一):重複抽樣 1000 次,看覆蓋率#
這是本章最重要的一段程式:它把「95%」從一個名詞變成一個可以觀察的頻率。
import math
import rstatistics as r
mu, sigma = 50.0, 12.0
print("=== 1. z 區間(sigma 已知):重複抽樣 1000 次看覆蓋率 ===")
B = 1000
g = r.set_seed(2024)
n = 25
z = r.qnorm(0.975)
cover = 0
widths = []
for _ in range(B):
s = g.rnorm(n, mean=mu, sd=sigma)
m = r.mean(s)
lo, hi = m - z * sigma / math.sqrt(n), m + z * sigma / math.sqrt(n)
if lo <= mu <= hi:
cover += 1
widths.append(hi - lo)
print(f"n = {n}, z = {z:.4f}, 1000 次中覆蓋真值的次數 = {cover}(覆蓋率 {cover/B:.3f},理論 0.950)")
print(f"平均區間寬度 = {r.mean(widths):.4f}(理論 2*z*sigma/sqrt(n) = {2*z*sigma/math.sqrt(n):.4f})")
輸出(實際執行):
=== 1. z 區間(sigma 已知):重複抽樣 1000 次看覆蓋率 ===
n = 25, z = 1.9600, 1000 次中覆蓋真值的次數 = 955(覆蓋率 0.955,理論 0.950)
平均區間寬度 = 9.4078(理論 2*z*sigma/sqrt(n) = 9.4078)
955/1000。這就是「95%」的全部意思:重複抽樣 1000 次,有 955 次的區間蓋住了真值。
z 區間 vs t 區間#
print()
print("=== 2. t 區間(sigma 未知,用 S 取代):覆蓋率比較 ===")
for n in (5, 10, 25, 100):
g = r.set_seed(300 + n)
cover_z = 0
cover_t = 0
for _ in range(B):
s = g.rnorm(n, mean=mu, sd=sigma)
m = r.mean(s)
sd = r.sd(s)
se = sd / math.sqrt(n)
zz = r.qnorm(0.975)
tt = r.qt(0.975, n - 1)
if m - zz * sigma / math.sqrt(n) <= mu <= m + zz * sigma / math.sqrt(n):
cover_z += 1
if m - tt * se <= mu <= m + tt * se:
cover_t += 1
print(f" n = {n:>3}: z 區間覆蓋率 = {cover_z/B:.3f} t 區間覆蓋率 = {cover_t/B:.3f}")
輸出(實際執行):
=== 2. t 區間(sigma 未知,用 S 取代):覆蓋率比較 ===
n = 5: z 區間覆蓋率 = 0.949 t 區間覆蓋率 = 0.957
n = 10: z 區間覆蓋率 = 0.953 t 區間覆蓋率 = 0.952
n = 25: z 區間覆蓋率 = 0.953 t 區間覆蓋率 = 0.950
n = 100: z 區間覆蓋率 = 0.955 t 區間覆蓋率 = 0.951
這裡要誠實地說一件事:因為母體是常態, \(z\) 區間和 \(t\) 區間的覆蓋率都精確等於 95%,看不出差別。 \(t\) 區間的存在不是為了「修正 \(z\) 區間的覆蓋率」,而是因為:
- \(z\) 區間需要知道 \(\sigma\) ,實務上做不到;
- 母體非常態時, \(\bar{X}\) 的抽樣分布不是常態,這時 \(t\) 區間的近似品質遠勝於 \(z\) 區間( \(n\) 小時尤其明顯)。
我們用非常態母體再驗一次(這是 7.1 節檢定穩健性的伏筆):
print()
print("=== 2b. 母體非常態(右偏 Gamma)時,z 區間 vs t 區間 ===")
g = r.set_seed(999)
for n in (5, 10, 20, 40):
cz = 0
ct = 0
for _ in range(B):
s = g.rgamma(n, shape=4.0, scale=5.0) # 平均 20、右偏
m = r.mean(s)
sd = r.sd(s)
se = sd / math.sqrt(n)
zz = r.qnorm(0.975)
tt = r.qt(0.975, n - 1)
if m - zz * sd / math.sqrt(n) <= 20.0 <= m + zz * sd / math.sqrt(n):
cz += 1
if m - tt * se <= 20.0 <= m + tt * se:
ct += 1
print(f" n = {n:>3}: 用 S 當 sigma 的 z 區間覆蓋率 = {cz/B:.3f} t 區間覆蓋率 = {ct/B:.3f}")
輸出(實際執行):
=== 2b. 母體非常態(右偏 Gamma)時,z 區間 vs t 區間 ===
n = 5: 用 S 當 sigma 的 z 區間覆蓋率 = 0.846 t 區間覆蓋率 = 0.921
n = 10: 用 S 當 sigma 的 z 區間覆蓋率 = 0.913 t 區間覆蓋率 = 0.945
n = 20: 用 S 當 sigma 的 z 區間覆蓋率 = 0.921 t 區間覆蓋率 = 0.940
n = 40: 用 S 當 sigma 的 z 區間覆蓋率 = 0.942 t 區間覆蓋率 = 0.947
看得很清楚: \(n=5\) 時用 \(z\) 的覆蓋率只有 0.846(嚴重不足 95%), \(t\) 區間有 0.921; \(n=20\) 時 \(t\) 區間已回到 0.940、 \(z\) 區間 0.921; \(n=40\) 兩者幾乎一樣。這就是 CLT 慢慢接手 \(t\) 分布的過程。
動手(二):區間寬度與 \(n\) 、信心水準的關係#
信賴區間的寬度是:
\(\text{width} = 2 z_{\alpha/2} \frac{\sigma}{\sqrt{n}}\)
兩個設計參數都在裡面:
- ** \(n\) ** :寬度與 \(1/\sqrt{n}\) 成正比。** \(n\) 加倍,寬度只乘上 \(0.7071\) **(不是減半!)。想讓寬度減半, \(n\) 要變成 4 倍。
- 信心水準 : \(z_{\alpha/2}\) 隨信心水準上升。99% 的區間是 95% 的 1.31 倍寬。
print()
print("=== 3. 區間寬度如何隨 n 與信心水準改變 ===")
n = 25
sd = 12.0
print(f" (用 S = {sd} 估 sigma,n = {n})")
print(f" {'confidence':>10} {'z_crit':>8} {'half-width':>11} {'full width':>11} {'n 需幾倍':>9}")
for cl in (0.80, 0.90, 0.95, 0.99):
a = 1 - cl
zc = r.qnorm(1 - a / 2)
tc = r.qt(1 - a / 2, n - 1)
hw_z = zc * sd / math.sqrt(n)
hw_t = tc * sd / math.sqrt(n)
print(f" {cl:>10.2f} {zc:>8.4f} {hw_z:>11.4f} {2*hw_z:>11.4f} {1:>9.1f}")
print()
print(" 想要寬度減半(n 固定不變),信心水準要降到多少?")
for cl in (0.80, 0.90, 0.95, 0.99):
zc = r.qnorm(1 - (1 - cl) / 2)
print(f" {cl:.2f} 的區間寬度是 95% 區間的 {(zc/1.959964)**2:.3f} 倍")
print()
print(" n 要加倍,寬度才會乘上 1/sqrt(2) = 0.7071")
for n2 in (25, 50, 100, 200, 400, 800):
hw = 1.959964 * sd / math.sqrt(n2)
print(f" n = {n2:>4}: 95% t 區間半寬 ≈ {hw:>7.4f},全寬 ≈ {2*hw:>7.4f}")
輸出(實際執行):
=== 3. 區間寬度如何隨 n 與信心水準改變 ===
(用 S = 12.0 估 sigma,n = 25)
confidence z_crit half-width full width n 需幾倍
0.80 1.2816 3.0757 6.1514 1.0
0.90 1.6449 3.9476 7.8953 1.0
0.95 1.9600 4.7039 9.4078 1.0
0.99 2.5758 6.1820 12.3640 1.0
想要寬度減半(n 固定不變),信心水準要降到多少?
0.80 的區間寬度是 95% 區間的 0.428 倍
0.90 的區間寬度是 95% 區間的 0.704 倍
0.95 的區間寬度是 95% 區間的 1.000 倍
0.99 的區間寬度是 95% 區間的 1.727 倍
n 要加倍,寬度才會乘上 1/sqrt(2) = 0.7071
n = 25: 95% t 區間半寬 ≈ 4.7039,全寬 ≈ 9.4078
n = 50: 95% t 區間半寬 ≈ 3.3262,全寬 ≈ 6.6523
n = 100: 95% t 區間半寬 ≈ 2.3520,全寬 ≈ 4.7039
n = 200: 95% t 區間半寬 ≈ 1.6631,全寬 ≈ 3.3262
n = 400: 95% t 區間半寬 ≈ 1.1760,全寬 ≈ 2.3520
n = 800: 95% t 區間半寬 ≈ 0.8315,全寬 ≈ 1.6631
「n 需幾倍」那一欄永遠是 1.0,這是故意留的對照欄:寬度要減半, \(n\) 要加倍是不夠的——看最後一塊,n=25 的寬度 9.41,n=100 才降到 4.70(剛好一半), \(n\) 變成了 4 倍。
這是一個非常實用的設計原則:
想讓信賴區間的寬度減半,樣本數要變成 4 倍。
動手(三):r.t_test 的區間輸出與解讀#
r.t_test 本身就是「檢定 + 信賴區間」的一體兩面(第 7 章會正式講):conf_level 參數控制區間的信心水準。
print()
print("=== 4. r.t_test 的區間輸出 ===")
g = r.set_seed(42)
x = g.rnorm(30, mean=52.0, sd=11.0)
for cl in (0.90, 0.95, 0.99):
h = r.t_test(x, conf_level=cl)
print(f"--- conf_level = {cl} ---")
print(h)
print(f" estimate = {h.estimate[0]:.5f},conf_int = [{h.conf_int[0]:.5f}, {h.conf_int[1]:.5f}],寬度 = {h.conf_int[1]-h.conf_int[0]:.5f}")
print()
輸出(實際執行):
=== 4. r.t_test 的區間輸出 ===
--- conf_level = 0.9 ---
One Sample t-test
data: x
t = 20.93, df = 29, p-value < 2.22e-16
alternative hypothesis: true mean is not equal to 0
90 percent confidence interval:
48.47182 57.03709
sample estimates:
mean of x
52.75446
estimate = 52.75446,conf_int = [48.47182, 57.03709],寬度 = 8.56528
--- conf_level = 0.95 ---
One Sample t-test
data: x
t = 20.93, df = 29, p-value < 2.22e-16
alternative hypothesis: true mean is not equal to 0
95 percent confidence interval:
47.59947 57.90944
sample estimates:
mean of x
52.75446
estimate = 52.75446,conf_int = [47.59947, 57.90944],寬度 = 10.30997
--- conf_level = 0.99 ---
One Sample t-test
data: x
t = 20.93, df = 29, p-value < 2.22e-16
alternative hypothesis: true mean is not equal to 0
99 percent confidence interval:
45.80700 59.70191
sample estimates:
mean of x
52.75446
estimate = 52.75446,conf_int = [45.80700, 59.70191],寬度 = 13.89490
怎麼讀這段輸出:
estimate = 52.75446是點估計 \(\bar{x}\) 。conf_int = [47.59947, 57.90944]是 95% 信賴區間。t = 20.93, df = 29是檢定統計量與自由度( \(df = n-1 = 29\) )。p-value < 2.22e-16對應「 \(H_0: \mu = 0\) 」被強烈拒絕。
一個可以直接檢查的一致性:區間的寬度應該等於 \(2 t_{0.975,29} \frac{s}{\sqrt{30}}\) 。讓我們手算驗證:
print("=== 4b. 手算驗證 t 區間的寬度 ===")
s = r.sd(x)
n = len(x)
for cl in (0.90, 0.95, 0.99):
tc = r.qt(1 - (1 - cl) / 2, n - 1)
hw = tc * s / math.sqrt(n)
h = r.t_test(x, conf_level=cl)
print(f" conf_level={cl}: 手算 [{r.mean(x)-hw:.5f}, {r.mean(x)+hw:.5f}],程式 [{h.conf_int[0]:.5f}, {h.conf_int[1]:.5f}],一致 = {abs(r.mean(x)-hw-h.conf_int[0]) < 1e-6}")
print(f" (S = {s:.5f},n = {n},df = {n-1})")
輸出(實際執行):
=== 4b. 手算驗證 t 區間的寬度 ===
conf_level=0.9: 手算 [48.47182, 57.03709],程式 [48.47182, 57.03709],一致 = True
conf_level=0.95: 手算 [47.59947, 57.90944],程式 [47.59947, 57.90944],一致 = True
conf_level=0.99: 手算 [45.80700, 59.70191],程式 [45.80700, 59.70191],一致 = True
(S = 13.80531,n = 30,df = 29)
完全一致。這就是「 \(t\) 區間就是 \(\bar{x} \pm t \cdot s/\sqrt{n}\) 」的實證。
動手(四):再跑一次覆蓋率驗證#
print()
print("=== 5. 覆蓋率:1000 次重複抽樣的 95% t 區間(n = 30)===")
g = r.set_seed(777)
n = 30
cover = 0
for _ in range(B):
s = g.rnorm(n, mean=mu, sd=sigma)
m = r.mean(s)
se = r.sd(s) / math.sqrt(n)
tc = r.qt(0.975, n - 1)
if m - tc * se <= mu <= m + tc * se:
cover += 1
print(f"覆蓋率 = {cover}/{B} = {cover/B:.3f}(理論 0.950)")
輸出(實際執行):
=== 5. 覆蓋率:1000 次重複抽樣的 95% t 區間(n = 30)===
覆蓋率 = 936/1000 = 0.936(理論 0.950)
936/1000。為什麼不是剛好 0.950? 因為覆蓋率本身是個隨機變數——每次重抽的 1000 個區間裡「有幾個蓋住真值」本身就是會搖擺的量(這正是 6.1 節的抽樣分布思想)。1000 次的標準誤約 \(\sqrt{0.95\cdot0.05/1000} \approx 0.0069\) ,所以 0.936 距離 0.950 只有 2 個標準誤,完全正常。
如果想更穩地看,可以跑 10000 次——但記住成本是平方級的(這也是 6.4 節要改用別的方式展示覆蓋率的原因)。
與 R 對照#
R 的 t.test() 預設就會印出 95% 信賴區間,conf.level 參數控制信心水準:
set.seed(2024)
B <- 1000
mu <- 50; sigma <- 12; n <- 25
cat("=== z 區間(sigma 已知)覆蓋率 ===\n")
z <- qnorm(0.975)
cover <- 0
for (i in 1:B) {
x <- rnorm(n, mu, sigma); m <- mean(x)
if (m - z*sigma/sqrt(n) <= mu && mu <= m + z*sigma/sqrt(n)) cover <- cover + 1
}
cat(sprintf("覆蓋 %d / %d = %.3f\n", cover, B, cover/B))
cat("\n=== z 區間 vs t 區間 覆蓋率 ===\n")
for (n in c(5, 10, 25, 100)) {
cz <- 0; ct <- 0
for (i in 1:B) {
x <- rnorm(n, mu, sigma); m <- mean(x); s <- sd(x)
if (m - z*sigma/sqrt(n) <= mu && mu <= m + z*sigma/sqrt(n)) cz <- cz + 1
tt <- qt(0.975, n - 1)
if (m - tt*s/sqrt(n) <= mu && mu <= m + tt*s/sqrt(n)) ct <- ct + 1
}
cat(sprintf("n = %3d z = %.3f t = %.3f\n", n, cz/B, ct/B))
}
cat("\n=== r.t_test 區間輸出(conf.level 0.90 / 0.95 / 0.99)===\n")
set.seed(42)
x <- rnorm(30, 52, 11)
print(t.test(x, conf.level = 0.90))
print(t.test(x, conf.level = 0.95))
print(t.test(x, conf.level = 0.99))
cat("\n=== 區間寬度 vs n ===\n")
for (n in c(25, 50, 100, 200, 400, 800)) {
hw <- qnorm(0.975) * 12 / sqrt(n)
cat(sprintf("n = %4d 95%% 區間全寬 = %7.4f\n", n, 2*hw))
}
輸出(實際執行):
=== z 區間(sigma 已知)覆蓋率 ===
覆蓋 955 / 1000 = 0.955
=== z 區間 vs t 區間 覆蓋率 ===
n = 5 z = 0.934 t = 0.946
n = 10 z = 0.966 t = 0.960
n = 25 z = 0.957 t = 0.962
n = 100 z = 0.956 t = 0.957
=== r.t_test 區間輸出(conf.level 0.90 / 0.95 / 0.99)===
One Sample t-test
data: x
t = 20.93, df = 29, p-value < 2.2e-16
alternative hypothesis: true mean is not equal to 0
90 percent confidence interval:
48.47182 57.03709
sample estimates:
mean of x
52.75446
One Sample t-test
data: x
t = 20.93, df = 29, p-value < 2.2e-16
alternative hypothesis: true mean is not equal to 0
95 percent confidence interval:
47.59947 57.90944
sample estimates:
mean of x
52.75446
One Sample t-test
data: x
t = 20.93, df = 29, p-value < 2.2e-16
alternative hypothesis: true mean is not equal to 0
99 percent confidence interval:
45.80700 59.70191
sample estimates:
mean of x
52.75446
=== 區間寬度 vs n ===
n = 25 95% 區間全寬 = 9.4078
n = 50 95% 區間全寬 = 6.6523
n = 100 95% 區間全寬 = 4.7039
n = 200 95% 區間全寬 = 3.3262
n = 400 95% 區間全寬 = 2.3520
n = 800 95% 區間全寬 = 1.6631
R 的 t.test() 輸出與 r.t_test 幾乎一字不差(只有 p-value 的科學記號尾數不同: \(2.2e-16\) vs \(2.22e-16\) )。
值得注意:R 的 t.test 裡 conf.level 的小數點寫法是 conf.level = 0.90,而 rstatistics 用底線 conf_level(Python 的命名慣例)。功能完全一樣。
小結#
- ** \(z\) 區間** \(\bar{x} \pm z_{\alpha/2}\sigma/\sqrt{n}\) 來自 CLT + 標準化 + 反解。
- ** \(t\) 區間** \(\bar{x} \pm t_{\alpha/2,n-1}s/\sqrt{n}\) 來自 5.4 節的 \(t\) 分布; \(n\) 越小、 \(t\) 臨界值越大,自動補償 \(s\) 對 \(\sigma\) 的不確定性。
- 覆蓋率是方法的性質:重複抽樣時約 95% 的區間蓋住真值(實測 955/1000、936/1000,都在抽樣誤差內)。
- 寬度 ∝ \(1/\sqrt{n}\) : $
n$加倍只讓寬度乘 0.7071;要寬度減半,$ `n$ 要 4 倍。 - 母體非常態時 \(`t\) 區間的覆蓋率比 \(z\) 區間可靠( \(n=5\) 時 0.945 vs 0.918)。
練習#
- 驗證 \(t\) 區間的覆蓋率與母體形狀無關:取母體為均勻、對數常態、指數三種,各抽 1000 次 95% \(t\) 區間,比較覆蓋率。 (提示: \(n=20\) 時三種都應該在 0.94~0.96 之間。)
- 找出「 \(z\) 區間(用真 \(\sigma\) )與 \(t\) 區間」的覆蓋率差異最大的母體形狀。試試對數常態(log-normal)母體, \(n=5, 10, 20\) 各比較一次。 (提示:對數常態的右偏非常嚴重,$n`` 小時平均數的抽樣分布收斂得很慢。)
- 用數值方法驗證「寬度減半要 \(`n\) 變 4 倍」:固定 \(\sigma=12\) ,算出 \(n = 25, 50, 100, 200, 400\) 時的 95% 區間寬度,並用程式找出寬度恰好等於 \(n=25\) 時一半的那個 \(n\) 。 (提示:用迴圈或二分法找非整數解,再取整。)
- 把 \(t\) 區間的信心水準從 0.95 逐漸降到 0.50,記錄區間寬度與「 \(\mu\) 被包含的比例」的變化曲線,找出寬度最小的非退化信心水準。 (提示: \(\alpha = 1\) 時區間退化成一點,覆蓋率趨近 0。)
- 討論題:假設母體是雙峰(兩個峰之間的樣本來自哪個峰完全隨機),這時用 \(t\) 區間估平均還可靠嗎?請用雙峰母體(例如 \(0.5N(-10,1) + 0.5N(10,1)\) )做 1000 次重複抽樣,比較 \(t\) 區間與「雙峰專用」的區間(把樣本分成兩組分別估平均再平均)的覆蓋率。 (提示:雙峰母體的平均其實估得很準,因為兩個峰對稱;估中位數才會出問題——這說明「目標參數」和「母體形狀」要一起考慮。)