붓꽃 종류(Species)별 Sepal.Width의 차이가 존재하는지를 5%
유의수준으로 검정하세요.
iris 데이터셋 불러오기.
library(ggplot2)
library(car)
## Loading required package: carData
data <- iris
iris$Species <- as.factor(iris$Species)
head(data)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
str(data)
## 'data.frame': 150 obs. of 5 variables:
## $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
## $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
## $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
## $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
## $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
각 그룹의 Sepal.Width 분포를 박스플롯으로 확인하기.
ggplot(iris, aes(x=Species, y=Sepal.Width))+
geom_boxplot(fill=c("red", "blue", "green"))+
ggtitle("Species vs. Sepal.Width")+
theme_minimal()
Levene’s Test 사용해 등분산성 확인하기.
levene_result <- leveneTest(Sepal.Width~Species, data=iris)
p_value <-levene_result$'Pr(>F)'
print(p_value)
## [1] 0.5555179 NA
p_value가 0.05보다 크기에 등분산성을 만족한다고 볼 수
있다.
aov() 함수 이용해 ANOVA 수행하기.
anova_result <- aov(Sepal.Width ~ Species, data = iris)
summary(anova_result)
## Df Sum Sq Mean Sq F value Pr(>F)
## Species 2 11.35 5.672 49.16 <2e-16 ***
## Residuals 147 16.96 0.115
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova_p_value <- summary(anova_result)[[1]]$'Pr(>F)'[1]
print(anova_p_value)
## [1] 4.492017e-17
p-value가 0.05보다 작으면 귀무가설(H0: 평균이 동일)을 기각하고, 그룹 간 차이가 있다고 결론 내리기.
if (anova_p_value < 0.05) {
print("귀무가설을 기각하고, 그룹 간 유의미한 차이가 있다고 판단한다.")
} else {
print("귀무가설을 기각하지 못하고, 그룹 간 유의미한 차이가 있다고 판단할 수 없다.")
}
## [1] "귀무가설을 기각하고, 그룹 간 유의미한 차이가 있다고 판단한다."