기초통계 3. 일변량 분석(비교분석)


chapter 1. 비교분석(일변량분석) 기초

1. 개념

일변량분석

데이터 분석에서 개별 확률변수를 독립적으로 분석하는 과정을 일변량 분석이라 한다. 이는 각 변수의 분포 특성을 파악하고, 중심 경향이나 산포 정도를 요약함으로써 데이터의 전반적인 구조를 이해하는 데 필수적인 출발점이 된다.

변수의 유형에 따라 분석 방식은 달라진다. 범주형 변수는 개체를 분류하는 기능을 하며, 이 경우 분석은 주로 빈도와 상대빈도(비율)를 중심으로 이루어진다. 반면, 측정형 변수는 수치적으로 의미 있는 값을 가지므로 평균, 중앙값, 분산, 표준편차 등의 요약 통계량으로 변수의 중심과 퍼짐을 정리할 수 있다.

모집단으로부터 추출한 확률표본 데이터는 모집단의 모든 정보를 가진 축소 데이터이므로 확률표본의 확률분포함수는 모집단 확률분포함수와 동일하다. 이를 이용하여 \(f(x)\)(모집단에 대한 모든 정보)와 \(\theta\)(요약 정보)를 추론한다. (1) 확률분포함수 \(f(x)\)의 형태를 추론하는 것을 적합성 검정이라 한다. (2) 모수 \(\theta\)에 대한 추론을 한다.

\[X \sim f(x;\theta)\]

\[r.s. = (x_{1},x_{2},\ldots,x_{n})\]

\[x_{i} \sim f(x_{i};\theta)\]

\[s(x_{1},x_{2},...,x_{n}) \sim f(s)\]

비교분석

각 확률변수는 이론적으로는 고유의 확률분포함수를 가지고 있으며, 해당 분포를 대표하는 값으로는 모비율, 모평균, 모분산과 같은 모수가 있다. 이러한 모수에 대한 추정과 비교는 단순한 요약을 넘어서 두 개 이상의 모집단 또는 조건 간의 차이를 평가하는 분석으로 이어지며, 이를 비교 분석이라 한다.

일변량 분석은 개별 변수의 요약 통계와 분포적 특성을 이해하는 과정이며, 비교 분석은 그러한 요약값들이 서로 다른 조건이나 그룹 간에 실질적인 차이를 보이는지를 확률과 통계적 추론의 틀 안에서 검증하는 과정이다.

관심 모수

일변량 분석: 모비율 \((\theta = p)\), 모평균 \((\theta = \mu)\), 모분산 \((\theta = \sigma^{2})\)

비교분석:

  • 모비율 차이 \((\theta = p_{1} - p_{2})\)

  • 모평균 차이 \((\theta = \mu_{1} - \mu_{2})\)

  • 모분산 차이 \((\theta = \sigma_{2}^{2}/\sigma_{1}^{2})\)

2. 분석절차

일변량 분석은 하나의 변수에 대해 그 분포 특성과 대표값을 요약하고 해석하는 분석이다. 이는 통계 분석의 가장 기본적인 단계이며, 이후 다변량 분석 또는 비교 분석의 기초가 된다.

일변량 분석은 하나의 변수에 대한 기술적 요약뿐 아니라, 그 변수의 모집단 특성(모수)에 대해 추론적 판단을 내리기 위한 통계적 가설 을 설정하면서 시작된다. 가설 검정 중심의 일변량 분석은 단순한 분포 요약을 넘어 관측된 통계량이 우연에 의한 것인지, 실제로 의미 있는 차이를 나타내는 것인지를 판단하는 데 목적이 있다.

모수에 대한 통계적 가설 설정

일변량 분석은 단일 변수에 대한 자료를 기술적으로 요약하고, 그 분포 특성을 파악하는 데서 출발하지만 통계적 추론의 맥락에서는 모수에 대한 가설 설정이 분석의 첫 단계가 된다.

통계학에서 말하는 모수란, 모집단의 특성을 수치적으로 나타내는 값으로서, 예를 들어 모평균, 모비율, 모분산 등이 이에 해당한다. 연구자는 관찰된 표본 데이터를 기반으로, 이러한 모수에 대해 일정한 주장을 하고 이를 검정하게 된다.

【예시】 모평균에 대한 가설

예를 들어, 어떤 교육 프로그램이 대학생의 수학 성취도에 미치는 영향을 평가하고자 할 때, 연구자는 해당 프로그램을 이수한 학생들의 수학 점수 평균이 전국 대학생 평균 점수인 70점과 유의미하게 다른지를 확인하고자 한다.

귀무가설: \(\mu = 70\) → 해당 프로그램을 이수한 학생들의 수학 점수는 전국 평균과 같다.

대립가설:\(\mu \neq 70\) → 프로그램을 이수한 학생들의 평균 점수는 전국 평균과 다르다.

이와 같이, 연구문제는 결국 모수에 대한 통계적 가설로 정식화되며, 그 이후의 분석 절차는 표본으로부터 계산된 통계량이 이 가설을 지지하거나 반박할 수 있는지를 판단하는 과정으로 구성된다.

데이터 시각화

일변량 분석에서 통계적 검정에 앞서 먼저 수행해야 할 작업은 시각화와 탐색적 분석이다. 하나의 변수에 대해 히스토그램, 박스플롯, 밀도함수 곡선 등을 통해 분포의 형태, 이상값 존재 여부, 중심과 산포의 구조 등을 직관적으로 파악할 수 있다.

이 과정을 통해 변수의 특성을 이해하고, 이어서 설정할 가설이 타당한지, 검정에 필요한 전제 조건(예: 정규성)이 충족되는지를 평가할 수 있다. 시각화를 기반으로 연구 문제를 모수에 대한 통계적 가설로 정식화한 뒤, 이에 대한 검정통계량과 \(p\)값을 통해 귀무가설의 기각 여부를 판단하게 된다.

MVUE 및 샘플링 분포 도출

통계적 가설검정은 표본으로부터 관측된 통계량이, 귀무가설 하에서 나타날 수 있는 우연한 변동인지, 아니면 실제 모수의 차이로부터 기인한 것인지를 판단하는 데 그 목적이 있다. 이러한 판단은 근본적으로 모수에 대한 통계량의 성질과 분포를 기반으로 이루어진다.

가설검정에서 사용하는 통계량은 해당 모수에 대한 추정량이며, 이 추정량이 가질 수 있는 여러 후보 중에서도, 최소분산 불편추정량(MVUE)이 가장 선호된다. 그 이유는 다음과 같다.

  • 불편성: 추정량의 평균이 실제 모수와 일치

  • 최소 분산: 동일한 정보 하에서 가장 정확하고 안정적인 추정 → 즉, MVUE는 신뢰성 있는 비교 기준을 제공하여 검정통계량의 변동성을 최소화하고, 기각 여부에 대한 결정의 오류 확률을 줄일 수 있다.

가설검정은 다음과 같은 구조를 따른다.

\(\text{검정통계량} = \frac{\text{MVUE - 귀무가설 하 모수}}{\text{표준오차}}\), 여기서 핵심은 표본 통계량의 분포, 즉 샘플링 분포이다. 왜냐하면,

  • \(p\)값 계산은 이 통계량이 얼마나 극단적인가?를 분포의 확률 기준에서 판단해야 하기 때문이다.

  • 기각역 또는 임계값 결정은 표본 통계량의 분포 형태를 전제로 하기 때문이다.

즉, 귀무가설이 참일 때 추정량이 어떤 확률분포를 따르는지를 알아야 우리가 관측한 통계량이 우연히 나타났을 가능성을 수치적으로 판단할 수 있다.

  • 통계적 가설 검정의 수학적 정당성을 위한 필요 조건

  • MVUE는 정확하고 효율적인 모수 추정의 기준선을 제공하고,

  • 샘플링 분포는 검정통계량의 변동성과 극단값의 확률을 판단할 기준이 된다.

이 두 요소가 없다면, 가설검정은 단순한 수치 비교 이상의 의미를 갖지 못하며, \(p\)값이나 가설검정 결론에 대한 해석적 정당성이 크게 약화된다.

검정통계량 및 \(p\)값 계산

가설검정의 목적은, 귀무가설 하에서 관측된 표본 결과가 발생할 가능성이 얼마나 희박한지를 평가하는 것이다. 이를 위해 우리는 먼저 검정통계량을 정의하고, 그에 대한 관측값을 계산하여 기각 여부를 판단하게 된다. “교육 프로그램이 대학생의 수학 성취도 평가”에 대한 모평균 가설검정을 예시로 설명하기로 한다.

검정통계량 정의 \(H_{0}:\mu = 70\)

  • 전제: 정규분포 또는 중심극한정리 성립

  • 표준편차 \(\sigma\)를 알고 있는 경우: \(z = \frac{\overline{X} - \mu_{0}}{\frac{\sigma}{\sqrt{n}}} \sim N(0,1)\)

  • 표준편차 \(\sigma\)를 모를 경우: \(t = \frac{\overline{X} - \mu_{0}}{\frac{s}{\sqrt{n}}} \sim t(n - 1)\)

기각역과 유의확률 \(p\)

기각역이란, 귀무가설이 참일 때 통계량이 나타나기 어려운 극단적인 영역을 의미한다. 이 영역의 경계값을 임계값이라 하고, 이 값은 유의수준(\(\alpha\))과 검정의 방향성(단측/양측)에 따라 결정된다.

유의확률 \(p\)값은, 귀무가설이 참이라는 전제 하에서 관측된 검정통계량 이상으로 극단적인 값이 나타날 확률을 의미한다.

  • \(p < \alpha\): 귀무가설 기각 → 결과는 통계적으로 유의하다.

  • \(p \geq \alpha\): 귀무가설 기각하지 않음 → 통계적으로 유의하지 않다.

결론

통계적 가설검정 결과를 보고할 때는 단순히 기각 여부를 언급하는 것을 넘어, 주요 요약 통계량, 검정통계량, 유의확률, 그리고 필요한 경우 신뢰구간까지 함께 제시함으로써. 결과의 정량적 의미와 해석 가능성을 풍부하게 전달해야 한다. 이러한 구성은 통계 분석의 재현 가능성을 보장하고, 해석의 과학적 엄밀성을 확보하는 데 필수적이다.

3. 예제 데이터

seaborn 라이브러리의 titanic 데이터셋은 실제 1912년 타이타닉 호 침몰 사고의 승객 정보를 바탕으로 구성되어 있다(15개 변수, 표본크기-승객 891명)

변수명 설명 데이터 타입
survived 생존 여부 (0 = 사망, 1 = 생존) int (범주형)
pclass 선실 등급 (1, 2, 3등급) int (순서형)
sex 성별 category
age 나이 float
sibsp 동반한 형제자매/배우자 수 int
parch 동반한 부모/자녀 수 int
fare 운임 요금 float
embarked 탑승 항구 (C = Cherbourg, Q = Queenstown, S = Southampton) category
class 선실 등급 (문자형: First, Second, Third) category
who 승객 구분 (man, woman, child) category
adult_male 성인 남성 여부 bool
deck 선실 위치 (A–G, 일부 결측) category
embark_town 탑승 도시 (Cherbourg, Queenstown, Southampton) category
alive 생존 여부 (yes/no) category
alone 혼자 탑승 여부 bool
#타이타닉 데이터 불러오기
import seaborn as sns
titanic = sns.load_dataset(“titanic")
titanic.info()

chapter 2. 두 사물이 다르다는 것을 어떻게 알 수 있는가?

통계는 두 현상이 서로 다른지 판단할 때 유용한 도구다. 하지만 이 단순한 질문—“이 둘은 같은가, 다른가?”—의 답은 언제나 확률적인 것이다. 예를 들어 어떤 약이 효과가 있는지 알아보려 할 때, 우리는 다음과 같은 질문을 한다:

이 약을 복용한 환자들과 그렇지 않은 환자들 사이에 실질적인 차이가 존재하는가?”

이는 두 그룹의 평균값이나 비율 또는 확률이 서로 통계적으로 유의미하게 다르냐는 문제로 귀결된다.

평균의 차이가 진짜일까, 우연일까?

가령, 한 실험에서 위약(placebo)을 투여한 집단의 평균 체중 감소량이 2파운드, 신약을 투여한 집단의 평균 감소량이 4파운드라고 하자. 이 경우 우리는 신약이 더 효과적이라고 생각할 수 있다. 하지만 그 차이가 단지 무작위 변동에 의한 것일 가능성도 있다.

모든 측정은 일정 수준의 무작위성(randomness)을 내포하고 있다. 그렇기 때문에 단순히 평균값이 다르다는 사실만으로 두 집단이 다르다고 단정지을 수 없다.

여기서 통계는 두 질문에 답한다:

1. 관측된 차이가 얼마나 큰가?

2. 그 차이가 우연히 발생했을 가능성은 얼마나 작은가?

이 질문들에 대한 답은 신뢰 구간(confidence intervals)과 p값(p-values), 그리고 통계적 유의성(statistical significance)을 통해 평가된다.

통계적 유의성과 실제적 유의성의 차이

통계적으로 유의미한 차이가 있다고 해서, 그 차이가 실제로도 의미 있는 것은 아니다. 예를 들어, 두 도시의 평균 기온이 0.1도 차이 나고, 그 차이가 통계적으로 유의미하다고 하더라도, 실제 생활에서는 아무런 체감이 없을 수 있다.

통계적 유의성은 오직 그 차이가 무작위로 발생할 가능성이 매우 낮다는 사실만을 말해줄 뿐이다.

반면 실질적(또는 실용적) 유의성은 그 차이가 현실에서 중요하거나 영향력이 있는가를 판단한다.

즉, 차이가 있다”는 것과 중요한 차이다”는 것은 다르다.

차이를 평가하는 기준: 효과 크기와 표준오차

효과 크기(effect size)는 두 집단 간의 차이의 크기를 의미하며, 이를 표준오차(standard error)와 비교해 해석한다.

  • 신약 복용 그룹 평균 체중 감소: 4.0 파운드

  • 위약 그룹 평균 체중 감소: 2.0 파운드

  • 두 집단 간 차이: 2.0 파운드

  • 표준오차: 0.5 파운드

차이(2.0)가 표준오차(0.5)의 4배이면, 이는 무작위로 발생했을 가능성이 매우 낮다고 해석할 수 있다.

이러한 판단은 z-통계량 또는 t-통계량으로 정량화된다.

무작위 샘플링의 중요성

통계적 검정을 하기 위해서는, 샘플이 모집단을 대표해야 한다. 만약 샘플이 편향되어 있다면, 아무리 통계적으로 유의한 결과가 나와도 모집단에 일반화할 수 없다.

예: 특정 체중 감량 약의 효과를 평가하는 실험에서 오직 운동선수들만을 대상으로 했다면, 그 결과를 일반 성인에게 적용하는 것은 무리다.

통계적 검정의 전제 조건은 무작위 추출(random sampling)이다.

p-값에 대한 오해

p-값은 흔히 이 결과가 우연일 확률”이라고 해석되지만, 정확히는 다음과 같은 의미를 가진다:

귀무가설(null hypothesis)이 참일 때, 이 정도 이상의 차이가 나타날 확률”

즉, p < 0.05란,

  • 차이가 우연히 발생했을 가능성이 5% 미만이다.”

  • 따라서 우리는 귀무가설을 기각할 수 있다.” 는 의미일 뿐이다.

하지만 p-값은 다음을 의미하지 않는다:

  • 귀무가설이 5% 확률로 참이다.”

  • 대립가설이 95% 확률로 참이다.”

이는 매우 흔한 오해이므로 주의해야 한다.

결론: 차이를 이해한다는 것의 의미

두 사물, 두 그룹, 두 평균, 두 비율이 서로 다른지를 판단하려면, 우리는 그 차이가 단순한 무작위 노이즈(noise)로부터 비롯된 것인지 아닌지를 평가해야 한다. 이를 위해 통계는 다음과 같은 도구들을 제공한다:

  • 평균 및 비율

  • 표준편차, 표준오차

  • 신뢰구간 및 효과 크기

  • p-값과 유의수준 (보통 5%)

그리고 이 모든 분석은 무작위 추출과 적절한 표본 설계라는 기반 위에서만 의미를 가진다.

chapter 3. 모비율 추론

1. 일집단 모비율

연구문제 및 통계적 가설

대규모 해양 재난인 타이타닉호 사고 당시, 전체 승객에 대한 사망률이 60%보다 높았다는 통계적 근거가 있는가?

  • 귀무가설: \(H_{0}:p = 0.6( = p_{0})\), 여기서 \(p\)는 모집단 사망률

  • 대립가설: \(H_{1}:p > 0.6( = p_{0})\) (단측가설)

  • 모수: \(\theta = p\)

  • 모집단 확률변수 \(X\)는 사망, 생존 두 개의 결과만 갖는 베르누이 시행 결과이며 모수는 사망율 \(p\)이다.

  • 데이터: 탑승인원 2,224중 신원이 확인된 891명 승객의 사망여부이다.

시각화

일변량 범주형 변수의 시각화는 빈도와 비율(확률분포함수)를 표현하는 것으로 바차트나 파이차트 도구를 이용한다. 타이타닉 승객의 표본 사망율은 61.6%이다.

import seaborn as sns
import matplotlib.pyplot as plt

# 데이터 불러오기
titanic = sns.load_dataset("titanic")

# 생존/사망 값 개수 계산
counts = titanic['survived'].value_counts()
labels = ['Died', 'Survived']
colors = ['#ff9999','#66b3ff']

# 파이차트 그리기
plt.figure(figsize=(6, 6))
plt.pie(
    counts,
    labels=labels,
    autopct='%1.1f%%',
    startangle=90,
    colors=colors,
    explode=(0.05, 0)  # 강조 효과
)
plt.title("Titanic Survival Distribution")
plt.axis('equal')  # 원형 유지
plt.show()

MVUE 및 샘플링분포

모비율의 MVUE 추정치는 표본 비율 \(\widehat{p} = \frac{\#\_ of\_ death}{\#\_ of\_ n} = 0.62\)이고 샘플링분포는 중심극한정리에 의해 \(\widehat{p} \sim N(p,\frac{p(1 - p)}{n})\)이다.

검정통계량 및 \(p\)값 계산, 그리고 신뢰구간

추정분산 \(V(\widehat{p}) = \frac{p(1 - p)}{n}\)은 이므로 표본비율의 표준편차인 표준오차 \(s(\widehat{p}) = \sqrt{\frac{p(1 - p)}{n}}\)이다.

  • 검정통계량: \(ts = \frac{\widehat{p} - p_{0}}{s(\widehat{p}) = \sqrt{\frac{p_{0}(1 - p_{0})}{n}}} \sim z\)

  • 유의확률: \(pvalue = P(z > |ts|)\)

모비율 \(100(1 - \alpha)\%\)신뢰구간

\[\widehat{p} \pm z_{1 - \alpha/2}\sqrt{\widehat{p}(1 - \widehat{p})/n} = (0.584,0.648)\]

import statsmodels.api as sm
from statsmodels.stats.proportion import proportions_ztest
import seaborn as sns

# 사망자 수 및 전체 탑승자 수
count = titanic[titanic['survived'] == 0].shape[0]
nobs = titanic.shape[0]
p0 = 0.6  # 귀무가설: 사망률 = 0.6

# 검정 수행
stat, pval = proportions_ztest(count, nobs, value=p0, alternative='larger')

# 신뢰구간 계산 (normal approximation)
ci_low, ci_upp = sm.stats.proportion_confint(count, nobs, alpha=0.05, method='normal')

# 출력
print(f"사망자 수: {count}")
print(f"전체 탑승자 수: {nobs}")
print(f"관측된 사망률: {count/nobs:.3f}")
print(f"검정통계량: {stat:.3f}")
print(f"p-값: {pval:.4f}")
print(f"사망률 95% 신뢰구간: ({ci_low:.3f}, {ci_upp:.3f})")

결론

승객 사망률은 0.6 초과인가?
표본비율 검정통계량 유의확률
0.616 0.992 0.321
95% 신뢰구간: (0.584, 0.648)

유의확률이 0.321로 유의수준 0.05보다 크므로 귀무가설이 채택되어, 승객 사망률이 0.6보다 크다고 할 만한 통계적 근거는 부족하다. 따라서 관측된 사망률이 61.6%이기는 하나, 이는 표본 오차 범위 내의 우연한 차이일 수 있으며, 사망률이 정확히 60%라는 주장을 기각하기에는 충분하지 않다.

2. 일집단 모비율-특수한 경우

(1) 모비율 소표본 \(min(np,n(1-p)) \le 5\)

모비율 검정 시 검정통계량의 분포는 정규분포를 가정한다. 이는 중심극한 정리에 의한 것으로 대표본 경유에만 MVUE, 표본비율 샘플링분포는 정규분포를 따른다.

그러나 소표본(\(min(np,n(1 - p)) < 5\))인 경우는 이항분포를 이용하여 가설을 검정한다. 모집단의 개체가 성공(성공 확률이 \(p\)), 실패의 결과만 있으므로 확률표본은 베르누이 시행과 동일하다. 그러므로 표본크기 \(n\) 확률표본으로부터 구한 성공 개체의 수 합은 이항분포 \(B(n,p)\)를 따른다.

학생 흡연 비율이 20% 미만이라고 발표했다. 맞 는지 알아보기 위하여 학생 20명을 확률 추출하여 흡연여부를 알아본 결과 3명이 흡연하고 있다고 조사 되었다. 발표가 맞는지 검정하시오.

귀무가설 : \(H_{0}:p = 0.2\) vs. 대립가설 : \(H_{0}:p < 0.2\)

\(min(20*0.2,20*0.8) = 4 < 5\)이므로 중심극한정리 적용이 불가능하다. 대신 흡연자 수는 이항분포(20, p=0.2)를 따르므로 유의확률은 다음과 같다. 귀무가설을 기각할 수 없어 학생 흡연율은 20% 미만이라 할 수 없다. \(P(\sum X_{i} \leq 3|sumX_{i} \sim B(n = 20,p = 0.2)) = 0.42\)

(2) Wilson 통계량

표본크기 \(n\)에 비해 성공회수 \(\sum x_{i} = x\) 가 매우 작은 경우 비율 추정치는 \(\widehat{p} = \frac{x}{n}\) 대신 \(\widehat{p} = \frac{x + 2}{n + 4}\)를 사용하고 추정방법은 대표본 동일하다.

3. 독립인 두 모집단 비율 차이

연구문제 및 통계적 가설

타이타닉호 사고 당시, 단독 탑승 승객의 생존률이 동반자와 함께 탑승한 승객의 생존률보다 통계적으로 유의하게 15% 이상 높은지를 검정하고자 한다.

  • 귀무가설: \(H_{0}:p_{1} - p_{2} = 0.15\), 여기서 \(p_{1}\)는 혼자 여행하는 승객의 생존율, \(p_{2}\)는 동반 여행하는 승객의 생존율

  • 대립가설: \(H_{1}:p_{1} - p_{2} > 0.15\) (단측가설)

  • 모수: \(\theta = p_{1} - p_{2}\)

시각화

집단별 일변량 범주형 변수의 시각화는 빈도와 비율(확률분포함수)를 표현하는 것으로 바차트 도구를 이용한다.

#동반여부별 생존여부 시각화
import matplotlib.pyplot as plt

# 상대빈도 계산 (교차비율표 → 정규화)
prop_df = (
    titanic
    .groupby(['alone', 'survived'])
    .size()
    .reset_index(name='count')
)

# 전체 대비 비율 계산 (alone 그룹 내 비율)
prop_df['proportion'] = prop_df.groupby('alone')['count'].transform(lambda x: x / x.sum())

# 시각화
plt.figure(figsize=(6, 5))
ax = sns.barplot(data=prop_df, x='alone', y='proportion', hue='survived', palette='Set2')

# 축 라벨 및 타이틀 설정
ax.set_xticklabels(['Not Alone', 'Alone'])
plt.ylabel("Proportion")
plt.xlabel("Traveling Alone")
plt.title("Survival Rate by Alone Status")
plt.ylim(0, 1)

# 비율 라벨 표시
for container in ax.containers:
    ax.bar_label(container, labels=[f'{h:.1%}' for h in container.datavalues], label_type='center')

plt.legend(title="Survived", labels=["No", "Yes"])
plt.tight_layout()
plt.show()

MVUE 및 샘플링분포

  • 동반 여행하는 승객 표본비율: \({\widehat{p}}_{1} = 0.506\)

  • 혼자 여행하는 승객 표본비율: \({\widehat{p}}_{2} = 0.304\)

  • MVUE: \(\widehat{\theta} = {\widehat{p}}_{1} - {\widehat{p}}_{2} = 0.202\)

샘플링분포

\[{\widehat{p}}_{1} - {\widehat{p}}_{2} = N(p_{1} - p_{2},\frac{p_{1}(1 - p_{1})}{n_{1}} + \frac{p_{2}(1 - p_{2})}{n_{2}})\]

# alone별 survived = 1 비율 (평균값이 생존률)
survival_rate_by_alone = titanic.groupby('alone')['survived'].mean()
print(titanic['survived'].mean(),survival_rate_by_alone)

0.3838383838383838
alone
False 0.505650
True 0.303538

검정통계량 및 \(p\)값 계산, 그리고 신뢰구간

추정량 \(\widehat{\theta} = {\widehat{p}}_{1} - {\widehat{p}}_{2}\)의 표준오차는 \(s({\widehat{p}}_{1} - {\widehat{p}}_{2}) = \sqrt{\frac{{\widehat{p}}_{1}(1 - {\widehat{p}}_{1})}{n_{1}} + \frac{{\widehat{p}}_{2}(1 - {\widehat{p}}_{2})}{n_{2}}}\)이다. 신뢰구간 구할 경우에는 표준오차는 위의 식을 사용해야 하나 가설검정 시에는 귀무가설이 맞다는 가정 하에 검정통계량을 계산하므로 개별 표본비율 대신 통합비율 \({\widehat{p}}_{0} = \frac{n_{x} + n_{y}}{n_{1} + n_{2}}\)을 사용하여 구해야 한다.

  • 검정통계량: \(TS = \frac{{\widehat{p}}_{1} - {\widehat{p}}_{2} - 0}{s({\widehat{p}}_{1} - {\widehat{p}}_{2})} \sim z\)

  • 유의확률: \(pvalue = P(z > |ts|)\)

\(100(1-\alpha) \%\) 모비율 차이(\(p_{1} - p_{2}\)) 신뢰구간

\[({\widehat{p}}_{1} - {\widehat{p}}_{2}) \pm z_{1 - \alpha/2}\sqrt{\frac{{\widehat{p}}_{1}(1 - {\widehat{p}}_{1})}{n_{1}} + \frac{{\widehat{p}}_{2}(1 - {\widehat{p}}_{2})}{n_{2}}}\]

#모비율 차이 검정
from statsmodels.stats.proportion import proportions_ztest

# 집단별 생존자 수 및 전체 수
grouped = titanic.groupby("alone")["survived"].agg(['sum', 'count'])

success = [grouped.loc[False, 'sum'], grouped.loc[True, 'sum']]
nobs = [grouped.loc[False, 'count'], grouped.loc[True, 'count']]

# 단측 검정 : 모수차이 0.15 설정
stat, pval = proportions_ztest(success, nobs, value=0.15, alternative='larger')

# 출력
print(f"검정통계량: {stat:.3f}")
print(f"p-값: {pval:.4f}")

결론

혼자 여행 승객 생존률은 동반 여행 승객 생존률보다 15% 높은가?
집단 표본비율 검정통계량 유의확률
동반 여행 0.506 1.565 0.059
홀로 여행 0.304
총합 0.384

유의확률이 0.059로 유의수준 0.05를 초과하므로 귀무가설을 기각할 수 없다. 동반자와 함께 여행한 승객의 생존률(50.6%)이 혼자 여행한 승객의 생존률(30.4%)보다 높기는 하지만, 그 차이가 통계적으로 15% 이상이라고 단정할 수는 없다.

4. 짝진 집단 비율 차이 McNemar 검정

연구문제(시나리오)

동일한 개체에 대하여 이진형(성공, 실패) 결과의 실험(프로그램)을 서로 다른 두 기간(before - after)에 측정하여 실험(프로그램) 효과가 있는지 알아보는 방법이다.

[사례연구] Bland (2000) 1319명 어린이에 대하여 12살에 독감에 걸릴 가능성은 나이가 14살이 되면 높아지는지, 낮아지는지 알아보기 위하여 조사한 결과이다. 즉 1,319명 어린이는 동일하며 12살에 조사하고 14살에 다시 한 번 조사한 결과이다. https://www.medcalc.org/manual/ mcnemartest2.php

12세와 14세 사이에 감기에 걸릴 확률은 변하지 않는다. ⇔ 심한 감기에 걸릴 확률이 시간에 따라 달라지지 않았다.

P(A)+P(B)(12 살에 걸린 독감 걸린 사람 비율)=P(A)+P(C)(14 살에 걸린 독감 걸린 사람 비율)은 동일하고 (2) P(C)+P(D)(12 살에 걸린 독감 안 걸린 사람 비율)=P(B)+P(D)(14 살에 걸린 독감 안 걸린 사람 비율)은 동일하다는 가정이 성립하면 \(P(B) = P(C)\)이성립한다. 즉 12살에 독감 감염자의 14살 미감염 비율과 14살 독감 감염자의 12살 독간 미감염 비율은 동일하다.

통계적 가설

  • 귀무가설 : 나이에 관계없이 감기 걸릴 가능성은 동일하다. \(P(B) = P(C)\)

  • 대립가설 : 나이에 따른 독감 걸릴 가능성은 달라진다.

점추정치 및 샘플링 분포: \(TS = \frac{(B - C)^2}{B + C} = \frac{(144 - 256)^2}{144 + 256} = 31.36 \sim \chi^2(1)\)

유의확률: \(p = P(\chi_{(1)}^{2} > 31.36) < 0.001\)

결론

귀무가설은 기각되어, 12살에 독감 걸릴 확률은 27%(=356/1319)이다. 14살에 독감 걸릴 확률은 34.7%(=468/1319)이다. 그러므로 나이가 올라가면 독감에 걸릴 가능성이 높아진다.

chapter 4. 모평균 추론

1. 일집단 모비율

연구문제 및 통계적 가설

타이타닉호 승객들의 평균 연령이 30세 미만이었는지를 알아보고자 한다.

  • 귀무가설: \(H_{0}:\mu = 30( = \mu_{0})\), 여기서 \(\mu\)는 승객 평균 나이

  • 대립가설: \(H_{1}:\mu < 30( = \mu_{0})\) (단측가설)

  • 모수: \(\theta = \mu\), 보조 ancillary 모수 \(\sigma^{2}\)는 MVUE(\(\widehat{\sigma^{2}} = S^{2}\))로 대체한 후 모수 \(\theta\)에 대한 추론을 한다.

시각화

(1) 히스토그램

히스토그램은 연속형(측정형) 변수의 분포 특성을 시각적으로 표현하는 대표적인 그래프로, 수평축(x-축)은 데이터의 구간(계급), 수직축(y-축)은 해당 구간에 속하는 도수 또는 상대도수를 나타낸다. 이는 범주형 자료에 사용하는 막대그래프와 유사하나, 구간 간 간격이 균등하며, 데이터의 수치적 분포를 반영한다는 점에서 차이를 갖는다.

데이터는 먼저 오름차순으로 정렬한 후, 최소값과 최대값을 기준으로 전체 범위를 결정한다. 그 다음, 계급의 개수(또는 bin의 수)를 정하고, 이 범위를 균등하게 나누어 계급 구간을 구성한다. 계급의 수는 일반적으로 8개에서 12개 사이가 적절하며, 표본의 크기를 \(n\)이라 할 때 적절한 계급 수 \(k\)는 다음과 같은 Sturges의 공식으로도 근사할 수 있다. \(k = 1 + 3.322\log_{10}(n)\)

각 계급 구간 내에 포함된 데이터의 수 또는 상대빈도를 계산하고, 이를 막대의 높이로 표현하면 히스토그램이 완성된다. 이때 구간 폭은 가능한 해석의 의미를 갖도록 정수 단위로 조정하는 것이 바람직하다.

1. 분포의 모양 (Shape) - 왜도

  • 대칭 분포: 종 모양이거나 좌우 대칭 → 예: 정규분포

  • 우측(+) 치우침: 긴 오른쪽 꼬리, 예: 소득, 주가

  • 좌측(−) 치우침: 긴 왼쪽 꼬리, 예: 소득에서 기본 소득 미만 많음

  • 이첨성(Bimodal) 또는 다첨성(Multimodal): 두 개 이상의 중심이 있는 분포 → 이질적 모집단 가능성 예: 남녀 혼합 신장 데이터

2. 중심위치 (Center)

  • 최빈값(mode) 위치에서 가장 높은 막대

  • 평균이나 중앙값의 대략적 위치를 가늠

3. 산포도 (Spread) - 첨도

  • 분포의 넓이로 데이터의 변동성이나 표준편차의 정도를 직관적으로 판단

  • 고첨도 (Leptokurtic): 뾰족하고 꼬리가 두꺼움, 극단값 자주 발생 (수익률, 사고율)

  • 평첨도 (Platykurtic): 평평하고 꼬리가 짧음, 시험점수, 설문척도

4. 이상값(Outliers)의 존재 가능성

  • 분포의 양쪽 끝에 고립된 막대가 있을 경우, 극단치 존재 가능성 있음

  • 상자수염 그림을 병행하여 이상값 여부를 정밀 진단할 수 있음

상자 그림은 연속형 자료의 분포를 시각적으로 요약하는 대표적인 탐색적 자료 분석 도구로, 데이터의 중심 경향과 산포도, 분포의 비대칭성, 이상치의 존재 여부를 직관적으로 파악할 수 있다. 다음의 다섯 가지 핵심 통계량을 기반으로 구성된다.

최소값 (minimum), 제1사분위수 (Q₁, 25th percentile), 중앙값 (median, Q₂), 제3사분위수 (Q₃, 75th percentile), 최대값 (maximum)

  • \(IQR = Q_{3} - Q_{1}\): 사분위 범위(Interquartile Range)로,데이터의 중심 50%가 분포하는 구간이다.

    상자는 Q₁부터 Q₃까지를 연결하여 그리며, 이 구간은 전체 데이터의 중간 50%를 나타낸다.

    상자 내에 중앙값을 수직선으로 표시한다.

    중위값이 상자의 한쪽으로 치우쳐 있다면 비대칭 분포를 의미한다 (예: 오른쪽 치우침일 경우\(Q_{3} - MD > MD - Q_{1}\)).

    수염(whisker): 다음의 범위 내에 있는 최소값과 최대값을 가리킨다:

  • \(\lbrack Q_{1} - 1.5 \times IQR,Q_{3} + 1.5 \times IQR\rbrack\): 수염 밖에 존재하는 관측값은 이상치(outlier)로 간주되며, 보통 별표(*) 혹은 점(·)으로 표시한다.

    극단적인 이상치를 검출할 경우, \(3 \times IQR\)을 기준으로 하기도 한다.

(2) 커널추정

확률표본 데이터를 모집단으로 유한개의 데이터 표본을 이용하여 모집단 확률분포함수를 평활법에 의해 구한다. 신호처리에서는 Parzen–Rosenblatt window 방법이라고 한다. KDE kernel density estimator는 커널 함수를 이용하여 히스토그램 폴리곤 방법을 보다 스무드한 곡선으로 연결하여 추정하는 방법이다.

커널함수 \(\int_{- \infty}^{\infty}K(x)dx = 1\)는 양의실수 적분가능한 좌우 대칭인 함수이며 Gaussian, Epanechnikov 등이 유명한 커널 함수이다. 확률분포함수 \(f(x)\)로 부터 확률표본 데이터 \(x_{1},x_{2},\cdots,x_{n}\)가 주어진 경우 커널추정량은 \(\widehat{f(x)} = \frac{1}{nh}\overset{n}{\sum_{i = 1}}K(\frac{x - x_{i}}{h})\)이다. \(K()\)는 커널함수이고 \(h\)는 bandwith 모수이다. \(h\)가 크면 완만한 형태가 되고 작으면 뾰족한 형태이다.

  • 최적 \(h = (\frac{4{\widehat{\sigma}}^{5}}{3n})^{\frac{1}{5}} \approx 1.06\widehat{\sigma}n^{- 0.2}\)

  • 만약 좌우로 치우친 분포의 경우\(\widehat{\sigma} = min(sd,IQR/1,34)\)

이상치 진단되면 제거하고 추정하자. 상자그림을 보면 우측 꼬리에 많은 관측치가 이상치로 진단되었다.

#이상치 제거
# age 변수의 이상치 기준 계산 (IQR)
q1 = titanic['age'].quantile(0.25)
q3 = titanic['age'].quantile(0.75)
iqr = q3 - q1

# 이상치 경계
lower_bound = q1 - 1.5 * iqr
upper_bound = q3 + 1.5 * iqr

# 이상치 제외한 데이터프레임 생성
titanic0 = titanic[(titanic['age'] >= lower_bound) & (titanic['age'] <= upper_bound)]

# 결과 확인
print(f"원래 데이터 수: {titanic.shape[0]}")
print(f"이상치 제거 후 데이터 수: {titanic0.shape[0]}")

원래 데이터 수: 891
이상치 제거 후 데이터 수: 703

MVUE 및 샘플링분포

모평균 \(\mu\)의 MVUE 추정치는 표본평균 \(\overline{x} = \sum x_{i}/n = 29.1\)

보조모수 \(\sigma^{2}\) MVUE: \(\widehat{\sigma^{2}} = s^{2} = \frac{\sum(x_{i} - \overline{x})^{2}}{n - 1}\)

샘플링분포

  • (대표본 \(n > 20\)) 중심극한정리에 의해 \(\overline{x} \sim N(\mu,\sigma^{2}/n)\)이다.

  • (소표본) 모집단 확률분포 정규분포라는 가정 하에 \(\frac{\overline{x} - \mu}{\frac{s}{\sqrt{n}}} \sim t(n - 1)\)이다.

검정통계량 및 \(p\)값 계산, 그리고 신뢰구간

from scipy.stats import ttest_1samp
import seaborn as sns

# 이상치 제거된 titanic0 사용
age_clean = titanic0['age'].dropna()  # 결측값 제거

# 단일 평균에 대한 t-검정
t_stat, p_val = ttest_1samp(age_clean, popmean=30)

# 결과 출력
print(f"표본 크기: {age_clean.shape[0]:.0f}")
print(f"표본 평균: {age_clean.mean():.1f}")
print(f"표본 표준편차: {age_clean.std():.2f}")
print(f"t-통계량: {t_stat:.3f}")
print(f"p-값: {p_val:.4f}")

표본 크기: 703
표본 평균: 29.1
표본 표준편차: 13.73
t-통계량: -1.792
p-값: 0.0735

#모평균 신뢰구간
import scipy.stats as st
# 'confidence' argument added to specify the confidence level
st.t.interval(confidence=0.95, df=len(age_clean)-1, 
              loc=age_clean.mean(), scale=st.sem(age_clean))

(np.float64(28.06), np.float64(30.09))

  • MVUE 표본평균: \(\widehat{\theta} = \overline{x} = 29.1\)

  • \(\overline{x}\)의 표준오차: \(se(\overline{x}) = \frac{s}{\sqrt{n}} = \frac{13.73}{\sqrt{793}}\)

  • (대표본)검정통계량: \(ts = \frac{\overline{x} - \mu_{0}}{se(\overline{x})} = \frac{29.1 - 30}{\frac{13.73}{\sqrt{703}}} = - 1.79\)

  • 유의확률: \(p = P(z > | - 1.79|) = 0.0735\)

  • 모평균 [\(100(1 - \alpha)\%\)신뢰구간]

\[(\overline{x} - t_{1 - \alpha/2;n - 1}\frac{s}{\sqrt{n}},\overline{x} + t_{1 - \alpha/2;n - 1}\frac{s}{\sqrt{n}})\]

결론

타이타닉 승객 평균 나이는 30세 미만인가?
표본평균 표준편차 검정통계량 유의확률
29.1 13.73 -1.792 0.074
숭객 평균 95% 신뢰구간: (28.06, 30.09)

타이타닉 승객의 평균 나이가 30세 미만인지를 검정한 결과, 표본 평균은 29.1세, 표준편차는 13.73으로 나타났으며, 단측 t-검정의 검정통계량은 -1.792, 유의확률은 0.074였다. 일반적으로 사용하는 유의수준 0.05를 기준으로 할 때, 유의확률이 이를 초과하므로 귀무가설을 기각할 수 없으며, 따라서 타이타닉 승객의 평균 나이가 30세 미만이라고 통계적으로 유의하게 말하기는 어렵다.

2. 독립인 두 모집단 평균 차이

연구문제 및 통계적 가설

타이타닉호 승객들의 성별에 따른 나이의 차이가 있는지 알아보고자 한다.

  • 귀무가설: \(H_{0}:\mu_{1} - \mu_{2} = 0\), 여기서 \(\mu_{1}\)은 남자 승객 평균 나이, \(\mu_{2}\)은 여자 승객 평균 나이는 같다.

  • 대립가설: \(H_{1}:\mu_{1} - \mu_{2} \neq 0\) (양측가설) 승객 남녀 평균 나이 차이는 유의하다.

  • 모수: \(\theta = \mu_{1} - \mu_{2}\)

시각화

집단변수(성별)별 관심변수(나이)에 대한 (히스토그램, 상자그림, KDE)로 데이터를 시각화 한다.

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd

# 데이터 불러오기
titanic = sns.load_dataset("titanic")
titanic = titanic[['sex', 'age']].dropna()

# 그래프 그리기
fig, axs = plt.subplots(2, 1, figsize=(10, 8), sharex=True)

# 히스토그램
sns.histplot(data=titanic, x="age", hue="sex", bins=30, ax=axs[0],
             element="step", stat="density", common_norm=False, alpha=0.4)

# KDE 추가
sns.kdeplot(data=titanic, x="age", hue="sex", ax=axs[0], common_norm=False)

axs[0].set_title("age distribution by gender (histogram + KDE)")
axs[0].set_ylabel("density")

# 상자그림
sns.boxplot(data=titanic, x="age", y="sex", ax=axs[1])
axs[1].set_title("age distribution by gender (box plot)")
axs[1].set_xlabel("age")

plt.tight_layout()
plt.show()

MVUE 및 샘플링분포

  • 모평균 \(\mu_{1}\)의 MVUE 추정치: 표본 평균 \(\overline{x} = \frac{\sum x_{i}}{n_{1}} = 27.9\)

  • 모평균 \(\mu_{2}\)의 MVUE 추정치: 표본 평균 \(\overline{y} = \frac{\sum y_{i}}{n_{2}} = 30.7\)

  • 모수의 MVUE: \(\widehat{\theta} = \overline{x} - \overline{y} = - 2.8\)

  • 보조 모수 \(\sigma_{1}^{2},\sigma_{1}^{2}\)

  • 모집단 분산 추정량 \(\widehat{\sigma_{1}^{2}} = \frac{(\sum x_{i} - \overline{x})^{2}}{n_{1} - 1} = s_{1}^{2}\), \(\widehat{\sigma_{2}} = \frac{(\sum y_{i} - \overline{y})^{2}}{n_{2} - 1} = s_{2}^{2}\)

  • 추정 분산 : \(\widehat{V(\overline{x} - \overline{y})} = \frac{\sigma_{1}^{2}}{n_{1}} + \frac{\sigma_{2}^{2}}{n_{2}}\)

  • 등분산 가정 시(통합분산): \(s_{p}^{2} = \frac{(n_{1} - 1)s_{1}^{2} + (n_{2} - 1)s_{2}^{2}}{n_{1} + n_{2} - 2}\)

모평균 검정 시 모분산 동일한지 검정해야 하는 이유

두 독립된 모집단의 평균이 동일하더라도, 분산이 서로 다를 경우 분산이 큰 모집단(예: 모집단 2)에서는 확률적으로 극단값, 즉 왼쪽 또는 오른쪽 꼬리 부분에서 더 많은 표본이 추출될 가능성이 있다. 이로 인해 표본 평균이 왜곡되어(극단값 쪽으로 치우쳐) 실제 모집단 평균을 정확히 반영하지 못할 수 있으며, 검정 통계량 계산에 사용되는 분산 또한 과대 추정될 위험이 있다. 따라서 이러한 분산 차이를 고려한 통계적 방법을 사용하는 것이 중요하다.

등분산성(homoscedasticity): Levenes test

\[H_{0}:\sigma_{1}^{2} = \sigma_{2}^{2}\text{vs.}H_{1}:\sigma_{1}^{2} \neq \sigma_{2}^{2}\]

검정통계량: \(ts = \frac{s_{1}^{2}}{s_{2}^{2}} \sim F(df_{1} = n_{1} - 1,df_{2} = n_{2} - 1)\)

from scipy.stats import levene

# 타이타닉 데이터에서 성별별 나이
df = titanic[['sex', 'age']].dropna()
male_age = df[df['sex'] == 'male']['age']
female_age = df[df['sex'] == 'female']['age']

# 등분산 검정
stat, p = levene(male_age, female_age)
print(f"Levene 검정 통계량: {stat:.3f}, p-값: {p:.4f}")

Levene 검정 통계량: 0.001, p-값: 0.9712

등분산에 대한 귀무가설을 기각할 수 없으므로, 두 집단은 등분산성을 만족한다고 볼 수 있다.

샘플링분포(대표본)

  • 이분산: \(\overline{x} - \overline{y} \sim N(\mu_{1} - \mu_{2},\frac{s_{1}^{2}}{n_{1}} + \frac{s_{2}^{2}}{n_{2}})\)

  • 등분산: \(\overline{x} - \overline{y} \sim N(\mu_{1} - \mu_{2},s_{p}^{2}(\frac{1}{n_{1}} + \frac{1}{n_{2}}))\)

샘플링분포(소표본) 정규분포 가정

  • 이분산: \(t = \frac{{\overline{X}}_{1} - {\overline{X}}_{2}}{\sqrt{\frac{s_{1}^{2}}{n_{1}} + \frac{s_{2}^{2}}{n_{2}}}} \sim t(df^{*})\) , Welch–Satterthwaite\(df^{*} = \frac{\left( \frac{s_{1}^{2}}{n_{1}} + \frac{s_{2}^{2}}{n_{2}} \right)^{2}}{\frac{(s_{1}^{2}/n_{1})^{2}}{n_{1} - 1} + \frac{(s_{2}^{2}/n_{2})^{2}}{n_{2} - 1}}\)

  • 등분산: \(\frac{{\overline{X}}_{1} - {\overline{X}}_{2}}{s_{p} \cdot \sqrt{\frac{1}{n_{1}} + \frac{1}{n_{2}}}} \sim t(df = n_{1} + n_{2} - 2)\)

검정통계량 및 \(p\)값 계산, 그리고 신뢰구간

등분산 시

  • 검정통계량: \(ts = {\overline{X}}_{1} - {\overline{X}}_{2}/s_{p} \cdot \sqrt{\frac{1}{n_{1}} + \frac{1}{n_{2}}}\)

  • 유의확률: \(p = P(t_{(n_{1} + n_{2} - 2)} > |ts|)\)

이분산 시

  • 검정통계량: \(ts = {\overline{X}}_{1} - {\overline{X}}_{2}/\sqrt{\frac{s_{1}^{2}}{n_{1}} + \frac{s_{2}^{2}}{n_{2}}}\)

  • 유의확률: \(p = P(t_{(df^{*})} > |ts|)\)

\[(\overline{x} - \overline{y}) \pm t(\alpha/2,n + m - 2)\sqrt{\frac{s_{x}^{2}}{n} + \frac{s_{y}^{2}}{m}}\]

import seaborn as sns
import pandas as pd
from scipy.stats import ttest_ind

# 데이터 불러오기
titanic = sns.load_dataset("titanic")
df = titanic[['sex', 'age']].dropna()

# 성별에 따른 나이의 평균 및 표준편차
summary = df.groupby('sex')['age'].agg(['mean', 'std']).rename(columns={'mean': '평균 나이', 'std': '표준편차'})

# 소수점 2자리로 출력
summary = summary.round(2)
print(summary)

#승객 나이 평균, 표준편차
print(df['age'].mean(),df['age'].std())

# 성별 그룹 분리
male_age = df[df['sex'] == 'male']['age']
female_age = df[df['sex'] == 'female']['age']

# 독립표본 t-검정 (등분산 가정 X)
t_stat, p_value = ttest_ind(male_age, female_age, equal_var=False)

print(f"t-통계량: {t_stat:.3f}")
print(f"p-값: {p_value:.4f}")

평균 나이 표준편차
female 27.92 14.11
male 30.73 14.68
29.69911764705882 14.526497332334044
t-통계량: 2.526
p-값: 0.0118

결론

여성 승객과 남성 승객 평균 나이는 차이가 있나?
집단 평균 표준편차 검정통계량 유의확률
여성 27.9 14.1 2.53 0.012
남성 30.7 14.7
총합 29.7 14.5

귀무가설이 기각되어, 여성 승객의 평균 나이 27.9세와 남성 승객의 평균 나이 30.7세 사이에는 통계적으로 유의한 차이가 있는 것으로 나타났다.

남자 승객 나이 이상치 제거 후 분석

여성 승객과 남성 승객 평균 나이는 차이가 있나?
집단 평균 표준편차 검정통계량 유의확률
여성 27.9 14.1 1.977 0.049
남성 30.1 13.8
총합 29.3 13.96
import seaborn as sns
import pandas as pd
from scipy.stats import ttest_ind
# 1. 데이터 불러오기 및 결측 제거
titanic = sns.load_dataset("titanic")
df = titanic[['sex', 'age']].dropna()
# 2. 남성 나이 이상치 제거 (IQR 방식)
male = df[df['sex'] == 'male']['age']
Q1 = male.quantile(0.25)
Q3 = male.quantile(0.75)
IQR = Q3 - Q1
lower = Q1 - 1.5 * IQR
upper = Q3 + 1.5 * IQR
male_clean = male[(male >= lower) & (male <= upper)]
# 3. 여성 나이
female = df[df['sex'] == 'female']['age']
# 4. 통합 데이터 (여성 + 이상치 제거된 남성)
combined = pd.concat([female, male_clean], axis=0)
# 5. 평균 및 표준편차 요약표
summary = pd.DataFrame({'평균 나이': [female.mean(),male_clean.mean(),combined.mean()],
    '표준편차': [female.std(),male_clean.std(),combined.std()],
    '표본 수': [len(female),len(male_clean),len(combined)]
}, index=['female', 'male(이상치제외)', '통합']).round(2)

print("📊 성별 및 통합 평균 나이와 표준편차:")
print(summary)

# 6. 독립표본 t-검정 (등분산 가정 X)
t_stat, p_val = ttest_ind(male_clean, female, equal_var=False)

print("\n🧪 평균 차이 검정 (Welch's t-test):")
print(f"t-통계량: {t_stat:.3f}")
print(f"p-값: {p_val:.4f}")

📊 성별 및 통합 평균 나이와 표준편차:
평균 나이 표준편차 표본 수
female 27.92 14.11 261
male(이상치제외) 30.07 13.82 446
통합 29.28 13.96 707
🧪 평균 차이 검정 (Welch’s t-test):
t-통계량: 1.977
p-값: 0.0486

3. 짝진 두 모집단 평균 차이

개념

짝진 집단의 평균 차이 검정은 동일하거나 연관된 실험 단위로부터 두 번 측정된 자료(예: 처리 전·후 측정값)에 대해, 두 처리 간 평균 차이에 통계적으로 유의한 차이가 있는지를 검정하는 절차이다. 이는 일반적인 독립표본 간 평균 비교와 달리, 측정값 간 짝이 지어져 있다는 점에서 통계적 종속성이 존재하며, 이로 인해 보다 정밀한 비교가 가능해진다.

짝진 집단 평균 차이 검정은 동일한 실험 단위를 두 번 측정하거나, 서로 밀접한 관련이 있는 두 개체 간 비교 상황에서 주로 사용된다. 대표적인 예로는 동일한 피험자에게 어떤 처치를 가하기 전과 후에 측정한 결과를 비교하는 경우가 있으며, 이는 약물 복용 전후의 혈압 변화와 같은 사례로 설명할 수 있다.

또한, 한 피험자의 좌우 혹은 상하 신체 부위처럼 구조적으로 연결된 부위 간 비교에서도 짝진 구조가 성립한다. 예를 들어, 같은 사람의 왼팔과 오른팔 근력을 비교하거나 좌·우 시력의 차이를 분석할 때가 이에 해당한다.

짝지어진 두 표본 간의 평균 차이를 비교하는 것은, 그 차이값들의 평균이 0인지 검정하는 것과 완전히 동일하다.

짝진 표본 평균 차이 검정은 본질적으로 단일 집단 평균이 0인지 검정하는 것과 같은 구조를 가진다. 예를 들어, 같은 환자의 치료 전과 후 혈압을 비교하거나, 유전적으로 일치하는 쌍둥이의 특정 특성을 비교하는 경우가 이에 해당한다.각 짝\((x_{i},y_{i})\)마다 두 값의 차이를 계산하면, 새로운 변수인 차이값\(d_{i} = (x_{i} - y_{i})\)“의 집합이 형성된다.

이제 분석의 초점은 각 쌍의 차이값이 평균적으로 0인지 여부를 확인하는 데 있다. 즉, 원래의 두 변수를 비교하는 문제가 아니라, 차이값의 평균이 0인지에 대한 단일 집단 평균 검정(one-sample t-test) 문제가 되는 것이다. 이렇게 보면, 짝진 평균 차이 검정은 단지 두 집단 평균의 차이를 보는 것이 아니라, 차이라는 하나의 변수에 대한 평균 검정 문제로 변환된다는 점에서, 단일 집단의 평균이 어떤 값(보통 0)과 다른지를 검정하는 문제와 구조적으로 동일하다고 할 수 있다.

chapter 5. 모분산 추론

1. 일집단 모분산

연구문제 및 통계적 가설

분산은 통계학에서 관측값이 평균으로부터 얼마나 퍼져 있는지를 나타내는 지표로, 매우 기본적이면서도 핵심적인 개념이다. 이 분산이라는 개념은 분야에 따라 서로 다른 이름과 의미로 해석된다. 특히 금융 분야와 품질 관리 분야에서는 전혀 다른 철학과 시각에서 분산을 바라본다.

투자에서의 수익률은 불확실하며, 이 불확실성의 크기를 정량화한 것이 바로 변동성(volatility)이다. 통계적으로 변동성은 수익률의 분산 또는 표준편차로 측정된다. 수익률의 분산이 클수록, 즉 수익이 평균에서 크게 벗어날 가능성이 클수록 투자자는 더 많은 위험을 감수하게 된다. 따라서 투자 분야에서는 분산이 클수록 리스크가 크다, 다시 말해 예측이 어렵고 손실 가능성도 크다고 해석한다. 이 경우, 분산은 부정적인 신호이며, 분산이 작을수록 더 안정적인 투자 자산으로 간주된다.

반면, 제조나 공정 품질 관리 분야에서는 일관성과 정밀성이 품질의 핵심이다. 여기서도 분산은 중심값(목표 사양값)으로부터의 퍼짐 정도를 나타내며, 작은 분산은 제품이 일관되게 생산되고 있다는 신호로 받아들여진다. 따라서 품질 분야에서는 분산이 클수록 공정이 불안정하거나 품질이 나쁘다고 판단하며, “품질은 분산의 역수”라는 표현이 널리 사용된다. 즉, 분산이 작을수록 품질이 높다고 보는 것이다.

  • 귀무가설: \(H_{0}:\sigma^{2} = \sigma_{0}^{2}\)

  • 대립가설: \(H_{1}:\sigma^{2} \neq \sigma_{0}^{2}\)

시각화

모분산(또는 표준편차)에 대한 검정은 데이터의 퍼짐 정도, 즉 흩어짐의 크기를 평가하는 데 목적이 있다. 하지만 분산이라는 수치는 단순히 하나의 숫자이기 때문에, 그 분산이 실제로 데이터에 어떻게 드러나 있는지를 직관적으로 이해하려면 시각화가 반드시 필요하다.

이때 사용할 수 있는 시각화 도구는 히스토그램과 상자그림이다. 이 두 도구는 모평균 분석에서도 사용되는 시각화 방법이지만, 데이터의 분산이나 변동성 판단에도 매우 효과적인 도구다.

히스토그램과 분산

히스토그램은 데이터의 전체 분포 형태를 보여준다. 평균은 히스토그램의 중심이 어디에 있는지를 말해주지만, 분산은 그 히스토그램이 얼마나 좌우로 넓게 퍼져 있는지를 반영한다.

  • 히스토그램이 넓고 평평하게 퍼져 있다면 → 분산이 크다.

  • 히스토그램이 뾰족하고 좁게 몰려 있다면 → 분산이 작다.

상자그림과 분산

상자그림은 데이터의 중심, 범위, 사분위수, 이상치 등을 요약해서 보여주는 도구로, 특히 데이터의 퍼짐 정도를 시각적으로 파악하기에 매우 유용하다.

  • 사분위범위(제3사분위수 - 제1사분위수)가 넓을수록 → 분산이 클 가능성이 크다

  • 수염의 길이, 이상치의 분포도 분산의 크기와 관련된 정보를 제공한다

MVUE 및 샘플링분포

  • MVUE : \(\widehat{\sigma^{2}} = s^{2} = \frac{\sum(x_{i} - \overline{x})^{2}}{n - 1}\)

  • 샘플링분포: \((n - 1)\frac{s^{2}}{\sigma^{2}} \sim \chi^{2}(n - 1)\), 모집단 정규분포 가정이 필요함

검정통계량 및 \(p\)값 계산

  • 검정통계량: \(ts = (n - 1)\frac{s^{2}}{\sigma_{0}^{2}}\)

  • 유의확률: \(p = P(\chi_{(df = n - 1)}^{2} > ts)\)

사례

한 자산운용사는 단기 투자용 펀드의 월간 수익률이 안정적인 수준을 유지하고 있는지 점검하고자 한다. 이 펀드는 월간 수익률의 표준편차가 4% 이하여야 한다”는 내부 리스크 관리 기준을 갖고 있다.

펀드운용팀은 최근 24개월 동안의 수익률 데이터(\(n = 24,s^{2} = {0.05}^{2}\))를 수집한 뒤, 실제 수익률 변동성이 이 기준보다 통계적으로 유의하게 크지 않은지 검정하고자 한다.

  • 귀무가설: \(H_{0}:\sigma^{2} = \sigma_{0}^{2} = {0.04}^{2}\)

  • 대립가설: \(H_{1}:\sigma^{2} \neq \sigma_{0}^{2} = {0.04}^{2}\)

  • 검정통계량: \(ts = (n - 1)\frac{s^{2}}{\sigma_{0}^{2}} = (24 - 1)\frac{{0.05}^{2}}{{0.04}^{2}} \approx 35.9\)

  • 유의확률: \(p = P(\chi_{(df = n - 1)}^{2} > 35.9) < 0.001\)

결론: 귀무가설이 기각되어 펀드의 수익률 표준편차가 4%라는 내부 기준을 초과하는 것으로 나타나며, 이는 투자자 보호 및 리스크 관리 차원에서 제도적 개입이 필요함을 시사한다.

2. 독립인 두 모집단 분산 차이

개념

서로 다른 두 개의 자산이 있을 때, 단순히 평균 수익률만 비교하는 것은 투자 전략 수립에 불충분할 수 있다. 특히, 두 자산의 수익률이 독립적으로 관측된 경우, 이들 사이의 분산 차이가 유의미한지를 검정함으로써, 어떤 자산이 더 불안정하고 위험한가를 평가할 수 있다.

  • 귀무가설: \(H_{0}:\sigma_{1}^{2} = \sigma_{2}^{2}\)

  • 대립가설: \(H_{1}:\sigma_{1}^{2} \neq \sigma_{2}^{2}\)

  • 모수: \(\theta = \frac{\sigma_{1}^{2}}{\sigma_{2}^{2}}\)

MVUE 및 샘플링분포

  • MVUE : \(\widehat{\theta} = \frac{s_{1}^{2}}{s_{2}^{2}}\)

  • 샘플링분포: \(\frac{s_{1}^{2}}{s_{2}^{2}} \sim F(df_{1} = n_{1} - 1,df_{2} = n_{2} - 1)\), 두 모집단 각각 정규분포 가정이 필요함

검정통계량 및 \(p\)값 계산

  • 검정통계량: \(ts = \frac{max(s_{1}^{2},s_{2}^{2})}{min(s_{1}^{2},s_{2}^{2})}\)

  • 유의확률: \(p = P(F > ts)\)

사례

한 투자자는 기술주 중심의 자산 A와 에너지주 중심의 자산 B를 포트폴리오에 포함시키는 것을 고려하고 있다. 그는 두 자산의 월간 수익률을 지난 36개월 동안 수집하였으며, 각각의 수익률 평균은 유사하다고 판단하고 있다. 하지만, 수익률의 평균이 같더라도, 변동성(위험)의 차이는 투자 전략에 큰 영향을 미칠 수 있으므로, 두 자산의 수익률 분산(변동성)이 통계적으로 같은지 여부를 판단하고자 한다.

가설 설정

  • 귀무가설: 자산 A와 B의 수익률 분산은 같다. \(H_{0}:\sigma_{A}^{2} = \sigma_{B}^{2}\)

  • 대립가설: 자산 A와 B의 수익률 분산은 다르다. \(H_{0}:\sigma_{A}^{2} \neq \sigma_{B}^{2}\)

자산 A: 표본 표준편차 = 0.058 → 분산 = 0.003364

자산 B: 표본 표준편차 = 0.039 → 분산 = 0.001521

\[F = \frac{0.003364}{0.001521} \approx 2.211\]\[\sim F_{(36 - 1),(26 - 1)}\]

유의확률 0.031이므로 귀무가설을 기각되어 두 자산의 투자 변동성은 통계적으로 유의하게 다르다고 판단한다.