基于R语言的方差分析
行秋即离
原创
关注
2点赞·2147人阅读
1、导入相关的包
单因素方差分析
一、正态性检验
with(ToothGrowth, tapply(len, dosef, shapiro.test))
二、方差齐性检验
三组以上的因子需要用leveneTest()检验
leveneTest(len~dosef, ToothGrowth)
不过有一些教材认为应该用残差来检验正态性和方差齐性
因此这里需要进行一次方差分析
AOV1 <- aov(len~dosef, ToothGrowth)
summary(AOV1)
这里面的Residuals就是残差的意思,所以要将这数据提取处理,也可以在AOV1数据上面索引
三、诊断模型
res1 <- residuals(AOV1) 或者 res1 <- AOV1$residuals
shapiro.test(res1)
ggqqplot(res1) 画出qq图看以下
科普:
QQPlot图是用于直观验证一组数据是否来自某个分布,或者验证某两组数据是否来自同一(族)分布。在教学和软件中常用的是检验数据是否来自于正态分布。
方差齐性的检验和前面的差不多就是因变量变成了残差
nrow(leadership)是leadership这个数据集的行数(可能就是样本数),1:nrow(leadership) 是一个向量,从1到nrow(leadership),sample(1:nrow(leadership)) 是将里面的这个向量进行随机排列了,不是之前那样的顺序了。sample(1:nrow(leadership))。
R语言与统计-1:t检验与秩和检验
方差分析适用于多组均数的比较 (在完全随机设计的实验中,两组均数的t检验和方差分析是完全等价的。但t检验只能用于两组的均数比较,对于三组和三组以上的均数比较,就需要用到方差分析。)
可以看到这个数据集只有两个变量,其中治疗是分类变量(因子型),有5个水平。response是数值型变量。要对每种治疗所对应的response的均值进行比较,就只能用方差分析而不能用t检验。
符合正态分布
要比较均值的数据写~左边,分组变量写右边。p=0.9653,方差齐。
写法同上,方差齐。
需要注意的是,如果检验出方差不齐,我们第一步不是立马选择进行非参数检验,而是首先要判断有无异常值存在,因为异常值对方差的影响很大。当然,到这一步才来检验有无异常值是不符合数据分析的流程的,异常值在进行数据初步处理的时候就因该被发现和处理掉。
方差分析包括 单因素方差分析 , 多因素方差分析 , 协方差分析 , 多元方差分析 , 重复测量数据方差分析 。
gplots包的plotmeans函数 对上述结果进行可视化
使用ToothGrowth数据集进行演示
aov函数
不考虑supp和dose之间的交互作用的情况。结果显示两个因素都对小鼠牙齿生长影响显著。
考虑两个因素之间的交互作用:将上面的+换成*。结果显示两个因素都对小鼠牙齿生长影响显著而且两者间的互相影响也不容忽视。
可视化
上述结果已经知道了再五组数据中的均值不全相等,下一步想知道哪些相等哪些不等,就要对这五组进行两两比较。
输出的结果:从左往右依次是:两两比较、两两间的差值、lwr是95%可信线的下限,upr是上限。最后是p值。
将结果可视化:
线段中点是均值,两端是95%置信区间,跨过0说明没有显著差异。
在进行方差分析时,所有混杂因素统称为 协变量 。
检验dose对weight的影响。出生时间gesttime是协变量。
aov后面小括号里写的顺序:结果变量~协变量+自变量。如果要看协变量和自变量之间是否存在交互,在后面写+协变量:自变量。最后是data=数据集。
结果显示两个变量之间不存在交互效应(p=0.17889, >0.05),可以认为它们的斜率是相同的。
因变量不止一个,但是需要将它们作为一个整体同时进行分析。例如:某种药物对患者血红蛋白浓度,红细胞计数,外周血细胞因子水平等多种因素的影响。
使用 manovs()函数 进行性多元方差分析
参考: https://blog.csdn.net/dingming001/article/details/72822270