1 Data 불러오기


library(readxl)

c5 <- read_excel("C:/Download/7_sales_data.xlsx", sheet = "data1")

c5$영업사원 <- as.factor(c5$영업사원)
c5
## # A tibble: 18 × 2
##    영업사원   매출
##    <fct>     <dbl>
##  1 영업사원1    13
##  2 영업사원2    25
##  3 영업사원3    14
##  4 영업사원1     5
##  5 영업사원2    25
##  6 영업사원3    15
##  7 영업사원1    11
##  8 영업사원2    25
##  9 영업사원3    11
## 10 영업사원1     5
## 11 영업사원2    14
## 12 영업사원3    10
## 13 영업사원1     8
## 14 영업사원2    18
## 15 영업사원3    14
## 16 영업사원1    14
## 17 영업사원2    13
## 18 영업사원3    12
# summary(c5)
# is.data.frame(c5)
# length(c5)


2 데이터 시각화 및 주요 기술통계


데이터의 분포를 박스 플롯으로 시각화하고 주요 기술통계를 본다.

# boxplot
boxplot(c5$매출 ~ c5$영업사원, 
        main = "Boxplot of evaluation for each salesperson", 
        xlab = "Factor Levels : Salesperson", 
        ylab = "Sales")

# descriptive statistics by group
tapply(c5$매출, c5$영업사원, summary)
## $영업사원1
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   5.000   5.750   9.500   9.333  12.500  14.000 
## 
## $영업사원2
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    13.0    15.0    21.5    20.0    25.0    25.0 
## 
## $영업사원3
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   10.00   11.25   13.00   12.67   14.00   15.00


3 ANOVA 수행


제안별 수용도에서 하나 이상의 차이가 있는지 확인하기 위해ANOVA를 수행한다.

# one-wayANOVA
result <- aov(매출 ~ 영업사원, data = c5)
summary(result)
##             Df Sum Sq Mean Sq F value  Pr(>F)   
## 영업사원     2  357.3  178.67   10.28 0.00154 **
## Residuals   15  260.7   17.38                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# anova(result)
model.tables(result) # 전체 평균 대비 각 그룹 수용도의 차이
## Tables of effects
## 
##  영업사원 
## 영업사원
## 영업사원1 영업사원2 영업사원3 
##    -4.667     6.000    -1.333


4 정규성 검정


잔차의 정규성을 확인하기 위해서 aov() 함수의 결과에서 residuals를 뽑아서 정규성에 대해 가설검정을 해본다. p-값> 0.05이므로 잔차의 정규성을 기각하지 못했다.

# plot(result)
shapiro.test(result$residuals)
## 
##  Shapiro-Wilk normality test
## 
## data:  result$residuals
## W = 0.93544, p-value = 0.2418


5 등분산성 검정


등분산성을 가설검정할 때 요인의 수준이 2 개인 경우에는 두 모집단의 분산의 차이 검정을 F-분포를 사용하여 수행할 수 있다. 이 경우에는 var.test() 함수를 이용하여 가설검정을 수행하였다. 그러나 요인의 수준이 3 개 이상인 경우에는 bartlet.test()을 사용한다. p-값>0.05이므로 등분산 가정을 기각하지 못했다.

# Bartlett test to test the null hypothesis of equal group variances: 등분산 검정
bartlett.test(매출 ~ 영업사원, data = c5)
## 
##  Bartlett test of homogeneity of variances
## 
## data:  매출 by 영업사원
## Bartlett's K-squared = 4.5187, df = 2, p-value = 0.1044


6 다중 비교


ANOVA 분석을 통해 평균이 같다는 귀무가설이 기각되면, 어는 수준 간의 차이에 의해 귀무가설이 기각되었는지 살펴보아야 한다. 이를 살펴보는 방법 중 하나가 가능한 모든 두 수준 간에 평균의 차이가 있었는지를 가설검정해 보는 것이다. 이는 두 모집단 간의 모평균 비교와 같아진다. 다만 수준이 많은 경우 단순히 두 수준 간의 평균의 차이를 가설검정하는 것은 여러 개의 가설을 동시적으로 검정하는 것이 되어서 기각역 또는 p-값의 조정이 필요하다. R의 기본 기능에 포함되어 있는 TukeyHSD() 함수는 이러한 수준별 쌍 비교를 수행해 준다.

##------------------------------------------------------------------
## multiple comparison 
## - Tukey's HSD(honestly significant difference) test : TukeyHSD()
##------------------------------------------------------------------

TukeyHSD(result)
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = 매출 ~ 영업사원, data = c5)
## 
## $영업사원
##                          diff        lwr       upr     p adj
## 영업사원2-영업사원1 10.666667   4.415126 16.918207 0.0013249
## 영업사원3-영업사원1  3.333333  -2.918207  9.584874 0.3731837
## 영업사원3-영업사원2 -7.333333 -13.584874 -1.081793 0.0209627