t检验可以解决单样本、双样本时的均数比较。当要比较的组多于两个时,t检验方法就难以满足这种需求,此时就需要使用方差分析来进行参数检验。
它比较的是组间差异。
方差分析(Analysis of Variance,简称ANOVA),又称“变异数分析”,是R.A.Fisher发明的,用于两个及两个以上样本均数差别的显著性检验。
方差分析对样本独立性要求较高。
对正态分布是稳健的,样本正态性不会太大影响方差分析结果。
方差齐性方面,一般而言,只要最大/最小方差之比小于3,分析结果都是稳定的。
方差分析在R语言中用aov函数实现。
格式:
aov(formula,data=dataframe)
formula为表达式。表达式可以使用的特殊符号如下:
符号 | 用法 |
---|---|
~ | 分隔符号,左边为响应变量,右边为解释变量。例如,用A、B、C预测y,代码为y~A+B+C |
: | 表示变量的交互项。例如用A、B和A与B的交互项来预测y,代码为y~A+B+A:B |
* | 表示所有可能的交互项。 |
^ | 表示交互项达到某个次数。代码y(A+B+C)^2可展开为yA+B+C+A:B+A:C+B:C |
. | 表示包含除了因变量外的所有变量。例如,若一个数据框包含变量y、A、B和C,代码y~.可展开为y ~A+B+C |
出于组间差异性检验的目的,为了方便仅展示单因素方差分析示例。
单因素方差分析即一个自变量一个因变量的方差分析。自变量为分类变量,因变量为连续变量。
所使用数据集multcomp包中cholesterol数据集。
数据集中,50名患者分别接受降低胆固醇药物治疗(trt)五种疗法中的一种疗法。其中三种治疗条件使用药物相同,分别是20mg一天一次、10mg一天两次、5mg一天四次。剩下的两种方式(drugD和drugE)代表候选药物。问哪种药物疗法降低胆固醇(因变量)最多。药物之间药效是否存在差异。
#载入包
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
#检验组间差异(ANOVA)
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
#绘制各组均值及其置信区间图形
#载入gplots
library(gplots)
#绘图
plotmeans(response~trt,xlab = 'Treatment',ylab = 'Response',main='Mean Plot\nwith 95% CI')
#解除绑定
detach(cholesterol)
置信区间与假设检验是互补关系。置信区间回答量的问题,即总体均数范围在哪里。
假设检验回答质的问题,即总体均数之间是否存在差异,以及在统计上确认这种差异的把握有多大。
由ANOVA模型可知,五种药物疗法效果不同。具体差异需要进行多重比较。
R自带的函数TukeyHSD()函数提供各组均值差异的成对检验。
multcomp包glht()函数提供多重均值比较更为全面的方法,即适用于线性模型,也适用于广义线性模型。
以 multcomp包glht()函数为例做展示
library(multcomp)
par(mar=c(5,4,6,2))
tuk <- glht(fit,linfct=mcp(trt='Tukey'))
plot(cld(tuk,level=0.5),col='lightgrey')
使用car包qqplot()函数。要求用lm()拟合
#载入包
library(car)
#调用qqplot函数
qqPlot(lm(response~trt,data = cholesterol),simulate=TRUE,
+ main='Q-Q Plot',labels=FALSE)
用Bartlett球形检验
bartlett.test(response~trt,data=cholesterol)
Bartlett test of homogeneity of variances
data: response by trt
Bartlett's K-squared = 0.57975, df = 4, p-value =
0.9653
#P大于0.05,说明方差齐性
方差齐性对离群点非常敏感。可利用car包中outlierTest()函数来检测离群点
library(car)
outlierTest(fit)
No Studentized residuals with Bonferroni p < 0.05
Largest |rstudent|:
rstudent unadjusted p-value Bonferroni p
19 2.251149 0.029422 NA
#没有证据说明胆固醇数据中含有离群点(当p>1时将产生NA)
R 语 言 小 白 速 通 R语言小白速通 R语言小白速通
懂 点 R 语 言 懂点R语言 懂点R语言
欢 迎 分 享 收 藏 关 注 欢迎分享收藏关注 欢迎分享收藏关注