5 獨立樣本單因子變異數分析

以R語言讀入資料並做獨立樣本單因子變異數分析。

5.1 資料準備

5.1.1 讀入檔案

接續前一單元,以gData3m變數來做分析,或以xlsx套件的read.xlsx()函數或readxl套件的read_xlsx()函數來讀入gData3m.xlsx檔

library(readxl)
gData3m <- read_xlsx("gData3m.xlsx")
head(gData3m)
## # A tibble: 6 × 3
##   編號  考試    成績
##   <chr> <chr>  <dbl>
## 1 1     期初考    68
## 2 2     期初考    76
## 3 3     期初考    64
## 4 4     期初考    64
## 5 5     期初考     0
## 6 6     期初考    96

5.1.2 準備可供變異數分析的資料

將考試修改為班別的資料。

cData <- gData3m
names(cData)[2] <- '班別'

將期初、期中、期末考改為A班、B班、C班,並將編號改為1~171,共171名受試者(不改也不影響分析,但還是改一下,符合一般情境)。

## 
## Attaching package: 'plyr'
## The following objects are masked from 'package:rstatix':
## 
##     desc, mutate
## The following object is masked from 'package:ggpubr':
## 
##     mutate
## The following objects are masked from 'package:Hmisc':
## 
##     is.discrete, summarize
cData$班別 <- revalue(cData$班別, c("期初考"="A", "期中考"="B", "期末考"="C"))
cData$編號 <- c(1:171)
head(cData)
## # A tibble: 6 × 3
##    編號 班別   成績
##   <int> <chr> <dbl>
## 1     1 A        68
## 2     2 A        76
## 3     3 A        64
## 4     4 A        64
## 5     5 A         0
## 6     6 A        96

5.2 描述統計

參考前一單元。

5.3 獨立樣本變異數分析

確認班別是factor。若不是的話轉為factor。

cData$班別 <- factor(cData$班別)
str(cData)
## tibble [171 × 3] (S3: tbl_df/tbl/data.frame)
##  $ 編號: int [1:171] 1 2 3 4 5 6 7 8 9 10 ...
##  $ 班別: Factor w/ 3 levels "A","B","C": 1 1 1 1 1 1 1 1 1 1 ...
##  $ 成績: num [1:171] 68 76 64 64 0 96 96 40 96 96 ...

5.3.1 變異數同質性檢定

先以leveneTest()函數進行變異數同質性檢定。由結果可知資料並未違反變異數同質假設(F(2,168)=1.46, p=0.23)。

library(car)
leveneTest(成績~班別, data=cData, center=mean)
## Levene's Test for Homogeneity of Variance (center = mean)
##        Df F value Pr(>F)
## group   2  1.4619 0.2347
##       168

5.3.2 變異數分析

因變異數同質,可用anova()來做變異數分析。結果顯示三個班級的考試成績有差異,F(2,168)=44.95, p<.001。

anova(lm(成績 ~ 班別, data = cData))
## Analysis of Variance Table
## 
## Response: 成績
##            Df Sum Sq Mean Sq F value    Pr(>F)    
## 班別        2  25493 12746.6  44.949 2.314e-16 ***
## Residuals 168  47642   283.6                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

也可以用aov()來做。結果同上。

anova1 <- aov(成績~factor(班別),data=cData)
model.tables(anova1, type="means")
## Tables of means
## Grand mean
##          
## 65.73684 
## 
##  factor(班別) 
## factor(班別)
##     A     B     C 
## 82.81 54.95 59.46
summary(anova1)
##               Df Sum Sq Mean Sq F value   Pr(>F)    
## factor(班別)   2  25493   12747   44.95 2.31e-16 ***
## Residuals    168  47642     284                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

5.3.3 事後比較

可用TukeyHSD()來做事後比較。結果顯示A班和B班、A班和C班的成績有差異,B班和C班則無。

TukeyHSD(anova1)
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = 成績 ~ factor(班別), data = cData)
## 
## $`factor(班別)`
##           diff        lwr       upr     p adj
## B-A -27.859649 -35.318779 -20.40052 0.0000000
## C-A -23.350877 -30.810007 -15.89175 0.0000000
## C-B   4.508772  -2.950358  11.96790 0.3281624

或做pairwise t test。結果同上。

library(rstatix)
pairwise_t_test(cData, 成績~班別, paired = FALSE, p.adjust.method = "bonferroni")
## # A tibble: 3 × 9
##   .y.   group1 group2    n1    n2        p p.signif    p.adj p.adj.signif
## * <chr> <chr>  <chr>  <int> <int>    <dbl> <chr>       <dbl> <chr>       
## 1 成績  A      B         57    57 1.32e-15 ****     3.95e-15 ****        
## 2 成績  A      C         57    57 6.12e-12 ****     1.84e-11 ****        
## 3 成績  B      C         57    57 1.55e- 1 ns       4.64e- 1 ns

5.3.4 變異數不同質時

若變異數不同質,可用oneway.test()函數,將var.equal設為FALSE來做ANOVA。

oneway.test(成績~班別, data=cData, var.equal=FALSE)
## 
##  One-way analysis of means (not assuming equal variances)
## 
## data:  成績 and 班別
## F = 43.952, num df = 2.00, denom df = 109.09, p-value = 1e-14

可用games_howell_test來做事後比較。games_howell_test()假設變異數不同質。

library(rstatix)
games_howell_test(cData, 成績 ~ 班別, conf.level = 0.95, detailed = FALSE)
## # A tibble: 3 × 8
##   .y.   group1 group2 estimate conf.low conf.high    p.adj p.adj.signif
## * <chr> <chr>  <chr>     <dbl>    <dbl>     <dbl>    <dbl> <chr>       
## 1 成績  A      B        -27.9    -35.0      -20.7 4.72e-14 ****        
## 2 成績  A      C        -23.4    -31.5      -15.2 1.66e- 9 ****        
## 3 成績  B      C          4.51    -2.60      11.6 2.91e- 1 ns