분산분석(ANOVA)
- 두개이상 집단들의 평균간 차이에 대한 통계적 유의성을 검정
- 사후 검정 : 분산분석 후 어떤 집단이 유의미한 차이를 가지고 있는지 확인
- 귀무가설 : 집단들 사이의 평균은 같음
- 대립가설 : 집단들 사이의 평균은 다름
일원배치 분산분석
- 하나의 범주형 변수의 영향을 알아보기 위해 사용
- 모집단의 수는 제한 없으며, 표본의 수는 달라도 됨(3개 이상 집단간 차이가 있는지 검증)
- 가정 : 각 집단 측정치는 서로 독립이며, 정규분포를 따름, 분산이 같음(등분산 가정)
- F검정 통계량 사용
- 귀무가설 : k집단간 모평균에는 차이가 없음
- 대립가설 : k집단간 모평균에는 차이가 있음
from sklearn.datasets import load_iris
iris = load_iris()
df = pd.DataFrame(iris.data, columns = ['SepalLength','SepalWidth','PetalLength','PetalWidth'])
df['Species'] = iris.target
df.boxplot(column=['SepalWidth'], by=['Species'])
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm
import statsmodels.stats.multicomp as mc
# 분산분석
ano = ols(formula='SepalWidth ~ C(Species)', data=df).fit()
anova_lm(ano)
- F분포의 값이 4.16이고 p-value가 0.05이하이므로 귀무가설을 기각한다 -> 최소(적어도) 하나의 집단은 다르다.
## 사후 검정(구체적으로 어떤것이 차이있는지 알아보기)
comp = mc.MultiComparison(df['SepalLength'], df['Species'])
tukeyhsd = comp.tukeyhsd(alpha=0.05)
tukeyhsd.summary()
tukeyhsd.plot_simultaneous()
- 세 가지 비교 모두 p-value가 0.05보다 작으므로 각각의 비교에 대한 귀무가설 기각 -> 평균값은 통계적으로 유의한 차이가 있음
- diff에서 왼쪽과 오른쪽 집단 간 반응값의 차이를 나타냄, 즉, 2>1>0 이다.
이원배치 분산분석
- 중속변수(반응값)에 대해 두개의 범주형 변수A,B의 영향을 아아보기 위해 사용
- 두 독립변수 A,B사이에 상관관계가 있는지를 살펴보는 교호작용에 대한 검증이 필요
- 가정 : 각 집단 측정치의 분포는 정규분포(정규성)이며, 분산은 같음(등분산성)
- 주효과와 교호작용효과에 대한 검정 수행
- 주효과 : 독립변수가 종속변수에 미치는 효과
- 교호작용효과 : 여러 독립변수의 조합이 종속변수에 주는 영향
- 귀무가설 : a와 b변수에 따른 종속변수의 값(반응값)에 차이 없음, a와 b변수의 상호작용 효과가 없음
- 대립가설 : a와 b변수에 따른 종속변수의 값(반응값)에 차이 있음, a와 b변수의 상호작용 효과가 있음
mtcars = pd.read_csv('https://t1.daumcdn.net/cfile/blog/99F8633E5E8ECB130D?download', index_col=0)
mtcars_sam = mtcars.loc[:,['cyl','am','mpg']]
mtcars_sam
# 이원배치 분산 분석
formula = 'mpg ~ C(cyl) + C(am) + C(cyl):C(am)'
lm = ols(formula, mtcars_sam).fit()
print(anova_lm(lm))
- cyl변수에 대한 p-value는 0.05보다 작으므로 실린더 개수에 따른 주행거리간 차이가 존재하지 않는다는 귀무가설 기각 -> 차이가 존재
- am변수에 대한 p-value는 0.05보다 크므로 변속기 종류에 따른 주행거리간 차이가 존재하지 않는다는 귀무가설 기각하지 않음 -> 차이가 없음
- cyl변수와 am변수 가느이 상호작용효과에 대한 검정결과 p-value는 0.05보다 크므로 귀무가설 기각하지 않음 -> 실린더개수와 변속기 종류간에는 교호작용이 존재하지 않음
이항검정
- T-검정이나 ANOVA는 모두 분포의 평균을 비교하는 가설 검정이다. 그러나 만약 범주가 2개(예를 들어 성공 또는 실패)로 구성된 자료인 경우이항 검정을 사용해야 한다.
- scipy의 binom_test를 활용하면 바로 확인할 수 있다. 입력 값은 총 3개가 필요하다. 성공 횟수, 시도 횟수, 기대 성공 확률.
- 예를 들어 1000번 시도해서 525번 성공했는데, 기대 성공 확률이 0.5라고 하면 이렇게 작성하면 된다.
from scipy.stats import binom_test
pval = binom_test(525, n=1000, p=0.5)
print(pval)
# 0.12121426581113832
- p-value가 0.05보다 작으면 귀무 가설(“실제 성공 확률은 기대 성공 확률과 같다”)을 기각할 수 있다. 따라서 성공 확률을 0.5로 예측했으나, 실제 성공 확률은 0.5가 아니며, 0.5보다 크다는 뜻이다.
728x90
반응형
'Data Analysis & ML > Python을 활용한 통계분석' 카테고리의 다른 글
[통계분석] 탐색적 요인분석(EFA) (0) | 2020.12.24 |
---|---|
[통계분석] PCA(주성분분석) (0) | 2020.12.24 |
[통계분석] 상관분석 (피어슨, 스피어만, 켄달타우) (0) | 2020.12.19 |
[통계분석] 교차분석(카이제곱 검정) (0) | 2020.12.19 |
[통계분석] 표본추출과 T-Test (0) | 2020.12.19 |