> library(multcomp) > attach(cholesterol) > table(trt) 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 *** #Anova对治疗方式(trt)的F检验很是显著(p<0.0001),说明五种疗法的效果不一样 Residuals 45 468.8 10.4 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 #gplots包中的plotmeans()可用来绘制带有置信区间的组均值图形 > library(gplots) > plotmeans(response ~ trt,xlab="Treatment",ylab="Response",main="Mean Plot\nwith 95% CI") > detach(cholesterol)
虽然ANOVA对各疗法的 F 检验代表五种药物治疗效果不一样,可是并无告诉你哪一种疗法与其余疗法不一样,多重比较能够解决这个问题ide
##TukeyHSD()函数提供了对各组均值差别的成对检验 > TukeyHSD(fit) Tukey multiple comparisons of means 95% family-wise confidence level Fit: aov(formula = response ~ trt) $trt diff lwr upr p adj 2times-1time 3.44300 -0.6582817 7.544282 0.1380949 #均值差别不显著(p=0.138) 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)) #图形中置信包含 0 的疗法说明差别不线显著(p>0.5) > par(opar) Hit <Return> to see next plot: par(opar)
multcomp包中 glht() 函数提供了多重均值比较更为全面的方法,既适用于线性模型(如本章各例),也适用于广义线性模型,下面的代码重现了 Tukey HSD 检验,并用不一样的图形对结果进行展现函数
> library(multcomp) > par(mar=c(5,4,6,2)) #增大顶部边界面积 > tuk <- glht(fit, linfct=mcp(trt="Tukey")) > plot(cld(tuk, level=.05),col="lightgrey") > par(opar)
1time 和 2itme差别不显著(有相同的字母a),2times和 4times差别也不显著(有相同的字母b),而 1time 和 4time 差别显著(没有共同的字母)spa
从结果来看,使下降胆固醇的药物时,一天四次 5mg 剂量比一天一次 20m 剂量效果更佳,也优于候选药物 drugD ,但药物 drugE 比其余的全部药物和疗法都更优code
作单因素方差分析时,咱们假设统计检验的数据是知足假设条件:假设因变量服从正态分布,各组方差相等orm
使用Q-Q图来检验正态性假设ip
#检验因变量服从正态分布 > library(car) > qqPlot(lm(response ~ trt, data=cholesterol), + simulate=TRUE, main="Q-Q Plot", labels=FALSE) Hit <Return> to see next plot:
注意qqPlot()要求 lm() 拟合。如上图数据落在 95% 的置信区间范围内,说明知足正态性假设。it
Bartlett检验table
> 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=0.97 > α 因此接受 H0 方差并无显著的不一样 #其余的检验 Fligner-Killeen检验(flingner.test())和Brown-Forsythe检验(HH包中的hov()函数),结果与 Bartlett 检验相同
方差齐性检验对离群点很是敏感,可利用 car 包中 outlierTest() 来检验离群点form
> 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 #从输出的结果来看,并无证听说明胆固醇数据中含有离群点(当p>1时产生NA)。所以 Q-Q图,Bartlett检验和离群点检验,该数据彷佛能够用ANOVA模型拟合的很好。