🟡이원 분산 분석
가정에서 재배하고 있는 네 가지 토마토 종자(A, B, C, D)에 대해 세 가지 종류의 비료 (11, 12, 13)를
사용하여 재배된 토마토 수를 조사하였다. 종자 및 비료 종류 간의 토마토 수의 차이가 있는지
유의수준 0.05하에서 검정하시오. (단, 정규성, 등분산성에 만족한 데이터)
- 종자 (주 효과)
- 귀무가설(H0): 종자 간의 토마토 수에 차이가 없다.
- 대립가설(H1): 적어도 하나의 종자에서 토마토 수에 차이가 있다.
- 비료 (주 효과)
- 귀무가설(H0): 비료 종류 간의 토마토 수에 차이가 없다.
- 대립가설(H1): 적어도 하나의 비료 종류에서 토마토 수에 차이가 있다.
- 상호작용 효과:
- 귀무가설(H0): 종자와 비료 간의 상호작용은 토마토 수에 영향을 미치지 않는다.
- 대립가설(H1): 종자와 비료 간의 상호작용은 토마토 수에 영향을 미친다.
🟡 이번에도 가상의 데이터를 구축했습니다.
import pandas as pd
df = pd.read_csv("https://raw.githubusercontent.com/lovedlim/inf/main/p3/tomato.csv")
# df = pd.read_csv("tomato.csv")
print(df.head())
print(df.shape)
🟡 이원 분산 분석은 anova로 확인할 수 있고 ols로
가져오려고합니다.
# anova 테이블
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm
model = ols('토마토수 ~ C(종자) + C(비료) + C(종자):C(비료)', data=df).fit()
anova_lm(model)
여기서 statsmodels.stats.anova import anova_lm 은 암기해야합니다~
여기서는 상호작용 효과까지 들어가니 종자:비료 를 함께 기재해주어야합니다.
범주형 데이터가 있기때문에 C로 모두 감싸줍니다. 그냥 다 감싸는게 안전할것같아요
그리고 종속변수는 C를 감싸지 않습니다. 이 점 주의해주세요.
지금은 회귀분석을 하고있고 종속변수는 수치형 변수니 굳이 C로 감쌀 이유가 없죠.
🟡 우리가 봐야할건 PR을 봐야하는데 자연(e)가있으니 표기법을 해줍니다.
# 일반표기법 format(지수표기법, '.10f')
print(format(7.254117e-10,'.10f'))
print(format(1.835039e-03,'.10f'))
print(format(2.146636e-01,'.10f'))
#0.0000000007
#0.0018350390
#0.2146636000
종자, 비료 모두 대립가설채택이지만 종자:비료 즉 상호작용 효과는 귀무가설이 채택되게 됩니다.
🟡 또 굳이 다 묶어서 하지 않아도 formula를 활용해서 한번에 할 수 있는 방법이 있는데
# formula * 활용
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm
# model = ols('토마토수 ~ C(종자) + C(비료) + C(종자):C(비료)', data=df).fit()
model = ols('토마토수 ~ C(종자) * C(비료)', data=df).fit()
anova_lm(model)
이렇게 적을 수 있습니다.
값은 모두 같게 산출됩니다.
🟡 사후검정 확인하기
투키와 본페로니를 사용해서 사후검정을 확인해볼 수 있습니다.
from statsmodels.stats.multicomp import pairwise_tukeyhsd
# Tukey HSD
tukey_summary1 = pairwise_tukeyhsd(df['토마토수'], df['종자'], alpha=0.05)
tukey_summary2 = pairwise_tukeyhsd(df['토마토수'], df['비료'].astype(str), alpha=0.05)
print(tukey_summary1)
print(tukey_summary2)
본페로니검정입니다.
# Bonferroni
from scipy import stats
from statsmodels.stats.multicomp import MultiComparison
mc = MultiComparison(df['토마토수'], df['종자'])
bon_result = mc.allpairtest(stats.ttest_ind, method="bonf", alpha=0.05)
print(bon_result[0])
mc = MultiComparison(df['토마토수'], df['비료'])
bon_result = mc.allpairtest(stats.ttest_ind, method="bonf")
print(bon_result[0])
# 영상에 나온 .astype(str)은 삭제해도 됩니다.
'자격증 > [빅분기] 빅데이터분석기사' 카테고리의 다른 글
[기출] 작업형 1 (0) | 2024.11.21 |
---|---|
[기출2] 풀이 코드 (0) | 2024.11.20 |
[작업형2] roc_acu_score 에러. (0) | 2024.11.18 |
[작업형3] 일원분산분석 실습 + 심화실습 (0) | 2024.11.17 |
[작업형3] 분산분석 개념 (0) | 2024.11.16 |