통계학 기초_독립표본 T-검정, Type of Error, 카이제곱검정_One sample 카이검정, Two sample 카이검정,  ANOVA분석
DataScience/통계-선형대수

통계학 기초_독립표본 T-검정, Type of Error, 카이제곱검정_One sample 카이검정, Two sample 카이검정, ANOVA분석

728x90

 

◎ T-검정이란?

T- 검정은 모집단의분산이나표준편차를 알지 못할 때, 표본으로부터 추정된 분산이나 표준편차를 이용하여 두 모집단의 평균의 차이를 알아보는 검정 방법이다. 집단의 수는 최대 2개까지 비교 가능하며 3개 이상인 경우 분산분석(ANOVA)를 사용한다.

▷ T-검정의 가정

1)종속변수가 양적 변수일 때
2)모집단의 분산이나 표준편차를 알지 못할 때
3)모집단의 분포가 정규분포일 때

- 가정

1)독립성: 독립변수의 그룹 군은 서로 독립적 이여야 한다.
2)정규성: 독립변수에 따른 종속변수는 정규분포를 만족해야한다.
3)등분산성: 독립변수에 따른 종속변수 분포의 분산은 각 군마다 동일하다.

즉 t-test는특정한 조건에서그룹의 평균을 비교하기 위한 가설검정 방법이라는 것 입니다.


◎ Type of Error

- Type 1 error : 실제로는 귀무가설을 기각하지 않는데 귀무가설을 기각하는 경우

- Type 2 error : 실제로는 귀무가설을 기각하는데 귀무가설을 기각하지 않는다고 하는 경우


◎ χ2 Tests(카이제곱검정)

▷ One Sample χ2 test

주어진 데이터가 특정 예상되는 분포와 동일한 분포를 나타내는지 에 대한 가설검정.

Goodness of Fit test라 부르기도 합니다.

One sample 카이검정

χ2통계치 의 계산식

- Scipy 모듈 사용

데이터 1 = [18, 22, 20, 15, 23, 22]

데이터 2 = [5, 23, 26, 19, 24, 23]

주어진 데이터가 특정 예상되는 분포(입력이 없으면 평균으로 계산)를 나타내는지에 대한 가설검정

# 데이터 1
import numpy as np
from scipy.stats import chisquare  

s_obs = np.array([[18, 22, 20, 15, 23, 22]]) # Similar
print('--- Similar ---')
chisquare(s_obs, axis=None) # One sample chi-square

<출력>

--- Similar ---

Power_divergenceResult(statistic=2.3000000000000003, pvalue=0.8062668698851285)

-> pvalue값이 0.8로 0.05보다 크기때문에 귀무가설을 채택해서 분포가 같다라고 판단

 

데이터 2
ns_obs = np.array([[5, 23, 26, 19, 24, 23]])

print('--- not Similar ---')
chisquare(ns_obs, axis=None)

<출력>

--- not Similar ---

Power_divergenceResult(statistic=14.8, pvalue=0.011251979028327346)

-> pvalue값이 0.01로 0.05보다 작기때문에 귀무가설을 기각한다. 즉, 분포가 다르다

 

- NumPy 를 사용하여 (Scipy를 사용하지 않고) One Sample χ2 test 방법

import numpy as np

# v1, v2 데이터
v1 = [18,22,20,15,23,22]
v2 = [5,23,26,19,24,23]

def myChisq(value):
    obs = np.array(value)
    exp1 = sum(obs) / len(obs)
    exp = np.array(exp1)
    chi1= (obs-exp)
    chi2 = (chi1**2) / exp
    chi= chi2.sum()  # chisquare 값
    
    # p-Value값 구하기
    x2 = chi

    pvalue = 1 - stats.chi2.cdf(x2, df = len(obs)-1 )  
    return chi, pvalue

# chisquare값과 pvalue를 출력해야합니다.

myChisq(v1)

myChisq(v2)

<출력>

v1 -> 2.3000000000000003, 0.8062668698851285

귀무가설 기각 X

v2 -> 14.8, 0.011251979028327308

귀무가설 기각 O

▷ Two sample χ2 test

- 두개이상의 변수에 대해서 변수끼리의 차이가 있는지 검정

- 데이터 df

# 데이터 계산하기 쉬운 numpy array로 변환
obs = np.array([[54,577,143,782],[2,735,1437,1],[0,142,44,0]])

# scipy 모듈 사용
from scipy.stats import chi2_contingency

chi2_contingency(obs)

# 출력 정리
chi2_stat, p_val, dof, ex = stats.chi2_contingency(obs)
print("=Chi2 Stat=")
print(chi2_stat)
print("\n")
print("=Degrees of Freedom=")
print(dof)
print("\n")
print("=P-Value=")
print(p_val)
print("\n")
print("=Contingency Table=")
print(ex)

<출력>


◎ ANOVA 분석 (분산분석)

  • 2개 이상 그룹의 평균에 차이가 있는지를 가설 검정할때 사용한다.

다음 4개 그룹에 대해서 평균의 차이가 있는지에 대한 가설 검정을 시행하세요.

A : 38 33 35 92 76 97 88 41 11 9

B : 18 52 62 48 30 40 87 12 97 82

C : 28 90 5 49 66 73 96 80 4 17

D : 8 99 4 12 7 64 18 10 9 20

- 가설

귀무가설 H0 : 4개 그룹에 대해서 평균의 차이가 없다

대립가설 H1 : 4개 그룹에 대해서 평균의 차이가 있다

import scipy.stats as stats
import pandas as pd
import numpy as np
%matplotlib inline

a = [38, 33, 35, 92, 76, 97, 88, 41, 11, 9]
b = [18, 52, 62, 48, 30, 40, 87, 12, 97, 82]
c = [28, 90, 5, 49, 66, 73, 96, 80, 4 ,17]
d = [8, 99, 4, 12, 7, 64, 18, 10, 9, 20]
data = pd.DataFrame(data = {'A' : a, 'B' : b, 'C' : c, 'D' : d})
data

<출력>

F_statistic, pVal = stats.f_oneway(data['A'], data['B'], data['C'],data['D'])
print('데이터의 일원분산분석 결과 : F={0:.1f}, p={1:.5f}'.format(F_statistic, pVal))

<출력>

Altman 910 데이터의 일원분산분석 결과 : F=1.7, p=0.17921

 

p값이 0.17로 0.05보다 크기 때문에 그룹의 평균값이 통계적으로 유의미하게 차이가 없다.


 

728x90