S²의 표본분포¶
개요¶
정규모집단의 참 분산이 25라고 하자. 거기서 10개를 뽑아 표본분산을 계산하면 얼마가 나올까. 뒤에서 직접 계산해 보겠지만 \(S^2\)이 30을 넘을 확률이 29%나 된다. 참값이 25인데 30 너머로 올라가는 일이 열 번에 세 번꼴로 일어나는 것이다. 분산 추정값은 평균 추정값보다 훨씬 심하게 요동친다.
표본분산 \(S^2\)의 표본분포는 그 요동을 기술한다. 모분산 \(\sigma^2\)을 얼마나 정밀하게 추정할 수 있는지가 여기서 정해지며, 분산에 관한 신뢰구간과 검정이 모두 그 위에 선다.
그런데 이 쪽은 5장의 성격이 한 번 바뀌는 자리이기도 하다. 지금까지 표본평균을 다룰 때는 중심극한정리가 뒤를 받쳐 주었다. 모집단이 어떻게 생겼든 \(n\)만 키우면 \(\bar{X}\)가 정규로 간다는 보장이 있었다. \(S^2\)에는 그런 보장이 없다. 미리 한 줄로 적어 두면 이렇다. 중심극한정리는 1차 적률에만 선물을 주고 2차 적률에는 주지 않는다.
n에서 하나를 빼는 이유¶
\(X_1, X_2, \dots, X_n\)을 평균 \(\mu\), 분산 \(\sigma^2\)인 모집단에서 뽑은 i.i.d. 표본이라 하자. 표본분산은 편차제곱의 합을 \(n\)이 아니라 \(n-1\)로 나눈 값이다.
이렇게 나누면 기댓값이 정확히 모분산과 같아진다.
\(n\)이 아니라 \(n-1\)(자유도)로 나누는 이유가 바로 이 불편성이다. 모르는 \(\mu\) 자리에 자료에서 계산한 \(\bar{X}\)를 넣었는데, \(\bar{X}\)는 그 자료에 가장 가까이 붙어 있는 값이라 편차제곱의 합이 참 평균을 썼을 때보다 작게 나온다. Bessel 수정은 표본으로부터 \(\mu\)를 추정하면서 잃어버린 자유도 하나를 보상해 그만큼을 되돌려 준다.
여기에 모집단의 모양에 관한 가정이 전혀 들어가지 않았다는 점을 기억해 두자. 불편성은 어떤 모집단에서나 성립한다. 문제는 그다음부터다.
정규모집단에서는 카이제곱이 된다¶
\(S^2\)의 기댓값과 달리 \(S^2\)의 분포를 알려면 모집단이 정규라는 가정이 필요하다. 모집단이 정규이면 척도를 맞춘 표본분산이 정확히 카이제곱 분포를 따른다.
달리 적으면 \(S^2\) 자체가 카이제곱을 척도조정한 것이다.
\(S^2\)의 퍼짐이 여기서 바로 따라 나온다. \(\text{Var}(\chi^2_{n-1}) = 2(n-1)\)이므로
이고, 제곱근을 취한 것이 표준오차다.
속도는 같고 보호막이 다르다¶
이 표준오차는 \(n\)이 커질 때 \(O(1/\sqrt{n})\)으로 줄어든다. \(\bar{X}\)의 표준오차 \(\sigma/\sqrt{n}\)과 같은 속도다. 흔히 "분산은 평균보다 추정하기 어렵다"고 말하지만, 적어도 점근적인 수렴 속도 면에서는 둘 사이에 빠르고 느림의 차이가 없다.
결정적인 차이는 속도가 아니라 그 결과를 어떤 조건에서 믿을 수 있는가에 있다.
\(\bar{X}\)는 중심극한정리의 혜택을 본다. \(n\)이 충분히 크기만 하면 모집단 모양과 무관하게 \(\bar{X}\)의 근사적 정규성이 보장된다. 모집단이 균등이든 지수든 값 두 개짜리 베르누이든 따지지 않는다.
\(S^2\)에는 그런 정리가 없다. 방금 얻은 카이제곱 결과는 정규성 아래에서만 성립한다. 정규가 아닌 모집단에서 \(S^2\)의 분산은 모집단 첨도 \(\beta_2\)에 의존하며
가 된다. 이 식을 읽는 방법이 중요하다. \(\beta_2\)는 4차 적률에서 오는 양이다. 곧 2차 적률인 분산을 추정할 때 그 정밀도를 정하는 것은 4차 적률이며, \(S^2\)은 모집단의 꼬리 두께에 직접 노출되어 있다. 1차 적률을 추정하는 \(\bar{X}\)가 모집단의 모양을 묻지 않았던 것과 정반대다.
어긋남의 크기는 배율로 적힌다. 카이제곱이 예측하는 \(2\sigma^4/(n-1)\)과 참값은 배율 \((\beta_2-1)/2\)만큼 차이가 난다. 이 배율은 \(n\)에 의존하지 않는다. \(\bar{X}\)에서는 정리의 수렴이 문제라 표본을 키우면 해결되지만, \(S^2\)에서는 정리의 전제가 문제라 표본을 키워도 해결되지 않는다. 뒤의 모의실험 쪽들에서 균등모집단(\(\beta_2=1.8\))은 배율 0.4, 지수모집단(\(\beta_2=9\))은 배율 4로 나타나는 것을 확인한다.
세 가지 물음¶
지금까지의 이야기를 세 문제로 확인한다. 앞의 두 문제는 정규모집단에서 카이제곱을 써서 답이 깔끔하게 나오는 경우이고, 셋째 문제는 정규성이라는 한 줄을 빼면 같은 물음에 답할 수 없게 된다는 것을 보여 준다.
보기 1. S-squared의 기댓값과 분산. \(N(\mu, 25)\)에서 \(n = 10\)인 표본을 뽑는다. \(E[S^2]\)과 \(\text{Var}(S^2)\)을 구하라.
풀이
\(Y \sim \chi^2_{n-1}\)에 대해 \(EY = n-1\)이고 \(\text{Var}(Y) = 2(n-1)\)이다.
보기 2. S-squared에 관한 확률 (정규모집단). \(N(\mu, 25)\)에서 \(n = 10\)인 표본을 뽑는다. \(P(S^2 > 30)\)을 구하라.
풀이
from scipy import stats
chi2_stat = 9 * 30 / 25
p_value = stats.chi2(df=9).sf(chi2_stat)
print(f"P(S^2 > 30) = {p_value:.4f}")
출력:
P(S^2 > 30) = 0.2897
보기 3. 정규성 가정 없이. 분산이 25인 모집단에서 \(n = 10\)인 표본을 뽑는다(정규성은 가정하지 않는다). \(P(S^2 > 30)\)에 관해 무엇을 말할 수 있는가?
풀이
정규성이 없으면 \(\frac{(n-1)S^2}{\sigma^2}\)은 카이제곱 분포를 따르지 않는다. \(E[S^2] = 25\)임은 알지만, 모집단 모양에 관한 추가 정보 없이는 \(P(S^2 > 30)\)을 구할 수 없다.
\(\text{Var}(S^2)\)을 안다면 Chebyshev 부등식으로 한계를 줄 수 있겠지만, 그 값은 정규가 아닌 모집단의 고차 적률에 의존하며 우리는 그것을 알지 못한다.
모분산의 신뢰구간¶
카이제곱 결과를 추축량으로 삼으면 \(\sigma^2\)의 신뢰구간이 바로 나온다. (정규성 아래에서) \((n-1)S^2/\sigma^2\)이 \(\chi^2_{n-1}\)을 따르므로
이고, 가운데의 \(\sigma^2\)에 대해 풀어 정리하면 다음을 얻는다.
큰 분위수가 아래 끝에, 작은 분위수가 위 끝에 나타나는 것은 \(\sigma^2\)이 분모에 있어 부등호가 뒤집히기 때문이다.
Note
카이제곱 분포가 비대칭이므로 이 신뢰구간은 \(S^2\)을 중심으로 대칭이 아니다.
이 구간이 무엇에 기대고 있는지도 잊지 말아야 한다. 카이제곱이 전제이므로 모집단이 정규가 아니면 명목 95%가 실제로 95%라는 보장이 없다.
모의실험: 모집단을 바꿔 보면¶
같은 실험을 두 모집단에서 되풀이한다. 크기 10짜리 표본을 1만 번 뽑아 그때마다 \(S^2\)을 기록하고 그 분포를 그리는 것이다. 먼저 정규모집단이다.
보기 4. 정규모집단에서 표본분산의 표집분포. \(N(0,1)\)에서 뽑아 만든 모집단 10만 개에서 \(n = 10\)씩 비복원으로 뽑아 \(S^2\)을 계산하는 일을 1만 번 되풀이한다.
(1) \(E[S^2]\), \(\operatorname{sd}(S^2)\), 왜도, 그리고 최빈값·중앙값·평균의 순서를 이론으로 적으시오. 아울러 \(P(S^2 > \sigma^2)\)을 구하시오.
(2) 모의실험으로 (1)을 확인하시오.
풀이
(1) 이론값. 정규모집단이므로 \((n-1)S^2/\sigma^2 \sim \chi^2(9)\)이 정확하다. 따라서 \(S^2 = \frac{\sigma^2}{9}\chi^2(9)\)이고, \(\chi^2(d)\)의 평균 \(d\), 분산 \(2d\), 왜도 \(\sqrt{8/d}\)를 옮겨 쓰면 된다.
왜도가 \(0\)이 아니다. 모집단은 완벽히 대칭인데 \(S^2\)의 표집분포는 오른쪽으로 치우쳐 있다. 일반 공식 \(\operatorname{Var}(S^2) = \left(\beta_2 - \frac{n-3}{n-1}\right)\sigma^4/n\)에 \(\beta_2 = 3\)을 넣어도 \((3 - 7/9)/10 = 2/9\)로 같은 값이 나온다.
치우침의 크기는 세 중심위치의 순서로 읽으면 분명하다. \(\chi^2(9)\)의 최빈값은 \(d - 2 = 7\), 중앙값은 \(8.3428\), 평균은 \(9\)이므로 \(9\)로 나누어
이 된다. 평균이 중앙값보다 \(8\%\) 오른쪽에 있다. 그래서
로 절반이 안 된다. \(S^2\)은 불편추정량이지만 과반의 표본에서 참값보다 작게 나온다는 뜻이다. 불편성이 "절반씩 갈라진다"는 말이 아니라는 것을 보여 주는 숫자다.
비복원으로 뽑으므로 겨냥값은 \(N(0,1)\) 자체가 아니라 실현된 10만 개의 분산이다.
(2) 모의실험.
import matplotlib.pyplot as plt
import numpy as np
from scipy import stats
np.random.seed(1)
population = stats.norm().rvs(100_000)
sample_size = 10
n_samples = 10_000
# 표본평균 대신 표본분산을 기록한다. ddof=1 이 n-1로 나누는 표본분산이다.
# 아래 그림에서 두 가지를 확인하라.
# 중심: 참 분산 1 근처에 놓인다 (S^2 은 불편추정량이다)
# 모양: 대칭이 아니라 **오른쪽으로 치우쳐 있다**.
# 분산은 음수가 될 수 없어 왼쪽이 0에서 막히기 때문이다.
# 표본평균의 표집분포가 대칭인 것과 대비된다.
sample_vars = [
np.var(np.random.choice(population, size=sample_size, replace=False), ddof=1)
for _ in range(n_samples)
]
sample_vars = np.asarray(sample_vars)
# 이론값과 모의값을 나란히 둔다. 비복원이므로 겨냥값은 실현된 10만 개의 적률이다.
df = sample_size - 1
s2_real, b2_real = population.var(), stats.kurtosis(population) + 3
sd_true = np.sqrt((b2_real - (sample_size - 3) / df) * s2_real ** 2 / sample_size)
chi2 = stats.chi2(df)
print(f"실현 모집단 10만 개 분산 = {s2_real:.6f}, 첨도 = {b2_real:.4f}")
print(f"E[S^2] 이론 {s2_real:.6f} 모의 {sample_vars.mean():.6f} (MC오차 {sd_true / np.sqrt(n_samples):.6f})")
print(f"sd(S^2) 이론 {sd_true:.6f} 모의 {sample_vars.std(ddof=1):.6f} (MC오차 {sd_true / np.sqrt(2 * n_samples):.6f})")
print(f"왜도(S^2) 이론 {np.sqrt(8 / df):.6f} 모의 {stats.skew(sample_vars):.6f}")
print(f"최빈값 {(df - 2) / df:.5f} < 중앙값 {chi2.median() / df:.5f} < 평균 {1.0:.5f} "
f"(모의 중앙값 {np.median(sample_vars) / s2_real:.5f})")
print(f"P(S^2 > sigma^2) 이론 {chi2.sf(df):.5f} 모의 {(sample_vars > s2_real).mean():.5f}")
# 위아래 두 패널로 나눈다. 위는 모집단, 아래는 통계량의 표집분포다.
# 둘의 **가로 눈금이 다르다**는 점에 주의하라.
# 표집분포가 훨씬 좁으므로 같은 축에 그리면 한 점처럼 보인다.
fig, (ax0, ax1) = plt.subplots(2, 1, figsize=(12, 6))
ax0.hist(population, bins=100, density=True, alpha=0.5)
ax0.set_title('Population Distribution (Normal)', fontsize=16)
ax1.hist(sample_vars, bins=100, density=True, alpha=0.5)
ax1.set_title(rf'Sampling Distribution of $S^2$ (n = {sample_size})', fontsize=16)
for ax in (ax0, ax1):
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
plt.tight_layout()
plt.show()
출력:
실현 모집단 10만 개 분산 = 0.996661, 첨도 = 3.0205
E[S^2] 이론 0.996661 모의 0.999114 (MC오차 0.004720)
sd(S^2) 이론 0.471989 모의 0.473219 (MC오차 0.003337)
왜도(S^2) 이론 0.942809 모의 0.966648
최빈값 0.77778 < 중앙값 0.92698 < 평균 1.00000 (모의 중앙값 0.92563)
P(S^2 > sigma^2) 이론 0.43727 모의 0.43880

다섯 줄이 모두 맞는다. \(E[S^2] = 0.999114\)가 겨냥값 \(0.996661\)에서 몬테카를로 오차 \(0.004720\)의 \(0.52\)배, \(\operatorname{sd}(S^2) = 0.473219\)가 \(0.471989\)에서 오차 \(0.003337\)의 \(0.37\)배 떨어져 있다. 실현된 10만 개의 첨도가 \(3.0205\)로 \(3\)에 가까워 명목 이론값 \(\sqrt{2/9} = 0.471405\)와도 사실상 같다. 꼬리가 가벼운 모집단에서는 10만 개가 모집단을 거의 그대로 대표한다.
왜도가 요점이다. 모의 왜도 \(0.966648\)이 이론 \(0.942809\)와 \(2.5\%\) 차이인데, 왜도 추정값 자체의 몬테카를로 요동이 \(\chi^2(9)/9\)에서 \(B = 10{,}000\)일 때 \(0.038\)이므로 \(0.6\)배다. 맞는다. 위 패널의 모집단은 좌우대칭인데 아래 패널은 \(0.94\)만큼 오른쪽으로 끌려 있다. 대칭인 모집단에서 비대칭인 표집분포가 나온 것이고, 까닭은 \(S^2 \ge 0\)이라 왼쪽이 \(0\)에서 막히는 반면 오른쪽은 열려 있기 때문이다.
그 치우침을 수로 읽으면 더 선명하다. 모의 중앙값이 \(\sigma^2\)의 \(0.92563\)배로 이론 \(0.92698\)과 맞는다. 그리고 \(S^2\)이 참값을 넘는 비율이 \(0.43880\)으로 이론 \(0.43727\)과 맞는데(비율의 오차 \(0.00496\)의 \(0.3\)배), 열 번 가운데 대여섯 번(\(0.5627\))은 분산을 작게 추정한다는 뜻이다. 불편성은 평균에 관한 성질이지 "반반"에 관한 성질이 아니다.
위 패널의 모집단은 좌우대칭인데 아래 패널의 \(S^2\) 분포는 오른쪽으로 꼬리를 끈다. 분산이 음수가 될 수 없어 왼쪽이 0에서 막히는 반면 오른쪽은 열려 있기 때문이며, 표본평균의 표집분포가 대칭이었던 것과 대비된다. 중심은 참값 1 근처에 놓여 불편성을 확인해 준다.
다음은 치우친 모집단이다. 대출 신청자의 소득 자료로, 오른쪽으로 길게 늘어진 전형적인 소득 분포다.
보기 5. 치우친 모집단에서 표본분산의 표집분포. 대출 신청자 5만 명의 소득 자료를 모집단으로 삼아 \(n = 10\)씩 비복원으로 뽑아 \(S^2\)을 계산하는 일을 1만 번 되풀이한다.
(1) 모집단의 첨도를 재고, 거기서 \(\operatorname{sd}(S^2)\)과 카이제곱 예측과의 분산 배율을 이론으로 구하시오.
(2) 모의실험으로 확인하고, 치우친 모집단에서 무엇이 달라지고 무엇이 그대로인지 가리시오.
풀이
(1) 이론값. 모집단이 자료로 주어져 있으므로 적률을 직접 재면 된다. 5만 명의 소득은 평균 \(68{,}761\), 표준편차 \(32{,}872\), 왜도 \(1.0488\), 첨도 \(\beta_2 = 4.0808\)이다. \(\sigma^2 = 1.0805 \times 10^9\)을 공식에 넣으면
이다. 카이제곱 모형이 예측하는 값은 \(\sqrt{2/9}\,\sigma^2 = 5.0938 \times 10^8\)이므로 분산 배율은
이고 극한값은 \((\beta_2-1)/2 = 1.5404\)다. 폭으로는 \(\sqrt{1.4863} = 1.22\)배, 곧 \(22\%\) 넓다. 정규모집단의 \(1.00\)에서 벗어났으되 지수모집단의 \(3.97\)만큼은 아니다. 까닭은 소득 자료가 오른쪽으로 치우쳐 있어도 \(199{,}000\)에서 끊겨 있어 첨도가 \(4.08\)에 머물기 때문이다. 치우침이 곧 큰 첨도는 아니다.
모양은 어떨까. \(n = 10\)에서 카이제곱이라면 왜도가 \(\sqrt{8/9} = 0.9428\)이어야 한다. 여기서는 모집단이 치우쳤으니 더 커질 법하지만 얼마나 커질지는 6차 적률이 정하는 일이라 간단한 닫힌 꼴이 없다. 모의실험으로 재어 본다.
(2) 모의실험.
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from scipy import stats
np.random.seed(1)
url = 'https://raw.githubusercontent.com/gedeck/practical-statistics-for-data-scientists/8a6d3bb6468e979c861d4b37215e1413702dfdfa/data/loans_income.csv'
df = pd.read_csv(url)
population = df['x'].values
sample_size = 10
n_samples = 10_000
sample_vars = [
np.var(np.random.choice(population, size=sample_size, replace=False), ddof=1)
for _ in range(n_samples)
]
sample_vars = np.asarray(sample_vars)
# 모집단의 적률과 거기서 나오는 S^2 의 이론값을 적는다.
dof = sample_size - 1
s2_pop = population.var()
b2_pop = stats.kurtosis(population) + 3
sd_true = np.sqrt((b2_pop - (sample_size - 3) / dof) * s2_pop ** 2 / sample_size)
sd_chi2 = np.sqrt(2 / dof) * s2_pop
print(f"소득 모집단 {len(population)} 명: 평균 {population.mean():.0f}, 표준편차 {population.std():.0f}, "
f"왜도 {stats.skew(population):.4f}, 첨도 {b2_pop:.4f}")
print(f"E[S^2] 이론 {s2_pop:.4e} 모의 {sample_vars.mean():.4e} (MC오차 {sd_true / np.sqrt(n_samples):.4e})")
print(f"sd(S^2) 이론 {sd_true:.4e} 모의 {sample_vars.std(ddof=1):.4e} (MC오차 {sd_true / np.sqrt(2 * n_samples):.4e})")
print(f"카이제곱이 예측하는 sd = {sd_chi2:.4e}")
print(f"분산 배율 이론 {dof / (2 * sample_size) * (b2_pop - (sample_size - 3) / dof):.4f} "
f"모의 {(sample_vars.std(ddof=1) / sd_chi2) ** 2:.4f} 극한 {(b2_pop - 1) / 2:.4f}")
print(f"왜도(S^2) 카이제곱이라면 {np.sqrt(8 / dof):.4f} 모의 {stats.skew(sample_vars):.4f}")
# 위아래 두 패널로 나눈다. 위는 모집단, 아래는 통계량의 표집분포다.
# 둘의 **가로 눈금이 다르다**는 점에 주의하라.
# 표집분포가 훨씬 좁으므로 같은 축에 그리면 한 점처럼 보인다.
fig, (ax0, ax1) = plt.subplots(2, 1, figsize=(12, 6))
ax0.hist(population, bins=100, density=True, alpha=0.5)
ax0.set_title('Population Distribution (Income — Skewed)', fontsize=16)
ax1.hist(sample_vars, bins=100, density=True, alpha=0.5)
ax1.set_title(rf'Sampling Distribution of $S^2$ (n = {sample_size})', fontsize=16)
for ax in (ax0, ax1):
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
plt.tight_layout()
plt.show()
출력:
소득 모집단 50000 명: 평균 68761, 표준편차 32872, 왜도 1.0488, 첨도 4.0808
E[S^2] 이론 1.0805e+09 모의 1.0845e+09 (MC오차 6.2101e+06)
sd(S^2) 이론 6.2101e+08 모의 6.2921e+08 (MC오차 4.3912e+06)
카이제곱이 예측하는 sd = 5.0938e+08
분산 배율 이론 1.4863 모의 1.5259 극한 1.5404
왜도(S^2) 카이제곱이라면 0.9428 모의 0.9776

그대로인 것 — 불편성. 모의 \(E[S^2] = 1.0845 \times 10^9\)이 모집단 분산 \(1.0805 \times 10^9\)에서 몬테카를로 오차 \(6.21 \times 10^6\)의 \(0.64\)배만큼 떨어져 있다. 모집단이 치우쳤다는 사실이 중심에는 아무 영향을 주지 않는다.
달라진 것 — 폭. 모의 \(\operatorname{sd}(S^2) = 6.2921 \times 10^8\)이 이론 \(6.2101 \times 10^8\)과 \(1.3\%\) 차이로 맞고, 카이제곱 예측 \(5.0938 \times 10^8\)보다는 \(24\%\) 크다. 배율로는 모의 \(1.5259\)가 이론 \(1.4863\)과 \(2.7\%\) 차이이며(배율은 표준편차의 제곱이라 상대오차가 두 배로 보인다), 극한 \(1.5404\)에 아래에서 다가가는 중이다. 명목 \(95\%\) 신뢰구간을 카이제곱으로 짜면 폭이 \(1/1.22\)배로 좁아진다.
거의 그대로인 것 — 모양. 뜻밖에도 왜도가 \(0.9776\)으로 카이제곱이 예측하는 \(0.9428\)과 거의 같다. 왜도 추정값의 몬테카를로 요동이 \(0.038\)쯤이니 \(0.9\)배 차이, 곧 구별되지 않는다. \(n = 10\)에서 \(S^2\)의 치우침은 모집단이 아니라 자유도가 정한다. 아래 패널의 모양만 보고는 모집단이 정규였는지 소득이었는지 가려낼 수 없고, 가려내게 해 주는 것은 가로축의 폭뿐이다.
그러므로 이 쪽의 결론을 한 줄로 줄이면 이렇다. \(\bar X\)에서는 모집단의 치우침이 중심극한정리에 씻겨 거의 사라지지만, \(S^2\)에서는 중심에도 모양에도 나타나지 않고 오직 폭에만 남는다. 그리고 폭은 신뢰구간과 검정이 직접 쓰는 양이다.
소득 모집단은 꼬리가 두꺼워 첨도가 크다. 앞에서 본 배율 \((\beta_2-1)/2\)가 그만큼 크게 작용하므로 \(S^2\)의 퍼짐이 정규모집단에서보다 커지고, 카이제곱 공식이 주는 값은 더 이상 맞지 않는다. 다만 그 정도를 가늠해 두자. 이 모집단은 \(\beta_2 = 4.08\)이라 분산 배율이 \(1.49\), 폭으로는 \(22\%\) 넓어지는 수준이다(지수모집단의 \(3.97\)과는 자릿수가 다르다). 모집단의 모양이 \(\bar{X}\)의 표집분포에는 거의 흔적을 남기지 않았지만 \(S^2\)에는 고스란히 남는 것이다.
연습문제¶
연습문제 1. \(S^2\)의 평균과 분산. \(N(\mu, 25)\)에서 \(n = 10\)인 표본을 뽑는다. (a) \(\mathbb{E}[S^2]\), (b) \(\mathrm{Var}(S^2)\)을 계산하라.
풀이
(a) \(\mathbb{E}[S^2] = \sigma^2 = 25\) (Bessel 수정 덕분에 \(S^2\)이 불편이다).
(b) 정규성 아래에서 \((n-1) S^2/\sigma^2 \sim \chi^2_{n-1}\)이다. \(\chi^2_{n-1}\)의 분산은 \(2(n-1)\)이므로:
\(S^2\)의 표준편차는 \(\approx 11.8\)로 변동성이 상당하다. \(n = 10\)에서 분산 추정값은 매우 불안정하다.
연습문제 2. \(P(S^2 > 30)\). 같은 설정으로 \(n = 10\), \(\sigma^2 = 25\), 정규모집단이다.
풀이
\(\chi^2 = (n-1)s^2/\sigma^2 = 9 \cdot 30/25 = 10.8\).
\(P(S^2 > 30) = P(\chi^2_9 > 10.8) \approx 0.290\)으로 약 29%이다.
참 분산이 25인데도 표본추출 변동성 때문에 표본분산이 30을 쉽게 넘을 수 있다. 소표본에서는 흔한 일이다.
연습문제 3. 정규성 없이. 모집단의 정규성을 가정하지 않으면 \(P(S^2 > 30)\)에 관해 무엇을 말할 수 있는가?
풀이
정규성이 없으면 \((n-1)S^2/\sigma^2\)은 \(\chi^2_{n-1}\)을 따르지 않는다. 카이제곱 결과는 정규분포에 특유한 것이다.
\(\mathbb{E}[S^2] = \sigma^2\)은 여전히 성립하지만(불편성에는 정규성이 필요 없다), \(S^2\)의 분포는 상당히 다를 수 있다.
\(\mathrm{Var}(S^2)\)을 안다면 Chebyshev 한계를 쓸 수 있지만, 일반적으로 \(\mathrm{Var}(S^2)\)은 모집단의 4차 적률(첨도)에 의존하며 이는 분포 모양에 민감하다.
실무: 치우쳤거나 꼬리가 두꺼운 자료에서는 \(S^2\)의 분산이 카이제곱 공식이 시사하는 것보다 크다. 정규가 아닌 상황에서 \(\sigma^2\)에 관한 추론에는 붓스트랩이 권장되는 도구이다.
연습문제 4. 정규성 아래에서 \(S^2\)의 카이제곱 분포를 증명하라. 구체적으로 \(X_1, \ldots, X_n\)이 i.i.d. \(N(\mu, \sigma^2)\)이면 \((n-1)S^2/\sigma^2 \sim \chi^2_{n-1}\)임을 보여라.
풀이
다음과 같이 분해한다:
좌변은 \(\chi^2_n\)이다(표준정규확률변수 \(n\)개의 제곱합). 우변의 두 번째 항은 \(\chi^2_1\)이다(\(\sqrt n(\bar X - \mu)/\sigma \sim N(0, 1)\)의 제곱).
(\(\mathrm{span}\{\mathbf 1\}\)과 그 직교여공간으로의 \(X\)의 직교사영에 적용한) Cochran 정리에 의해 우변의 두 항은 독립이다. 따라서:
이며 우변의 두 카이제곱은 독립이다. 적률생성함수의 성질에 의해 \((n-1) S^2/\sigma^2 \sim \chi^2_{n-1}\)이다.
\(\square\)
이 유도가 \(\sigma^2\)에 관한 정규이론 추론 전체를 떠받치며, \(t\) 분포와 \(F\) 분포가 자연스럽게 나타나는 이유이기도 하다.
연습문제 5. \(\sigma^2\)의 신뢰구간. 정규모집단에서 \(n = 10\), \(s^2 = 16\)을 얻었다. \(\sigma^2\)에 대한 95% 신뢰구간을 구성하라.
풀이
추축량: \((n-1)s^2/\sigma^2 \sim \chi^2_9\).
95% 신뢰구간에는 \(\chi^2_{0.025, 9} = 2.700\)과 \(\chi^2_{0.975, 9} = 19.023\)을 사용한다:
역으로 풀면:
\(s^2 = 16\)이면 신뢰구간은 \((9 \cdot 16/19.023, 9 \cdot 16/2.700) = (7.57, 53.33)\)이다.
넓고 비대칭이다. 자유도가 작으면 카이제곱이 치우쳐 있기 때문이다. \(n = 10\)에서는 분산이 거의 제약되지 않는다. \(n\)이 커지면 신뢰구간이 좁아진다.
연습문제 6. \(S^2\)과 \(\sigma^2_{\text{MLE}}\). \(\sigma^2\)의 MLE는 분모가 \(n - 1\)이 아니라 \(n\)이다. 편향, 분산, 평균제곱오차를 비교하라.
풀이
\(S^2 = \frac{1}{n-1}\sum(X_i - \bar X)^2\) (불편): \(\mathbb{E}[S^2] = \sigma^2\), \(\mathrm{Var}(S^2) = 2\sigma^4/(n-1)\).
\(\hat\sigma^2_{\text{MLE}} = \frac{1}{n}\sum(X_i - \bar X)^2 = \frac{n-1}{n} S^2\) (편향): \(\mathbb{E}[\hat\sigma^2_{\text{MLE}}] = (n-1)\sigma^2/n\).
\(\mathrm{Var}(\hat\sigma^2_{\text{MLE}}) = ((n-1)/n)^2 \cdot 2\sigma^4/(n-1) = 2(n-1)\sigma^4/n^2\).
\(\mathrm{MSE}(\hat\sigma^2_{\text{MLE}}) = \mathrm{Var} + \mathrm{bias}^2 = 2(n-1)\sigma^4/n^2 + \sigma^4/n^2 = (2n-1)\sigma^4/n^2\).
\(\mathrm{MSE}(S^2) = \mathrm{Var}(S^2) = 2\sigma^4/(n-1)\).
비를 비교하면 \(\mathrm{MSE}(\hat\sigma^2_{\text{MLE}})/\mathrm{MSE}(S^2) = (2n-1)(n-1)/(2n^2)\)로, 모든 \(n \ge 2\)에서 1보다 작다.
MLE는 편향되어 있지만 평균제곱오차가 더 작다. 분산이 더 작은 것이 편향을 상쇄하고도 남기 때문이다. 편향–분산 맞바꿈의 고전적인 예로, 전체 오차를 줄이기 위해 약간의 편향을 받아들이는 것이다.
그럼에도 대부분의 소프트웨어가 (Bessel 수정된) \(S^2\)을 쓰는 이유는 불편성이 깔끔한 성질이고 \(n \to \infty\)이면 평균제곱오차의 차이가 사라지기 때문이다.
연습문제 7. 독립인 두 정규표본에서 \(n_1=12\), \(s_1^2 = 18.4\)와 \(n_2 = 15\), \(s_2^2 = 11.9\)를 얻었다. 공통분산 \(\sigma^2\)의 합동추정값을 구하고, 왜 두 분산의 단순평균을 쓰지 않는지 설명하라. 합동추정량이 불편임을 보여라.
풀이
합동추정값.
단순평균 \((18.4+11.9)/2 = 15.15\)와 다르다.
왜 자유도로 가중하는가. \(s_1^2\)은 자유도 11, \(s_2^2\)은 자유도 14로 정밀도가 다르다. 정규모집단에서 \(\operatorname{Var}(S_i^2) = 2\sigma^4/(n_i-1)\)이므로 정밀도가 자유도에 비례하고, 앞서 본 대로 정밀도 가중이 최소분산을 준다. 자유도가 큰 쪽에 더 큰 가중치를 주는 것이 자연스럽다.
\(n_1 = n_2\)이면 두 방법이 일치한다. 표본크기가 크게 다를수록 차이가 커진다.
불편성.
이다. 어떤 가중치를 써도 합이 1이면 불편이지만, 자유도 가중이 그중 분산이 가장 작다. \(\square\)
분모 \(n_1+n_2-2\)가 곧 합동 \(t\) 검정의 자유도다. 각 표본에서 평균을 하나씩 추정하느라 자유도를 하나씩 잃은 결과다.
연습문제 8. 분산을 \(\left(\sum_i x_i^2 - n\bar x^2\right)/(n-1)\)로 계산하는 "간편식"은 수학적으로는 옳지만 수치적으로 위험하다. \(x = (10^8+1,\ 10^8+2,\ 10^8+3)\)에서 무슨 일이 일어나는지 설명하고 안전한 방법을 적어라.
풀이
참값은 \(s^2 = 1\)이다(자료가 \(1,2,3\)을 평행이동한 것이므로).
간편식의 문제. \(\sum x_i^2 \approx 3\times10^{16}\)이고 \(n\bar x^2 \approx 3\times10^{16}\)이다. 거의 같은 두 거대한 수를 빼서 2라는 작은 수를 얻어야 한다. 배정밀도 부동소수점은 유효숫자가 약 16자리이므로 \(10^{16}\) 규모의 수에서는 1의 자리조차 제대로 표현되지 않는다. 그 결과 뺄셈에서 유효숫자가 모두 소멸되어 0이나 음수 같은 엉뚱한 값이 나온다.
import numpy as np
x = np.array([1e8+1, 1e8+2, 1e8+3])
naive = (np.sum(x**2) - len(x)*x.mean()**2) / (len(x)-1)
print(naive) # 0.0 또는 음수 (환경에 따라 다름)
print(np.var(x, ddof=1)) # 1.0
출력:
0.0
1.0
참값은 1인데 간편식이 0을 준다. 분산이 0이라는 것은 세 값이 모두 같다는 뜻이므로 명백히 틀린 답이다.
안전한 방법 1 — 두 번 훑기. 평균을 먼저 구하고 편차를 제곱한다.
편차가 \(-1, 0, 1\)로 작아져 상쇄가 일어나지 않는다. NumPy의 var가 이 방식이다.
안전한 방법 2 — 웰퍼드 알고리즘. 자료를 한 번만 훑으면서 갱신한다.
마지막에 \(s^2 = M_n/(n-1)\)이다. 갱신량이 언제나 편차 규모라 안정적이며, 자료를 저장할 필요가 없어 스트리밍 자료에 쓴다.
교훈. 수학적으로 동치인 식이 수치적으로 동치인 것은 아니다. 자료의 평균이 표준편차에 비해 아주 클 때(측정값이 큰 기준선 위의 작은 변동일 때) 특히 위험하다. 자료를 미리 중심화해 두는 것도 좋은 습관이다.
연습문제 9. 도수분포표로만 주어진 자료의 분산을 구하는 공식을 적어라. 구간으로 묶인 자료(예: "20\~30대 15명")에서 분산을 계산할 때 생기는 오차는 어떤 성격인가?
풀이
값 \(v_1,\dots,v_K\)가 각각 \(f_1,\dots,f_K\)번 나타나고 \(n = \sum_k f_k\)일 때
이다. 관측값 하나하나를 다 쓰는 대신 도수를 가중치로 쓴 것이며, 값이 정확히 알려져 있으면 결과도 정확하다.
구간 자료의 문제. "20세 이상 30세 미만 15명"처럼 구간만 알면 각 관측값을 구간 중앙값 25로 대신할 수밖에 없다. 이때 두 가지 오차가 생긴다.
(1) 구간 내 분산의 소실. 구간 안에서 값들이 흩어져 있는데 모두 중앙값으로 눌러 버리므로 산포를 과소평가한다. 구간 안에서 값이 균등하게 퍼져 있다고 보면 잃어버린 분산이 구간 폭 \(w\)에 대해 \(w^2/12\)이다. 이를 되돌려 주는 것이 셰퍼드 보정이다.
앞서 균등분포에서 본 반올림 오차와 같은 계산이다.
(2) 구간 내 분포의 치우침. 실제 값들이 구간 안에서 균등하지 않으면(예: 소득 구간에서는 낮은 쪽에 몰린다) 중앙값 대입이 평균 자체를 편향시킨다. 셰퍼드 보정으로는 고칠 수 없고, 구간이 넓고 분포가 급격히 변하는 곳에서 특히 심하다. 마지막 구간이 "100 이상"처럼 열려 있으면 중앙값을 정하는 것 자체가 임의적이다.
실무 권고. 가능하면 원자료를 확보한다. 구간 자료만 있다면 폭이 좁은 구간에서는 셰퍼드 보정으로 충분하고, 소득처럼 심하게 치우친 자료는 구간별로 분포를 가정한 모형(예: 파레토 꼬리)을 적합하는 편이 낫다.
연습문제 10. \(k\)개 집단의 분산분석에서 오차 평균제곱 \(\text{MSE}\)가 연습문제 7의 합동분산을 \(k\)개 집단으로 확장한 것임을 보여라. 이 값이 \(\sigma^2\)의 불편추정량인 것은 귀무가설의 참·거짓과 무관함을 설명하라.
풀이
집단 \(i\)의 표본크기가 \(n_i\), 표본분산이 \(s_i^2\)이고 \(N = \sum_i n_i\)라 하자. 집단 내 제곱합은
이고 자유도가 \(N-k\)이므로
이다. \(k=2\)로 두면 정확히 연습문제 7의 \(s_p^2\)이다. \(\square\)
귀무가설과 무관한 이유. 위 식에는 각 집단의 관측값이 자기 집단 평균 \(\bar x_i\)로부터 얼마나 떨어져 있는지만 들어간다. 집단 평균들이 서로 같든 다르든 그 차이는 계산에 전혀 들어오지 않는다. 따라서 각 \(s_i^2\)이 \(\sigma^2\)의 불편추정량이면 그 가중평균인 MSE도 언제나 불편이다.
반면 집단 간 평균제곱
은 사정이 다르다. \(H_0\)가 참이면 \(E[\text{MSB}] = \sigma^2\)이지만, 거짓이면
으로 부풀어 오른다.
이것이 \(F\) 검정의 논리 전부다. 분모는 진실과 무관하게 \(\sigma^2\)을 재는 자이고, 분자는 \(H_0\)가 거짓일 때만 커지는 양이다. 둘의 비가 1보다 뚜렷이 크면 평균이 다르다고 판단한다. 그리고 \(F\) 검정이 단측인 이유도 여기 있다. 대립가설 아래에서 이 비는 언제나 위로만 움직인다.
정리하며¶
\(S^2\)은 어떤 모집단에서나 \(\sigma^2\)의 불편추정량이다. 이 성질만은 모집단의 모양을 묻지 않는다. 그러나 그 이상을 말하려는 순간 조건이 붙는다. 정규모집단에서만 \((n-1)S^2/\sigma^2\)이 \(\chi^2_{n-1}\)을 따르고, 그로부터 \(\text{Var}(S^2) = 2\sigma^4/(n-1)\)과 카이제곱 분위수에 기반한 비대칭 신뢰구간이 나온다.
정규성이 없으면 이 가운데 무엇도 보장되지 않는다. \(\bar{X}\)를 지켜 주던 중심극한정리라는 보호막이 \(S^2\)에는 없기 때문이다. 5장을 관통하는 문장으로 적으면 이렇다. 중심극한정리는 1차 적률에만 선물을 주고 2차 적률에는 주지 않는다. \(S^2\)의 분산은 모집단의 4차 적률, 곧 첨도에 직접 노출되어 있고, 표본을 키운다고 그 노출이 사라지지 않는다.
이어지는 다섯 쪽에서 이 점을 파고든다. \(S^2\)의 표준오차를 먼저 보고, 네 모집단(균등·지수·정규·베르누이)에서 표본분포를 모의실험한다. 정규가 아닌 모집단에서 어긋남의 크기가 첨도 \(\beta_2\)로 정해지는 배율 \((\beta_2-1)/2\)이며, 그 배율이 표본크기와 무관하게 남는다는 것이 그 결론이다.
그래서 이 분포로 무엇을 하는가¶
여기까지가 \(S^2\)의 표본분포다. 정규모집단이면 \((n-1)S^2/\sigma^2\)이 정확히 \(\chi^2_{n-1}\)이고, 아니면 어긋남의 배율이 \((\beta_2-1)/2\)로 남으며 표본을 키워도 그 배율은 줄지 않는다. \(\bar X\)에서는 정리의 수렴이 문제라 \(n\)이 고쳐 주지만 \(S^2\)에서는 정리의 전제가 문제라 그렇지 않다는 것, 그것이 이 쪽의 결론이다.
이 분포를 근거로 실제 추론을 하는 일은 뒤에 있다. \(\sigma^2\)의 신뢰구간은 8.2절에서, 분산에 대한 검정은 9.2절에서 다룬다.
다만 그쪽으로 넘어가기 전에 이 쪽의 결론을 한 번 더 새겨 둘 일이다. 카이제곱에 기댄 구간과 검정은 정규성이 조금만 어긋나도 약속한 값을 지키지 못하고, 자료를 더 모아도 사정이 나아지지 않는다. 그래서 분산에 관한 추론은 평균에 관한 추론과 달리 "표본이 크니 괜찮겠지"가 통하지 않으며, 애초에 첨도에 덜 기대는 방법으로 가는 편이 낫다. 그 방법들은 15장이 한 장을 통째로 쓴다.