方差分析:当包含的因子是解释变量时,我们关注的重点通常会从预测转向组别差异的分析,这种分析法称作方差分析(ANOVA)。

install.packages(c('multcomp', 'gplots', 'car', 'HH', 'effects', 'rrcov', 'mvoutlier', 'MASS'))   

(1)ANOVA 模型拟合

aov()函数的语法为aov(formula, data = dataframe)

1、仅有一个类别型变量,称为单因素方差分析(one-way ANOVA)

2、每个患者在所有水平下都进行了测量,因此这种统计设计称单因素组内方差分析;又由于每个受试者都不止一次被测量,也称作重复测量方差分析

3、当设计包含两个甚至更多的因子时,便是因素方差分析设计,比如两因子时称作双因素方差分析,三因子时称作三因素方差分析。

4、若因子设计包括组内和组间因子,又称作混合模型方差分析

5、当因变量不止一个时,设计被称作多元方差分析(MANOVA), 若协变量也存在, 那么就叫多元协方差分析MANCOVA

R语言中的head r语言中的方差函数_方差分析

注意,表达式中变量的顺序很重要

有三种类型的方法可以分解等式右边各效应对y所解释的方差。
类型I(序贯型)
效应根据表达式中先出现的效应做调整。A不做调整,B根据A调整,A:B交互项根据A和
B调整。
类型II(分层型)
效应根据同水平或低水平的效应做调整。A根据B调整,B依据A调整,A:B交互项同时根
据A和B调整。
类型III(边界型)
每个效应根据模型其他各效应做相应调整。A根据B和A:B做调整,A:B交互项根据A和B
调整。
R默认调用类型I方法,其他软件(比如SAS和SPSS)默认调用类型III方法

首先是协变量,然后是主效应,接着是双因素的交互项,再接着是三因素的交互项,以此类推。对于主效应,越基础性的变量越应放在表达式前面。

car包中的Anova()函数(不要与标准anova()函数混淆)提供了使用类型II或类型III方法的选项,而aov()函数使用的是类型I方法。

(2)单因素方差分析

单因素方差分析中,你感兴趣的是比较分类因子定义的两个或多个组别中的因变量均值

library(multcomp)
 attach(cholesterol)
 table(trt)     样本的数量1time 2times 4times  drugD  drugE 
     10     10     10     10     10 
 aggregate(response, by = list(trt), FUN = mean)  计算每一个方法的均值Group.1        x
 1   1time  5.78197
 2  2times  9.22497
 3  4times 12.37478
 4   drugD 15.36117
 5   drugE 20.94752
 aggregate(response, by = list(trt), FUN = sd)    计算每一个方法的标准值 Group.1        x
 1   1time 2.878113
 2  2times 3.483054
 3  4times 2.923119
 4   drugD 3.454636
 5   drugE 3.345003
 fit <- aov(response ~ trt)summary(fit)
          Df Sum Sq Mean Sq F value   Pr(>F)    
 trt          4 1351.4   337.8   32.43 9.82e-13 ***
 Residuals   45  468.8    10.4                     
 ---
 Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
 library(gplots)
 plotmeans(response ~ trt, xlab = "Treatment", ylab = 
 "Response", 
     main = "Mean Plot\nwith 95% CI")
 detach(cholesterol)

R语言中的head r语言中的方差函数_方差分析_02

Tukey HSD的成对组间比较(二二比较)

TukeyHSD(fit)

Fit: aov(formula = response ~ trt)

 $trt
                   diff        lwr       upr     p adj
 2times-1time   3.44300 -0.6582817  7.544282 0.1380949
 4times-1time   6.59281  2.4915283 10.694092 0.0003542
 drugD-1time    9.57920  5.4779183 13.680482 0.0000003
 drugE-1time   15.16555 11.0642683 19.266832 0.0000000
 4times-2times  3.14981 -0.9514717  7.251092 0.2050382
 drugD-2times   6.13620  2.0349183 10.237482 0.0009611
 drugE-2times  11.72255  7.6212683 15.823832 0.0000000
 drugD-4times   2.98639 -1.1148917  7.087672 0.2512446
 drugE-4times   8.57274  4.4714583 12.674022 0.0000037
 drugE-drugD    5.58635  1.4850683  9.687632 0.0030633
 par(las = 2)
 par(mar = c(5, 8, 4, 2))
 plot(TukeyHSD(fit))

R语言中的head r语言中的方差函数_R_03

如果要做单因素的方差分析,因变量要满足正态分布。可以使用QQ图查看。

library(car)
 qqPlot(lm(response ~ trt, data = cholesterol), simulate = TRUE, main = "QQ Plot", labels = FALSE)


因变量满足各组方差相等

bartlett.test(response ~ trt, data = cholesterol)
         Bartlett test of homogeneity of variances
 data:  response by trt
 Bartlett's K-squared = 0.5797, df = 4, p-value = 0.9653 p-value = 0.9653 越接近1 证明 不同值之间的方差是相等的。

方差齐性分析对离群点非常敏感。可利用car包中的outlierTest()函数来检测离群点:

library(car)
 > outlierTest(fit)
 No Studentized residuals with Bonferonni p < 0.05
 Largest |rstudent|:
    rstudent unadjusted p-value Bonferonni p
 19 2.251149           0.029422           NA