평균의 신뢰구간
평균의 오차범위
- 표본평균으로 모집단평균을 추정할 때, 95% 신뢰수준의 오차범위는 다음 식으로 근사
- s: 개별 관측값이 얼마나 흩어져 있는지를 나타내는 표본표준편차
- n: 표본에 포함된 관측값의 수
- s/n: 표본평균의 표준오차 추정치
- 같은 모집단에서 크기가 같은 표본을 반복해서 뽑을 때 표본평균이 흔들리는 정도
- 개별 값의 표준편차 s와 평균의 표준오차 s/n는 서로 다른 값
- 독립적인 관측값 n개의 평균은 개별 값의 분산보다 분산이 1/n로 감소
- 표준편차는 분산의 제곱근이므로 평균의 표준편차는 개별 값의 표준편차를 n으로 나눈 값
- 1.96: 표준정규분포의 가운데 약 95%가 −1.96과 1.96 사이에 포함된다는 데서 나온 값
- 따라서 표본평균 xˉ를 중심으로 표준오차의 1.96배를 양쪽으로 더하고 빼서 신뢰구간 구성
- 같은 표준편차에서는 표본 크기가 클수록 오차범위 감소
- 같은 표본 크기에서는 표준편차가 클수록 오차범위 증가
- 적용 조건: 관측값을 독립적으로 무작위 추출하고, 표본평균의 표집분포를 정규분포로 근사할 수 있는 상황
- 모집단표준편차 σ를 알면 s 대신 σ 사용
- 정규모집단에서 σ를 모르고 s로 추정하는 경우에는 t분포의 임계값 사용
- 표본이 크면 t분포의 95% 임계값이 1.96에 가까워지므로 위의 식으로 근사
실습 준비
패키지를 설치
pip install pandas seaborn matplotlib pingouin statsmodels openpyxl
실습 파일을 불러오기
import pandas as pd
df = pd.read_excel("ship.xlsx")
평균의 신뢰구간
🤖 AI 프롬프트
ship.xlsx를 열어서 pingouin을 이용해 speed 평균의 95%, 99% 신뢰구간을 구하고 평균±오차범위 형태로 나타내줘.
- 평균, 중앙값, 비율 등 다양한 모수에 대해 신뢰구간을 구할 수 있음
- 평균의 경우에는 이론적으로 신뢰구간을 비교적 간단히 구할 수 있음
pingouin의ttest결과에서CI95는 평균의 95% 신뢰구간을 의미
import pingouin as pg
mean = df.speed.mean()
mean
실행 결과
np.float64(18.305999999999997)
pg.ttest(df.speed, 0, confidence=0.95)
실행 결과
T dof alternative p_val CI95 cohen_d \
T_test 46.579676 99 two-sided 3.853150e-69 [17.53, 19.09] 4.657968
power BF10
T_test 1.0 2.609e+65
- 선박의 표본평균 속도는 약 18.306
CI95는[17.53, 19.09]이므로 모집단의 평균 속도를 17.53에서 19.09 사이로 추정- 같은 방식으로 표집과 신뢰구간 계산을 반복하면 만들어진 구간의 약 95%가 실제 평균 속도를 포함함
평균±오차범위로 표기
- 신뢰구간은 평균을 중심으로 양쪽에 오차범위만큼 떨어진 구간
- 오차범위 = (상한 - 하한) / 2
lower, upper = pg.ttest(df.speed, 0, confidence=0.95)["CI95"].iloc[0]
margin = (upper - lower) / 2 # 구간 폭의 절반이 오차범위
print(f"{mean:.2f} ± {margin:.2f}")
실행 결과
18.31 ± 0.78
- 95% 신뢰수준에서 평균 속도는 18.31 ± 0.78
99% 신뢰수준
confidence=0.99로 지정하면 99% 신뢰구간을 계산. 결과의 열 이름은CI99
pg.ttest(df.speed, 0, confidence=0.99)
실행 결과
T dof alternative p_val \
T_test 46.579676 99 two-sided 3.853150e-69
CI99 cohen_d power BF10
T_test [17.273812090856765, 19.338187909143226] 4.657968 1.0 2.609e+65
lower, upper = pg.ttest(df.speed, 0, confidence=0.99)["CI99"].iloc[0]
margin = (upper - lower) / 2
print(f"{mean:.2f} ± {margin:.2f}")
실행 결과
18.31 ± 1.03
- 99% 신뢰수준에서 평균 속도는 18.31 ± 1.03. 구간은 약 17.27에서 19.34
- 신뢰수준을 95%에서 99%로 높이면 오차범위가 0.78에서 1.03으로 넓어짐
표본 크기를 절반으로 줄이면
- 선박 100척 중 50척만 무작위로 뽑아 95% 신뢰구간을 다시 계산
half = df.sample(frac=0.5, random_state=0) # 100척 중 50척을 무작위로 선택
lower, upper = pg.ttest(half.speed, 0, confidence=0.95)["CI95"].iloc[0]
margin = (upper - lower) / 2
print(f"{half.speed.mean():.2f} ± {margin:.2f}")
실행 결과
17.97 ± 1.09
- 같은 95% 신뢰수준에서 오차범위가 0.78(100척)에서 1.09(50척)로 넓어짐
- 오차범위는 n에 반비례하므로 표본 크기가 절반이면 약 2≈1.41배. 0.78×1.41≈1.10
- 표본평균도 18.31에서 17.97로 달라짐. 어떤 선박이 뽑히느냐에 따라 생기는 표집 오차
퀴즈
평균의 95% 신뢰구간 xˉ±1.96ns에서 s/n이 나타내는 것은?
퀴즈를 풀려면 대화형 기능을 불러와야 합니다.