과제

붓꽃 종류(Species)별 Sepal.Width의 차이가 존재하는지를 5% 유의수준으로 검정하세요.

1. 데이터 로딩

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 ...

2. 데이터 시각화

각 그룹의 Sepal.Width 분포를 박스플롯으로 확인하기.

ggplot(iris, aes(x=Species, y=Sepal.Width))+
  geom_boxplot(fill=c("red", "blue", "green"))+
  ggtitle("Species vs. Sepal.Width")+
  theme_minimal()

3. 등분산성 검정

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보다 크기에 등분산성을 만족한다고 볼 수 있다.

4. 분산분석 수행

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

5. 결과 해석

p-value가 0.05보다 작으면 귀무가설(H0: 평균이 동일)을 기각하고, 그룹 간 차이가 있다고 결론 내리기.

if (anova_p_value < 0.05) {
  print("귀무가설을 기각하고, 그룹 간 유의미한 차이가 있다고 판단한다.")
} else {
  print("귀무가설을 기각하지 못하고, 그룹 간 유의미한 차이가 있다고 판단할 수 없다.")
}
## [1] "귀무가설을 기각하고, 그룹 간 유의미한 차이가 있다고 판단한다."