본문 바로가기
통계

[통계학개론] 표본분포(정규분포, 카이제곱분포, t분포, F분포)

by busybee-busylife 2024. 2. 2.
반응형

 

통계 공부한 지 오래되어 <통계학 개론> 책을 하나 사서 쭉 읽었다. 

 

확률분포 vs. 표본분포 개념이 헷갈린다. 

 

통계량(표본의 특성)은 표본분포를 갖는다. 

 

ChatGPT는 확률분포는 모집단, 표본분포는 표본 이라고 하는데

이 책에서 통계량(statistics): 다른 표본이 추출되면 다른 값을 갖게 되는 확률변수로서 확률분포를 가진다 라고 나온다.

ChatGPT가 잘못 설명한 듯 하다. 

 

아래에 온라인 강의로 배운 내용과 함께 정리했다. 

 

정규분포: 평균과 표준편차로 결정된다

 

중심극한정리: 표본의 크기가 커질수록 표본평균의 분포는 모집단의 분포 모양과는 관계없이 정규분포에 가까워진다

 

카이제곱분포

  • 모분산을 구하는 것
  • 분산의 특징을 확률 분포로 만든 것(따라서 마이너스가 없다)
  • 자유도가 높을수록 정규분포에 근접

 

Student-t 분포

  • 모분산을 모르고 표본크기가 30이하인 경우 모평균을 구하는 것
  •  

 

t검정: t분포를 이용한 검정 

  • 표본으로부터 추정된 분산이나 표준편차를 가지고 검정
    • 귀무: 두 모집단의 평균 간의 차이는 없다
    • 대립: 두 모집단의 평균 간에 차이가 있다

  • 독립표본 t-test vs. 대응표본 t-test
    • 독립표본 t-test: 서로 독립인 두 집단 비교
      • e.g. 수동권과 지방의 집값 비교
    • 대응표본 t-test: 동일 그룹에 어떤 처리 전/후를 비교
      • e.g. 대출 규제 시작 전/후의 집값 비교
  • 검정순서 
    • 표본 크기가 30 미만: 정규성 검정
    • 표본 크기가 30 이상: 등분산 검정
      • → 등분산이라면: 등분산 가정 독립표본 t-test
      • → 아니라면: 이분산 가정 독립표본 t-test
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import scipy.stats as stats

house_a = np.random.normal(6, 5, 40)   # 수도권 (평균, 분산, 데이터갯수)
house_b = np.random.normal(3, 5, 40) # 지방


tmp1 = pd.concat([pd.DataFrame(['A']*40), pd.DataFrame(house_a.tolist())], axis=1)
tmp2 = pd.concat([pd.DataFrame(['B']*40), pd.DataFrame(house_b.tolist())], axis=1)
# tolist(): array -> list로 변경 
# pd.DataFrame(house_b.tolist()): list로 변경한 후 이를 DataFrame 포맷으로 
# axis=1: concat 할 때, 옆으로 붙인다

df = pd.concat([tmp1, tmp2], axis=0)

df.columns = ['grp', 'value']  # 그룹명 붙여준다

sns.boxplot(x='grp', y='value', data=df)

 

# 등분산 검정
#>> 귀무가설: 수도권 vs. 지방 집값의 분산이 같다
#>> 대립가설: 수도권 vs. 지방 집값의 분산이 다르다

stats.levene(np.array(df[df['grp'] == 'A']['value']), np.array(df[df['grp'] == 'B']['value']))
# levene 검정으로 등분산 여부 확인 
#>> LeveneResult(statistic=0.10826930019434791, pvalue=0.7430050515652757)
#>> p-value=0.9 > 0.05: 귀무가설 채택(대립가설 기각). 즉 둘의 분산이 같다




# t-test(t-검정)
#>> 두 개의 독립적인 그룹 간의 평균 비교를 위한 독립표본 t-검정(t-test)을 수행
#>> stats.ttest_ind 함수: 두 그룹 간의 평균 차이가 통계적으로 유의한지를 검정

stats.ttest_ind(np.array(df[df['grp']=='A']['value']),
                np.array(df[df['grp']=='B']['value']),
                equal_var=True)

#>> Ttest_indResult(statistic=3.3017809842701085, pvalue=0.0014510874559529386)

# equal_var=True: 등분산성 유지 
#>> 여기서도 pvalue=0.268 > 0.05 : 귀무가설을 기각할 수 없다 
#>> statistic=-1.114: t-value가 0에 가까울 수록 유의미한 차이가 없다 

#>> 지방 집값 = 3억으로 설정 
#>> pvalue=0.00145
#>> 해석: 수도권과 지방의 집값에 유의한 차이가 존재 

#>> statistic=3.30178
#>> 해석: t-검정 통계량 
#>> 두 그룹 간의 평균 차이가 표준오차에 비해 얼마나 큰지를 나타내는 값
#>> 이 값이 커질수록 두 그룹 간의 차이가 통계적으로 유의하다는 증거

 

 

 

 

F분포

  • 3개 이상의 집단에 대하여 검정할 때
  • 카이제곱분포처럼 분산을 다루지만, 집단간의 분산을 다룬다

반응형