[Python] 통계 분석

Jonie Kwon·2022년 4월 14일
0
post-custom-banner

통계 분석

  • 단일 표본 t검정 : 그룹의 평균이 기준 값과 차이가 있는지를 확인
  • 독립 표본 t검정 : 서로 다른 두 그룹의 데이터 평균 비교
  • 쌍체 표본 t검정 : 특정 실험 및 조치 등의 효과가 유의한지 확인
  • 일원분산분석 : 셋 이상의 그룹 간 차이가 존재하는지 확인
  • 상관분석 : 두 연속형 변수 간에 어떠한 선형 관계를 가지는지 파악
  • 카이제곱검정 : 두 범주형 변수가 독립인지 파악

단일 표본 t검정

그룹의 평균이 기준 값과 차이가 있는지를 확인

  • 영 가설 : H0:xˉ=μ(xˉ:H_0:\bar{x} = \mu (\bar{x}:표본 평균, μ\mu:기준 값))
  • 대립 가설 : H1:xˉ>μ   or   xˉ<μ   or   xˉμH_1:\bar{x} > \mu \ \ \ or\ \ \ \bar{x} < \mu \ \ \ or\ \ \ \bar{x} \ne \mu

단일 표본 t검정의 선행 조건

  • 단일 표본 t검정은 해당 변수가 정규 분포를 따라야 수행할 수 있으므로 Kolmogorov-SmornovShapiro-Wilk를 사용한 정규성 검정이 선행되어야 한다.
  • 샘플 수가 많을 경우에는 대부분 정규분포를 띄기 때문에 샘플 수가 부족한 경우에 검정을 수행하고 정규성을 띄지 않는다고 판단된다면 비모수적 방법인 부호 검정(Sign test)이나 윌콕슨 부호 - 순위 검정을 수행해야 한다.

단일 표본 t검정 통계량

통계량 tt를 t분포 상에 위치시키는 방식으로 pp-valuevalue 계산

                          t=xˉμs/nt = \frac{\bar{x}-\mu}{{s}/{\sqrt{n}}}

xˉ\bar{x}: 표본 평균, μ\mu: 기준 값, nn : 표본 수, ss: 표본 표준편차

  • H1:xˉ>μH_1:\bar{x} > \mu 일 경우,
    tt를 기준으로 오른쪽에 위치해 있는 값이 pp-valuevalue

  • H1:xˉ<μH_1:\bar{x} < \mu 일 경우
    tt를 기준으로 왼쪽에 위치해 있는 값이 pp-valuevalue

  • H1:xˉμH_1:\bar{x} \ne \mu 일 경우
    t-t를 기준으로 왼쪽에 위치해 있는 값이 pp-value/2value/2,
    tt를 기준으로 오른쪽에 위치해 있는 값이 pp-value/2value/2

정규성 검정(Kolmogorov-Smornov Test)

관측한 샘플들이 특정 분포를 따르는지 확인하기 위한 검정 방법

  • 특정 분포를 따른다면 나올 것이라 예상되는 값과 실제 값의 차이가 유의한지 확인하는 방법으로 해당 특정 분포를 정규 분포 'norm'로 설정하여 정규성 검정에도 사용함

scipy.stats를 이용한 단일 표본 t검정

정규성 검정

  • 데이터의 분포가 정규분포를 따르는지 검정
  • pp-valuevalue가 0.05 미만이면 정규분포를 따른다고 볼 수 있음
from scipy.stats import *
kstest(data, 'norm')
>> KstestResult(statistic=1.0, pvalue=0.0)

결과 해석

  • pvalue가 0.05 미만이므로 data는 정규분포를 따른다고 할 수 있다.

단일 표본 t 검정

H0=163,H1163H_0=163, H_1\ne163이라고 할 때, 단일 표본 t검정

ttest_1samp(data, 163)
>> Ttest_1sampResult(statistic=-2.979804412662668, pvalue=0.006510445335847954)

결과 해석

  • pvalue가 0.05미만이므로 H0H_0을 기각할 수 있다.
  • 통계량 statistic가 음수이므로 데이터의 평균이 163 미만임을 알 수 있다. (양수일 경우 평균이 163보다 크게 나타남)

윌콕슨 부호-순위 검정

  • data가 정규분포를 따르지 않을 경우 사용
wilcoxon(data)

단일 표본 t검정과 결과 해석이 같음. 단 popmean은 x의 중위수로 설정됨


독립 표본 t검정

서로 다른 두 그룹의 데이터 평균 비교

  • H0:μa=μb(μaH_0:\mu_a = \mu_b (\mu_a: 그룹 aa의 표본 평균, μb\mu_b: 그룹 bb의 표본 평균))
  • H1:μa>μb   or   μa<μb   or   μaμbH_1:\mu_a > \mu_b \ \ \ or\ \ \ \mu_a < \mu_b \ \ \ or\ \ \ \mu_a \ne \mu_b

독립 표본 t검정 선행 조건

  • 독립성: 두 그룹은 서로 독립적이어야 함
  • 정규성: 데이터는 정규분포를 따라야 함
    정규성을 따르지 않으면 비모수 검정인 Mann-Whitney 검정을 수행
  • 등분산성:두 그룹 데이터에 대한 분산이 같아야 함
    Levene의 등분산 검정: p-value가 0.05 미만이면 분산이 다르다고 판단
    분산이 같은지 다른지에 따라 사용하는 통계량이 달라지므로 설정을 다르게 해주어야 함

scipy.stats를 이용한 독립 표본 t검정

Levene Test

두 그룹의 정규성 검정을 수행한 후 정규분포를 따를 때 두 그룹의 등분산성을 검정

# np.array의 경우
levene(group_A, group_B)
>> leveneResult(statistic=2.033067087400979, pvalue=0.164964086222101)

결과 해석

  • pvalue가 0.05 미만이 아니므로 등분산을 띈다고 할 수 있다.

독립 표본 t검정

  • equal_var: 등분산성 여부
ttest_ind(group_A, group_B, equal_var = True)
>> Ttest_indResult(statistic=2.51285267949464134, pvalue=0.01801095352893967)

결과 해석

  • statistic이 양수이므로 group_A가 group_B 보다 크다는 것을 알 수 있다.
  • pvalue가 0.05 미만이므로 두 그룹간에 차이가 존재한다고 할 수 있다.

쌍체 표본 t검정

  • 특정 실험 및 조치 등의 효과가 유의한지 확인
  • pvalue가 특정 수치 미만이면 그룹 a와 그룹 b간 차이가 존재한다(실험 효과가 있다)고 판단
  • statistics가 양수면 양의 효과, 음수면 음의 효과가 있다고 판단
# 정규성 검정
kstest(after - before, 'norm')
>> KstestResult(statistic=0.7424620196514834, pvalue=7.04108433205159e-29)

# 쌍체표본 t검정
ttest_rel(before, after)
>> Ttest_relResult(statistic=9.70596986565785, pvalue=5.370404098342324e-13)

결과 해석

  • statistic이 양수이고, pvalue가 0.05미만의 아주 작은 숫자이므로 확실한 양의 효과가 있다.
  • 양의 효과라는 것은 before가 after가 크다라는 의미

일원분산분석

셋 이상의 그룹 간 차이가 존재하는지 확인

  • 영 가설과 대립 가설
    H0:μa=μb=μcH_0 : \mu_a = \mu_b = \mu_c (μa(\mu_a:그룹 aa의 표본 평균, μb\mu_b:그룹 bb의 표본 평균, μc\mu_c:그룹 cc의 표본 평균))
    H1:H_1 : 최소한 한 개 그룹에는 차이를 보인다.

일원분산분석의 선행조건

  • 독립성: 두 그룹은 서로 독립적이어야 함
  • 정규성: 데이터는 정규분포를 따라야 함
    정규성을 따르지 않으면 비모수 검정인 Kruskal-Wallis H Test를 수행
  • 등분산성:두 그룹 데이터에 대한 분산이 같아야 함.
    등분산성을 따르지 않으면 Kruskal-Wallis H Test를 수행

scipy.stats을 이용한 일원분산분석

from scipy.stats import *
# 세 그룹 모두 정규 분포를 띄는 것을 확인
kstest(A, 'norm')
kstest(B, 'norm')
kstest(C, 'norm')

f_oneway(A, B, C)
>> F_onewayResult(statistic=178.43825416847133, pvalue=1.6337420285664805e-31

결과 해석

  • pvalue가 0에 수렴: A, B, C의 평균은 유의한 차이가 존재 (어떤 차이인지는 모름 --> 사후 분석 수행)

statemodels를 이용한 사후 분석

from statsmodels.stats.multicomp import pairwise_tukeyhsd
Group = ["A"] * len(A) + ["B"] * len(B) + ["C"] * len(C)
Data = A.tolist() + B.tolist() + C.tolist()

pairwise_tukeyhsd(Data, Group)
>> Multiple	Comparison of Means	-	Tukey HSD,	FWER=0.05
==========================================================
group1	group2	meandiff	p-adj		lower	 upper	reject
    A		B		-1.4	  0.9  	 -10.5745	7.7745	False
    A		C	 62.2333    0.001	  53.0589  71.4078   True
    B		C	 63.6333    0.001	  54.4589  72.8078   True

상관분석

연속형 변수 간에 어떠한 선형 관계를 가지는지 파악

  • 영 가설과 대립 가설
    H0:H_0 : 두 변수 간에는 유의미한 상관성이 존재하지 않는다.
    H1:H_1 :두 변수 간에는 유의미한 상관성이 존재한다.

피어슨 상관 계수

상관 계수가 1에 가까울수록 양의 상관관계가 강하다고 하며, 상관 계수가 -1에 가까울수록 음의 상관관계가 강하다고 한다. 0에 가까울 수록 상관관계가 약하다고 한다.

scipy.stats.pearsonr(x, y)

스피어만 상관 계수

  • 두 변수의 순위 사이의 단조 관련성을 측정하는 상관 계수
scipy.stats.spearmanr(x, y)

카이제곱검정

범주형 변수가 서로 독립적인지 검정
교차 테이블을 통해 시각화

  • 영 가설과 대립 가설
    H0:H_0 : 두 변수가 서로 독립이다.
    H1:H_1 : 두 변수가 종속관계에 있다.

  • 교차 테이블 : > 두 변수가 취할 수 있는 값의 조합의 출현 빈도를 나타냄

scipy.stats을 이용한 카이제곱검정

import pandas as pd
from scipy.state import *

cross_table = pd.crosstab(S1, S2)
obs = cross_table.values

statistics, pvalue, dof, expected = chi2_contingency(obs)

pvalue가 0.05 미만이면 두 변수가 서로 독립이 아님

# 기대값(expected)을 데이터 프레임으로 생성
pd.DataFrame(expected, columns = cross_table.columns, index = cross_table.index)
profile
메모하는 습관
post-custom-banner

0개의 댓글