5.1 隨機樣本與抽樣分布#
本節目標#
- 認識統計量(如樣本平均 \(\bar{X}\) 、樣本變異數 \(S^2\) )本身也是隨機變數
- 理解「抽樣分布」:統計量的分布,而不是資料的分布
- 用模擬親眼看到 \(\bar{X}\) 的分布比 \(X\) 窄(標準差是 \(\sigma/\sqrt{n}\) )
- 記下兩條重要陳述: \(\bar{X} \perp S^2\) 、 \((n-1)S^2/\sigma^2 \sim \chi^2_{n-1}\) (驗證留待 5.4)
問題:手上只有一份樣本,憑什麼下結論?#
第 4 章之前,我們談的都是「母體」的機率分布:已知 \(X \sim N(\mu, \sigma^2)\) ,問 \(P(X > 60)\) 是多少。
統計學的方向相反:手上有資料,想回推母體。工廠抽 30 顆螺絲量直徑,想回答「整批的平均直徑是多少?規格之外的比例是多少?」
做法是計算統計量(statistic)——樣本的函數:
$$ \bar{X} = \frac{X_1 + \cdots + X_n}{n}, \qquad S^2 = \frac{1}{n-1}\sum_{i=1}^{n}(X_i - \bar{X})^2
$$ 關鍵一步(也是初學者最容易忽略的一步):樣本是隨機抽的,再抽一次數字就不同,所以 \(\bar{X}\) 也是隨機變數。它有自己的分布——這個分布就叫抽樣分布(sampling distribution)。
抽樣分布 = 統計量的分布。 我們對 \(\bar{X}\) 問的問題不是「它等於多少」(它每份樣本都不同),而是「它平均來說在哪裡?散開的程度有多大?」
理論:為什麼 \(\bar{X}\) 的分布比 \(X\) 窄#
設 \(X_1, \ldots, X_n\) 獨立、與母體同分布(i.i.d.),平均 \(\mu\) 、變異數 \(\sigma^2\) 。用期望值的線性與獨立性可以算出:
$$ E[\bar{X}] = \mu, \qquad \mathrm{Var}(\bar{X}) = \mathrm{Var}!\left(\frac{1}{n}\sum_i X_i\right) = \frac{1}{n^2}\cdot n\sigma^2 = \frac{\sigma^2}{n}
$$ 所以 \(\bar{X}\) 的標準差(統計學稱標準誤,standard error)是:
$$ \mathrm{SE}(\bar{X}) = \frac{\sigma}{\sqrt{n}}
$$ 直覺:平均是把 \(n\) 個獨立的雜訊互相抵消之後的結果。 \(n\) 越大,抵消越徹底, \(\bar{X}\) 就越緊貼 \(\mu\) 。注意縮小速度是 \(\sqrt{n}\) 而不是 \(n\) ——想把誤差減半,樣本要抽四倍。
母體是常態時還有精確結果:若 \(X \sim N(\mu, \sigma^2)\) ,則
$$ \bar{X} \sim N!\left(\mu, \frac{\sigma^2}{n}\right)
$$ 另外兩條在母體為常態時成立的陳述,本章先記下、5.4 節用程式驗證:
- \(\bar{X}\) 與 \(S^2\) 互相獨立(這是常態母體非常特別的性質,一般分布不成立);
- \(\dfrac{(n-1)S^2}{\sigma^2} \sim \chi^2_{n-1}\) (自由度 \(n-1\) 的卡方分配)。
這兩條正是第 6 章 \(t\) 檢定與信賴區間公式背後的引擎。
動手:把 \(\bar{X}\) 的分布「模擬」出來#
抽樣分布是概念上的東西,但電腦可以讓它現形:重複抽 10,000 組樣本,每組算一個 \(\bar{X}\) ,畫這 10,000 個值的直方圖。
import rstatistics as r
def ascii_hist(x, nb=24, width=60):
lo, hi = min(x), max(x)
step = (hi - lo) / nb
counts = [0] * nb
for v in x:
counts[min(nb - 1, int((v - lo) / step))] += 1
mx = max(counts)
for i, c in enumerate(counts):
if c == 0: continue
m = lo + (i + 0.5) * step
bar = "#" * max(1, round(width * c / mx))
print(f"{m:7.2f} |{bar} {c}")
# ---- 母體:N(50, 12^2),抽 10000 組樣本看 xbar 的分布 ----
g = r.set_seed(101)
mu, sigma = 50.0, 12.0
n = 30
B = 10000
xbars = []
s2s = []
for _ in range(B):
s = g.rnorm(n, mean=mu, sd=sigma)
xbars.append(r.mean(s))
s2s.append(r.var(s))
print(f"母體: mu={mu}, sigma={sigma}, 樣本大小 n={n}, 重複 B={B} 次")
print(f"xbar 的平均 = {r.mean(xbars):.4f} (理論值 mu = {mu})")
print(f"xbar 的 sd = {r.sd(xbars):.4f} (理論值 sigma/sqrt(n) = {sigma/(n**0.5):.4f})")
print(f"單一觀察值 X 的 sd = {r.sd(g.rnorm(5000, mean=mu, sd=sigma)):.4f} (理論值 sigma = {sigma})")
print()
print("xbar 的直方圖:")
ascii_hist(xbars, nb=24)
print()
print("單一樣本 X 的直方圖(同比例尺對照,取前 10000 個):")
ascii_hist(g.rnorm(10000, mean=mu, sd=sigma), nb=24)
輸出(實際執行):
母體: mu=50.0, sigma=12.0, 樣本大小 n=30, 重複 B=10000 次
xbar 的平均 = 50.0529 (理論值 mu = 50.0)
xbar 的 sd = 2.1664 (理論值 sigma/sqrt(n) = 2.1909)
單一觀察值 X 的 sd = 12.0645 (理論值 sigma = 12.0)
xbar 的直方圖:
42.28 |# 3
42.94 |# 3
43.60 |# 13
44.26 |## 44
44.92 |#### 79
45.58 |######## 166
46.24 |############# 262
46.90 |#################### 404
47.56 |############################# 593
48.22 |########################################## 856
48.88 |################################################### 1030
49.54 |############################################################ 1210
50.20 |######################################################### 1157
50.86 |########################################################### 1194
51.52 |############################################### 956
52.18 |#################################### 722
52.84 |############################ 558
53.49 |################## 357
54.15 |########## 202
54.81 |##### 95
55.47 |### 59
56.13 |# 27
56.79 |# 6
57.45 |# 4
單一樣本 X 的直方圖(同比例尺對照,取前 10000 個):
7.13 |# 2
11.11 |# 7
15.09 |# 15
19.08 |## 56
23.06 |#### 99
27.04 |######### 209
31.02 |################## 400
35.00 |########################### 611
38.98 |####################################### 868
42.96 |################################################# 1100
46.94 |######################################################### 1288
50.92 |############################################################ 1346
54.90 |##################################################### 1195
58.88 |########################################### 971
62.86 |################################### 784
66.84 |##################### 475
70.82 |############# 295
74.80 |####### 153
78.78 |#### 81
82.76 |# 25
86.74 |# 12
90.72 |# 4
94.70 |# 3
98.68 |# 1
讀圖:兩張直方圖的中心都在 50( \(\bar{X}\) 是不偏估計),但 \(\bar{X}\) 的分布範圍大約是 42–58,單一觀察值 \(X\) 卻橫跨 7–99。模擬出的 sd 也和理論值 \(\sigma/\sqrt{n} = 12/\sqrt{30} \approx 2.19\) 幾乎一致。
這張直方圖就是「抽樣分布」五個字的具體內容。第 6 章的信賴區間「 \(\bar{x} \pm 1.96\sigma/\sqrt{n}\) 」、第 7 章的檢定,全都是在問同一件事:手上這一個 \(\bar{x}\) ,在這張分布圖裡算不算罕見?
與 R 對照#
R 的思想完全一樣:replicate 重複抽樣,hist 畫抽樣分布。
set.seed(101)
mu <- 50; sigma <- 12; n <- 30; B <- 10000
xbars <- replicate(B, mean(rnorm(n, mu, sigma)))
c(mean = mean(xbars), sd = sd(xbars), se = sigma / sqrt(n))
hist(xbars, breaks = 24, main = "Sampling distribution of xbar", xlab = "xbar")
輸出(實際執行):
mean sd se
50.052915 2.166361 2.190890
(直方圖與上面 Python 版形狀相同;注意模擬數字一模一樣——因為 rstatistics 的 set_seed(101) 與 R 的 set.seed(101) 位元等價,5.5 節會專門談這件事。)
小結#
- 統計量是隨機變數,它的分布叫抽樣分布;統計推論的所有公式都建立在抽樣分布上。
- \(E[\bar{X}] = \mu\) 、 \(\mathrm{Var}(\bar{X}) = \sigma^2/n\) ——平均不偏,散度以 \(\sigma/\sqrt{n}\) 收縮。
- 常態母體下 \(\bar{X} \sim N(\mu, \sigma^2/n)\) ,且 \(\bar{X} \perp S^2\) 、 \((n-1)S^2/\sigma^2 \sim \chi^2_{n-1}\) (5.4 驗證)。
- 模擬(重複抽樣 → 統計量直方圖)是「看到」抽樣分布的標準手法,這招在第 6、7 章還會一直用。
練習#
- 把
n改成 10 與 100,各跑一次模擬: \(\bar{X}\) 直方圖的寬度怎麼變?和 \(\sigma/\sqrt{n}\) 的預測一致嗎? (提示:改n = 10/n = 100,比較r.sd(xbars)。) - 母體改成均勻分布
g.runif(n, 0.0, 10.0), \(\bar{X}\) 的平均與 sd 還符合 \(\mu\) 與 \(\sigma/\sqrt{n}\) 嗎? (提示: \(U(0,10)\) 的 \(\mu=5\) 、 \(\sigma = 10/\sqrt{12}\) 。) - 用模擬估 \(P(\bar{X} > 53)\) ( \(n=30\) ),再與常態近似 \(1 - \Phi\!\left(\frac{53-50}{12/\sqrt{30}}\right)\) 比較。 (提示:統計
sum(1 for x in xbars if x > 53) / B,理論值用1 - r.pnorm(53, 50, 12/30**0.5)。) - 同一份樣本裡 \(\bar{X}\) 與 \(S^2\) 的相關係數是多少?模擬算算看,會發現接近 0——這就是「獨立」陳述的影子。 (提示:
r.cor(xbars, s2s);這只是相關為 0,獨立性的完整驗證要更多功夫。)