查看原文
其他

R包vegan执行非参数多元方差分析(置换多元方差分析)

生信小白鱼 鲤小白 小白鱼的生统笔记 2022-05-08
多元方差分析的非参数方法(置换多元方差分析,PERMANOVA)在R中实现

当因变量不止一个时,即一个或多个因子变量对应了多个因变量时,可使用多元方差分析(MANOVA)。但是MANOVA的条件非常苛刻,以前文简述的单因素MANOVA为例,要求数据满足多元正态性、方差-协方差矩阵同质性,大部分案例中都是直接拒绝的。

替代方法可以使用稳健MANOVA,这个在前文单因素MANOVA中已经提到。对于非参数的方法,常用置换多元方差分析(PERMANOVA)。


本文使用的作图数据的网盘链接(提取码fjuq):

https://pan.baidu.com/s/1I2dX58-q5XJgexxfYTvpmg


示例数据说明

  

我们首先将示例数据读到R中,并从中挑选部分数据作为演示(测试数据同前文中的单因素MANOVA,以方便二者比较)。

#读入文件,添加分组信息
soil <- read.table('soil.txt', sep = '\t', header = TRUE, stringsAsFactors = FALSE, check.names = FALSE)
group <- read.table('group.txt', sep = '\t', header = TRUE, stringsAsFactors = FALSE, check.names = FALSE)
soil <- merge(soil, group, by = 'sample')

#选择数据,并将分组列转换为因子变量
muti <- soil[ ,c('sample', 'treat', 'chao1', 'pH', 'NR')]
muti$treat <- factor(muti$treat)

假设存在这么一个关注的问题:

我们采集了来源于同一环境中的土壤(土壤类型一致),分为了3组,分别添加了三种类型的化学物质(a、b、c),并将土壤孵育了一定的时间(时间相同)。最后取样后,通过16S测序,获得了土壤细菌群落的Alpha多样性指数;通过土壤理化测定,获得了土壤中多种理化指标;通过土壤酶活性测定,获得了主要的几种土壤酶活性数据。通过这些数据,我们想要得知土壤细菌群落的Alpha指数、土壤理化、以及土壤酶活性是否因所添加化学物质类型不同而显著改变。

对应于上述挑选出的测试数据“muti”:sample,试验样本名称,土壤类型完全相同,土壤孵育时间完全一致;treat,在土壤中添加的三种化学物质(a、b、c),这列作为分组列,需要转换为因子变量类型;chao1,Alpha多样性指数中的Chao1指数,数值变量;pH,土壤理化数据中的pH值数据,数值变量;NR,土壤硝酸还原酶活性,数值变量。

这里存在3组因变量:“土壤菌群Chao1指数”、“土壤pH值”、“土壤硝酸还原酶(NR)活性”,对应于1组因子变量“化学物质类型”,因此我们期望使用单因素多元方差分析(单因素MANOVA),探究土壤细菌群落Chao1指数、土壤pH、土壤硝酸还原酶(NR)活性是否因所添加化学物质类型不同而发生显著改变。但是在评估检验的假设条件时,发现方差-协方差矩阵同质性并不满足(见前文),于是我们考虑更换为非参数的方法作为替代。


置换多元方差分析(PERMANOVA)

  

置换多元方差分析(PERMANOVA)可以通过vegan包adonis()函数来实现。以下为本文的示例参考。

#置换多元方差分析(PERMANOVA),vegan 包 adonis(),详情使用 ?adonis 查看帮助
library(vegan)

rownames(muti) <- muti$sample
muti_dat <- muti[ ,c('chao1', 'pH', 'NR')]
#muti_dat <- decostand(muti_dat, 'standardize') #可选 z-score 标准化,消除量纲差异
dis <- vegdist(muti_dat, method = 'euclidean') #获取欧式距离矩阵(这里以欧式距离为例,实际分析中视情况选择合适的距离测度)
adonis(dis~treat, muti, permutations = 999) #999 次置换获得 p 值(其实就是通过置换检验来实现)结果是显著的。


以上示例中只有一组分组因子。当存在多组分组时(多因素时),adonis()仍然适用。

#类似于 aov(),多因素下,在 ~ 后面添加分组因子即可
#例如 A 为协变量,B 为自变量时,注意协变量在前,自变量在后
adonis(y~A+B, data, permutations = 999)

#例如考虑 A、B 双因素及交互作用时,注意主因素在前,次因素在后;多因素时以此类推
adonis(y~A*B, data, permutations = 999)



链接

R包rcompanion执行非参数双因素方差分析(Scheirer-Ray-Hare检验)

R包sm执行非参数单因素协方差分析

R语言执行非参数单因素方差分析(Kruskal-Wallis检验、Friedman检验)

R语言执行多元方差分析

R语言执行重复测量方差分析

R语言执行双因素方差分析

R语言执行单因素协方差分析

R语言执行单因素方差分析及多重比较

R语言执行两组间差异分析Wilcox秩和检验

R语言执行两组间差异分析T检验

R语言绘制蝴蝶(柱状)图

R语言绘制分组柱状图



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存