ANOVA
*참고: 나성호강사님 강의안
분산분석 (ANOVA)
- 분산분석은 3개 이상의 집단 간 평균이 다른지 확인할 때 사용한다.
- 목표번수 1개, 입력변수의 집단 수가 3 이상일 때 일원분산분석을 사용할 수 있다.
- 분산분석은 편차의 제곱합을 각각의 자유도로 나누어서 얻은 평균젭곱합의 비를 검정 통계량으로 사용
- 분삭 분석의 검정 통계량은 F분포를 따르며, F값이 커질수록 유의확률이 작아진다.
- 유의확률이 0.05보다 작으면 ‘모든 집단의 평균이 같다’는 귀무가설을 기각할 수 있다.
- 분산분석 실행 결과, 유의확률(p-value)이 0.05보다 작으면 3개 이상의 집단 간 평균이 모두 같다는 귀무가설을 확인 할 수 있다.
분산석의 가정
- 분산분석은 정규성 및 등분산성을 가정을 만족해야 한다.
- 정규성 검정은 shapiro.text() 함수를 이용한다.
- 정규성 가정을 만족하지 못하면 ‘Kruskal-Wallis 순위합 검정’을 실시한다.
- 모집단이 정규분포를 따르고, 데이터 크기가 30 이상이면 생략 가능하다.
- 입력변수의 레벨이 3개 이상인 등분산성 검정은 ‘Levene 검정’을 실행’
- ‘Levene 검정’의 귀무가설은 ‘각 처리별 분산이 같다’이다.
- 유의확률이 0.05보다 크면 귀무가설을 기각할 수 없으므로 등분산성 가정을 만족하는 것으로 판단한다.
library(tidyverse)
library(lawstat)
df <- read.csv(file = 'https://bit.ly/toyota_price',header=TRUE)
str(object =df)
head(x = df,n = 10L)
summary(object = df)
df[,c(4,6:7)]<-map_df(.x=df[,c(4,6:7)],.f=as.factor)
levene.test(y = df$Price, group = df$FuelType, location = 'mean')
by(data = df$Price, INDICES = df$FuelType, FUN = sd)
# FuelType 컬럼의 빈도수가 모두 30을 초과하는지 확인
table(df$FuelType)
# FuelType 컬럼의 레벨별 Price의 정규성 검정 실행
by(data = df$Price, INDICES = df$FuelType, FUN = shapiro.test)
# 정규성 검정을 만족하지 못하므로 Kruskal-Wallis 순위합 검정 실행
kruskal.test(formula = Price ~ FuelType, data = df)
# 분산분석은 oneway.test() 함수를 활용하여 실행
oneway.test(formula = Price ~ FuelType,
data = df,
var.equal =FALSE) #등분산성을 만족하지 못하면 FALSE를 할당