R统计绘图-VPA(变差分解分析)

6 篇文章 10 订阅
1 篇文章 2 订阅

变差分解分析(Variance Partitioning Analysis)可用于确定指定环境因子对微生物(原生生物/植物/动物等等)群落结构变化的解释比例。要计算指定环境因子与群落结构的相关性,就需要约束非指定环境因子的同时,对指定环境因子做排序分析。其实就是相当于做partial排序分析。公众号文章《R统计-PCA/PCoA/db-RDA/NMDS/CA/CCA/DCA等排序分析教程》写过如何使用vegan包进行偏分析。本文记录一下使用vegan包进行VPA分析的两种方法。

一、 数据准备

# 1. 设置工作路径,老生常谈,设置工作路径和查看路径内容一定是第一步
setwd("D:\\VPAanalysis")
getwd()
dir()

# 2. 调用R包
install.packages("ecodist")
library(vegan)
browseVignettes("vegan")
# 3. 读入数据
spe=read.csv("spe.csv",header=TRUE,row.names=1,sep=",", colClasses = c("character",rep("numeric",times=8)) )# 群落组成数据,物种组成数据是整数,为了使读入数据格式为数值型,设置colClasses,7为物种种类。
## ?rep  # 查看函数用法和函数中参数意义
spe

group=read.csv("group.csv",header=TRUE,row.names=1,sep=",")#分类数据,包含两种类别,grazing和soil depth
group # 这里不用group数据
env=read.csv("env.csv",header=TRUE,row.names=1,sep=",") #环境数据:土壤理化因子与气候因子。虚构数据仅用作教程
env

图1|物种组成数据(spe.csv)。

图2|环境因子数据(env.csv)。

图3|分类数据(group.csv)。

二、变差分解分析(Variation partitioning analysis,VPA)

2.1 方法一:RDA及VPA分析

使用rda()进行偏RDA分析,然后自行计算指定环境因子解释率以及不同环境因子方差解释率重叠部分。此部分也有两种计算方式。R统计-VPA分析(RDA/CCA)文中记录了先计算指定环境因子的partial effect(局部效应),再使用总体环境因子效应-指定环境环境因子效应,得到共有方差解释率。此处记录计算指定环境因子的marginal effect(边际效应),然后所有边际效应相加-环境因子总体方差解释率,得到环境因子对微生物群落结构的解释率的共有部分。

# 2.1.1 RDA-全部环境因子。
RDA=rda(decostand(spe, "hel"),env)
RDA
sumr=summary(RDA)

# 2.1.2 RDA-WC、pH和TC
## RDA-WC、pH和TC的局部效应:单独只由WC、pH和TC解释的方差
RDA2=rda(decostand(spe, "hel"),env[c(1,2,5)],env[c(3,4,6)]) 
RDA2
sumr2=summary(RDA2)
anova(RDA2) # 显著性检验
#permutest(RDA2,permu=999) # anova()作用一样
RsquareAdj(RDA2) # 指定环境因子相关性结果校正,环境因子分类中不止一个环境因子,需要对R^2结果进行校正。

## RDA-WC、pH和TC的边际效应:只由WC、pH和TC解释的方差+WC、pH和TC与其它环境因子共同解释的方差
RDA4=rda(decostand(spe, "hel"),env[c(1,2,5)]) 
RDA4
sumr4=summary(RDA4)

# 2.1.3 RDA-氮形态环境因子
## 氮形态环境因子的局部效应
RDA3=rda(decostand(spe, "hel"),env[c(3,4,6)],env[c(1,2,5)])
RDA3
sumr3=summary(RDA3)

## 氮形态环境因子的边际效应
RDA5=rda(decostand(spe, "hel"),env[c(3,4,6)])
RDA5
sumr5=summary(RDA5)

# 2.1.4 计算WC、pH和TC与氮形态环境因子对微生物群落变化的解释度的共有部分
## 环境因子间的共线性,导致对群落结构方差贡献率的重叠。
## 局部效应计算方式
con=sumr$constr.chi/sumr$tot.chi-(sumr2$constr.chi/sumr2$tot.chi+sumr3$constr.chi/sumr3$tot.chi)
con
## 边际效应计算方式
con2=(sumr4$constr.chi/sumr4$tot.chi+sumr5$constr.chi/sumr5$tot.chi)-sumr$constr.chi/sumr$tot.chi
con2 # 两种计算方法的结果一致

# 2.1.5 VPA分析结果
## 局部效应计算方式
data = data.frame(RDA2=sumr2$constr.chi/sumr2$tot.chi,con=con,RDA3=sumr3$constr.chi/sumr3$tot.chi,un=sumr$unconst.chi/sumr$tot.chi)
data

## 边际效应计算方式
data2 = data.frame(`WC+pH+TC`=sumr4$constr.chi/sumr4$tot.chi-con,con=con,`N form`=sumr5$constr.chi/sumr5$tot.chi-con,un=sumr$unconst.chi/sumr$tot.chi)
data2

注:如果群落结构数据是高通量测序数据,存在很多物种为0的情况,可选择对数据进行hellinger转换,避免“弓形效应”。“弓形效应”就是CA/RA的第二排序轴在许多情况下是第一轴的二次变形。此部分的输出结果在R统计-VPA分析(RDA/CCA)文中,已经解释过了。这里不再赘述。

2.2 方法二:VPA分析

直接使用varpart()函数进行VPA分析。

# 2.2.1 两个环境因子分类VPA分析
## transfo参数定义微生物群落结构数据的转换方法:"hellinger", "chi.square", "total", "norm"可选,当已经对微生物群落结构数据进行了矩阵计算,则不设置此参数。
## chisquare = FALSE表示进行partial RDA分析,chisquare = TRUE则进行partial CCA分析。
rda.vpa <- varpart(spe, env[c(1,2,5)],env[c(3,4,6)], transfo="hel",chisquare = FALSE) 
#cca.vpa <- varpart(spe, env[c(1,2,5)],env[c(3,4,6)], chisquare = TRUE,permutations=999)
#cca.vpa
str(rda.vpa)
rda.vpa
## 对partial RDA分析结果进行校正,再进行计算,可以获得一样的结果。
#RsquareAdj(RDA2)
#RsquareAdj(RDA3)

图4|varpart()运行结构包含的数据,str(vpa)

图5|varpart函数的VPA分析结果。[a+b]表示WC、pH和TC的边际效应。[b+c]表示氮形态环境因子的边际效应。[a+b+c]表示所有环境因子的总体方差解释率。输出结果与方法1中的计算结果一致。[a]表示校正后的WC、pH和TC的局部效应,与RsquareAdj(RDA2)输出结果一致(可能因取的小数点位数有些微差异)。[b]表示校正后的WC、pH和TC与氮形态环境因子的对方差的共有解释率。[c]表示校正后的氮形态环境因子的局部效应,与RsquareAdj(RDA3)输出结果一致。[d]为残差。图中共有的部分产生的原因在于环境因子数据对微生物解释存在着共线性而产生,如果环境因子完全相互独立理论上重叠部分=0。

# 2.2.2 使用formula(公式)形式进行两个以上环境因子分类VPA分析
## 一般环境因子分类不超过4个
colnames(env)
rda.vpa2 <- varpart(spe, ~ pH + WC, ~ NH4..N + NO3..N, ~ TC + TN, data=env,transfo="hel",chisquare = FALSE) 
rda.vpa2

图6|三个环境因子分类的VPA分析结果。

三、绘制韦恩图

opar = par(no.readonly = TRUE) # 保存原始图形设置参数
#layout(matrix(c(1,3,2,4),nrow=2,byrow=TRUE),widths = c(2,2),heights = c(2,2))
#layout.show(4) # 将画布划分为4个区域用于将4幅图拼在一起
par(mfrow=c(2,2)) # 将画布划分为4个区域用于拼图
# 3.1. 2个环境因子分类,可以使用计算结果直接绘制韦恩图
data
counts=c(0.8258243*100,0.1027252*100,0.06568206*100,0.005768427*100)
venn(2,counts,zcolor = "red, green",snames = "pH+WC+TC,N form",ilabels = TRUE, ilcs = 0.5)

# 3.2 vegan中提供了对varpart()输出结果直接绘图的函数
showvarparts(3, bg=2:4)# 展示venn图示例,可以查看各部分对应的字符标记。3表示3个环境因子分类的venn视图。bg用于设置颜色
##Xnames=c("WC+pH+TC","N form")),用于设置venn图中的各环境因子分类标签
plot(rda.vpa, cutoff = -Inf, cex = 0.7, bg = c("hotpink","skyblue"),
     Xnames=c("WC+pH+TC","N form")) # cutoff = -Inf,可以显示出负值。
plot(rda.vpa2, cutoff = -Inf, cex = 0.7, bg=2:5,digits = 2,
      Xnames=c("WC+pH","TC+TN","N form")) # digits = 2设置小数点位数,函数是先对数据*100,再取小数点,所以图中实际显示的是4位小数点。
par(opar) # 恢复原始图形设置参数

注:2表示有两个组分,ilabels = TRUE表示添加数值标记,标记是counts内容。snames标记组分名称,ilcs=0.5为设置数值标记的字体大小。本来想要根据面积来绘制,但是没有找到好的方法使用R直接绘制(主要还是ggplot2学的不精啊)。所以这里图形不是根据面积来绘制的,用数值表示解释度。

图7|venn图。R中venn、gvenn和VennDiagram等R包都可以绘制韦恩图,具体参数可以看说明文档学习。

两个环境因子对微生物群落变化的存在共有解释度说明两个环境因子对微生物群落变化的解释存在共线性,否则共有解释度理论上应为0。如果某些环境因子对微生物变化的解释度<0,则说明环境因子数据对群落数据变化的解释度比使用随机变量的解释度还低,分析时解释度当做0处理。在选择环境因子数据时最好过滤掉解释度<0的环境因子,以及做一下共线性分析,选择互相共线性较低的环境因子。宏基因组公众号有写过这方面的教程,大家可以参考(微生物环境因子分析(RDA/db-RDA)-ggvegan包)。

微信公众号后台发送"VPA analysis",可以获取原始数据和分析流程,或在QQ交流群中的文件夹中下载。

R语言数据可视化之美:专业图表绘制指南(博文视点出品icon-default.png?t=LA92https://www.zhihu.com/xen/market/mall/detail/1357107669979983872?mcn_card_id=1447906871470952449&source=goodsRecommend-pc&zh_nav_left=back&zh_nav_right=empty


参考资料:

高分期刊中频频登场的VPA分析到底是啥?

R统计-VPA分析(RDA/CCA)
RDA、db-RDA(CAP)及CCA的变差分解


推荐阅读

R统计绘图-分子生态相关性网络分析

R语言实战|初阶1:基本图形R语言实战|入门5:高级数据管理R语言实战|入门4:基本数据管理

R语言实战|入门3:图形初阶

R语言实战|入门2:了解数据集

R语言实战|入门1:R语言介绍

R中进行单因素方差分析并绘图

R统计-多变量单因素参数、非参数检验及多重比较

R绘图-相关性分析及绘图

R绘图-相关性系数图

R统计绘图-环境因子相关性热图

R统计绘图-corrplot绘制热图及颜色、字体等细节修改

R统计绘图-corrplot热图绘制细节调整2(更改变量可视化顺序、非相关性热图绘制、添加矩形框等)

R绘图-RDA排序分析

R统计-VPA分析(RDA/CCA)

R统计-PCA/PCoA/db-RDA/NMDS/CA/CCA/DCA等排序分析教程R统计绘图-PCA分析及绘制双坐标轴双序图

R数据可视化之美-节点链接图

R统计绘图-rgbif包下载GBIF数据及绘制分布图

R统计-正态性分布检验[Translation]

R统计-数据正态分布转换[Translation]

R统计-方差齐性检验[Translation]

R统计-Mauchly球形检验[Translation]R统计绘图-单、双、三因素重复测量方差分析[Translation]

R统计绘图-混合方差分析[Translation]

R统计绘图-协方差分析[Translation]

R统计绘图-One-Way MANOVA


EcoEvoPhylo :主要分享微生物生态和phylogenomics的数据分析教程。

扫描二维码,关注EcoEvoPhylo。让我们大家一起学习,互相交流,共同进步。

学术交流QQ群 | 438942456

学术交流微信群 | jingmorensheng412

加好友时,请备注姓名-单位-研究方向。

在Variance Partition Analysis (VPA)中,当数据集存在高度共线的变量时,这可能导致模型不稳定和解释困难。一种常见的处理方法是通过主成分分析(PCA)或因子分析来减少维度并消除共线性。这里我会简要描述一下这个过程,并给出一个基本的R语言示例。 首先,你需要做的是计算变量间的协方差矩阵,然后进行特征值分解,找出最大的几个特征值(对应于较大的主成分),这些主成分代表了原始变量的主要变化方向。接着,你可以选择保留部分主成分作为新变量,其余的可以视为共线性的组合并剔除。 以下是R语言的基本步骤: ```r # 假设data是一个包含你所有变量的数据框 data <- ... # 你的数据 # 计算变量之间的协方差矩阵 cov_matrix <- cov(data) # 使用prcomp函数进行主成分分析 pca_result <- prcomp(data, scale.=TRUE) # 设置scale=TRUE是为了标准化变量 # 查看前几个主成分的相关信息 summary(pca_result) # 确定需要保留多少主成分,通常选择解释大部分变异性的主成分 # 例如,如果前两个主成分解释了80%以上的总变异性,你可以只保留这两个 n_components = floor(sqrt(varianceexplained(pca_result$sdev^2))) # 创建新的数据集,仅包含主成分 reduced_data <- data[, pca_result$rotation[, 1:n_components]] # 如果需要去掉原有的变量,可以用原数据减去对应的主成分得分 original_data_no_collinearity <- data - reduced_data ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

EcoEvoPhylo

值得点赞吗?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值