跳轉到

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 的命名慣例)。功能完全一樣。


小結#

  1. ** \(z\) 區間** \(\bar{x} \pm z_{\alpha/2}\sigma/\sqrt{n}\) 來自 CLT + 標準化 + 反解。
  2. ** \(t\) 區間** \(\bar{x} \pm t_{\alpha/2,n-1}s/\sqrt{n}\) 來自 5.4 節的 \(t\) 分布; \(n\) 越小、 \(t\) 臨界值越大,自動補償 \(s\) 對 \(\sigma\) 的不確定性。
  3. 覆蓋率是方法的性質:重複抽樣時約 95% 的區間蓋住真值(實測 955/1000、936/1000,都在抽樣誤差內)。
  4. 寬度 ∝ \(1/\sqrt{n}\) : $n$ 加倍只讓寬度乘 0.7071;要寬度減半,$ `n$ 要 4 倍。
  5. 母體非常態時 \(`t\) 區間的覆蓋率比 \(z\) 區間可靠( \(n=5\) 時 0.945 vs 0.918)。

練習#

  1. 驗證 \(t\) 區間的覆蓋率與母體形狀無關:取母體為均勻、對數常態、指數三種,各抽 1000 次 95% \(t\) 區間,比較覆蓋率。 (提示: \(n=20\) 時三種都應該在 0.94~0.96 之間。)
  2. 找出「 \(z\) 區間(用真 \(\sigma\) )與 \(t\) 區間」的覆蓋率差異最大的母體形狀。試試對數常態(log-normal)母體, \(n=5, 10, 20\) 各比較一次。 (提示:對數常態的右偏非常嚴重,$n`` 小時平均數的抽樣分布收斂得很慢。)
  3. 用數值方法驗證「寬度減半要 \(`n\) 變 4 倍」:固定 \(\sigma=12\) ,算出 \(n = 25, 50, 100, 200, 400\) 時的 95% 區間寬度,並用程式找出寬度恰好等於 \(n=25\) 時一半的那個 \(n\) 。 (提示:用迴圈或二分法找非整數解,再取整。)
  4. 把 \(t\) 區間的信心水準從 0.95 逐漸降到 0.50,記錄區間寬度與「 \(\mu\) 被包含的比例」的變化曲線,找出寬度最小的非退化信心水準。 (提示: \(\alpha = 1\) 時區間退化成一點,覆蓋率趨近 0。)
  5. 討論題:假設母體是雙峰(兩個峰之間的樣本來自哪個峰完全隨機),這時用 \(t\) 區間估平均還可靠嗎?請用雙峰母體(例如 \(0.5N(-10,1) + 0.5N(10,1)\) )做 1000 次重複抽樣,比較 \(t\) 區間與「雙峰專用」的區間(把樣本分成兩組分別估平均再平均)的覆蓋率。 (提示:雙峰母體的平均其實估得很準,因為兩個峰對稱;估中位數才會出問題——這說明「目標參數」和「母體形狀」要一起考慮。)