검정 종류
다음과 같은 가설검정 들 중 모집단의 개수가 3개이상일 때 사용하는 분산분석(ANOVA)분석에 대해서 알아 본다
일원분산분석(one-way ANOVA)
1. 정의 : 종속변인 1개, 독립변인 1개인 상황에서 3개이상의 모집단의 평균이 다른지 검증하는 것
2. 예시
2.1 A,B,C 반은 30명으로 구성되어 있다. 반별 수학점수는 같은가 다른가
귀무가설 : 세 반의 수학점수는 모두 같다. (독립변수 : 반)
대립가설 : 적어도 한 반의 수학점수가 다르다.
2.2 제약회사에서 세 종류의 두통약을 개발했다. 두통약 별 효과의 차이가 있는가?
귀무가설 : 두통약의 효과에 차이가 없다. (독립변수 : 약)
대립가설 : 두통약에 효과가 있는 약이 적어도 하나 있다.
2.3 (3,4,5,6)월에 생산된 티셔츠가 있다. 생산월에 따른 옷의 치수 비교
귀무가설 : 월마다 생산된 티셔츠의 기장에 차이가 없다 (티셔츠 생산 월)
대립가설 : 적어도 하나의 월에 생산된 티셔츠의 기장에 차이가 있다.
3. 코드
3.1 데이터 준비
# url로 데이터 얻어오기
import os
import numpy as np
import pandas as pd
path = '/gdrive/MyDrive/Colab Notebooks/adp/iris.txt'
df = pd.read_csv(path)
df.columns = ["sepalLength","sepalWidth","petalLength","petalWidth","group"]
display(df)
3.2 결과만 나오게
# 결과
from scipy.stats import f_oneway
group1 = df[df["group"]=="setosa"]["sepalLength"]
group2 = df[df["group"]=="versicolor"]["sepalLength"]
group3 = df[df["group"]=="virginica"]["sepalLength"]
display(f_oneway(group1, group2, group3))
3.3 분산분석표 나오게
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm
model = ols('sepalLength ~ C(group)', df).fit() # group을 기준으로, sepallength의 평균차이
anova_lm(model)
이원분산분석(two-way ANOVA)
1. 정의 : 독립변인 2개, 종속변인 1개인 상황에서 (적어도 하나의 독립변인이)3개이상의 모집단의 평균이 다른지 검증하는 것
2. 예시
2.1 (1,2,3)반의 남녀 성별로 학생의 수학점수가 차이가 있는가
귀무가설1 : 1,2,3반 별 학생의 수학점수 차이가 없다.
귀무가설2: 성별 학생의 수학점수 차이가 없다.
귀무가설3: 반과 성별의 상호작용효과가 없다.
3. 코드
3.1 데이터
df = pd.DataFrame({
"class_num" : ["class1","class1","class1","class2","class2","class2","class3","class3","class3","class1","class1","class1","class2","class2","class2","class3","class3","class3"],
"gender" : ["M","M","M","M","M","M","M","M","M","F","F","F","F","F","F","F","F","F"],
"score" : [71,77,78,76,77,78,71,70,69,80,76,80,79,78,77,73,71,70]
})
df
3.2 이원분산분석
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm
model = ols('score ~ C(class_num) * C(gender)', df).fit()
anova_lm(model)
- (class_num의 p-value < 0.5) => class에 따른 유의미한 차이가 존재
- (gender의 p-value > 0.05) => gender에 따른 유의미한 차이가 존재하지 않음
- (class와 gender의 상호작용효과 p-value > 0.05) => 상호작용 효과에 따른 유의미한 차이가 존재하지 않음