R包vegan的普鲁克分析(Procrustes Analysis)示例

几天前,同学咨询这篇文献中的分析方法,先来看一下(部分截图)。

(Zhao et al, 2019)

大体意思是,作者测量了活性污泥(AS)中的细菌群落(16S)组成和抗生素抗性基因(ARGs)丰度,然后分别执行了OTUs和ARGs 亚型的非度量多维标度(NMDS)分析,基于获得的两组NMDS坐标执行Procrustes分析以表征各样本的细菌物种丰度组成和抗生素抗性基因丰度组成的潜在一致性。

作者通过Procrustes分析的M2个统计量以及基于999次置换检验获得的显著性p值,指出各样本的细菌物种丰度组成和抗生素抗性基因丰度组成存在很强的关联。

大致搞懂了什么是Procrustes分析之后,本篇作个简介。包括其原理,M2统计量的意义,以及怎样计算(在R里可以使用那个函数执行)。

Procrustes分析简介

Procrustes分析(Procrustes Analysis,普鲁克分析)是一种通过分析形状分布,比较两组数据一致性的方法。数学上来讲,就是不断迭代,寻找标准形状(canonical shape),并利用最小二乘法寻找每个对象形状到这个标准形状的仿射变化方式(Gower, 1975)。该过程也称为最小二乘正交映射(least-squares orthogonal mapping)。

Procrustes分析的过程

简单地说,Procrustes分析基于匹配两个数据集中的对应点(坐标),通过平移、旋转和缩放其中一个数据集中点的坐标以匹配另一数据集中对应点的坐标,并最小化点坐标之间的偏差平方和(表示为M2)。对应点坐标之间的偏差称为矢量残差(vector residuals),小的矢量残差代表了两数据集具有更高的一致性。

A,显示了投影至二维空间中的两数据集,两数据集中样本对应(A-a,B-b,C-c);

B,平移坐标使质心对齐,此时两数据集具有一个公共质心;

C-D,通过不断迭代旋转并缩放调整数据,使M2最小化。

注:坐标平移、旋转和缩放过程中,对所有的样本点执行统一的操作,因此尽管点的位置发生改变,但不会改变数据集的投影“形状”。

Procrustes分析M2统计量的显著性检验(PROTEST)

Procrustes分析对两个数据集中点的坐标进行描述性总结和图形化比较,尽管M2统计量提供了对一致性的度量(M2越小表示两数据集关联度越高),但是并未评估M2是否比预期的要好(M2是否显著,而不是由偶然所致)。

可通过置换检验的原理实现对M2显著性的检验,称为PROTEST或PROcrustean randomization test。通过在其中一个数据集中随机地对观测值进行置换,同时保持数据集的共变结构,之后使用Procrustes分析计算随机置换后数据集与另一数据集的M2值(称为Mp2)。如此随机置换共N次,并记录原始观测值的M2 < Mp2的次数,由此获得p值:

如果p达到显著性水平(如p<0.05),则可以认为原始观测值的M2并非由偶然因素所致,M2显著小于随机数据集的Mp2,两个数据集的期望值比在随机情况下表现出更大的一致性。

Procrustes分析在生物学数据分析中的应用

这是一个在面部几何中广泛应用的算法,例如用于人脸识别。同学们有兴趣的话搜一下了解就可以了,本篇扯人脸识别就偏题了(况且白鱼同学自己就是出了名的脸盲,莫要跟我提人脸识别……)。

生物学数据分析中,Procrustes分析也经常出现。

例如在组学分析中,经常需要分析来自相同样本不同组学数据集之间是否存在相似性关系,就微生物组而言,例如开篇时提到的那个示例,物种组成丰度和ARGs丰度是否存在潜在一致性。当然分析潜在关系的方法有很多,Procrustes分析就是一种很好的选择。

再如群落分析中,常见通过Procrustes分析物种组成与环境的关系,以及物种形态、遗传组成、空间结构、行为特征等更多类型的数据集类似的案例。

考虑到白鱼同学的所学专业,所以下文多以“群落分析”举例描述。

Procrustes分析与Mantel Test的比较

提到群落分析,Procrustes分析与Mantel test都是用于分析物种组成和环境属性关系的常见方法,当然二者的具体关注点还是有区别的,方法各有自身的优点。但如果只聚焦在评估两数据集一致性上,似乎Procrustes分析更直观一些。

M2统计量及其显著性检验p值提供了两个数据集之间一致性的总体度量,同时数据集的图形匹配和相关残差提供了比Mantel test更丰富的信息源。在对应点的坐标匹配度较好时,两个数据集表现出良好的一致性。坐标匹配度越差表明这些点与整体趋势不匹配,这类似于回归分析中残差较大的点,这些点不符合样本的总体趋势。此外,PROTEST的统计功效也被证明优于Mantel test的统计功效(Peres-Neto and Jackson, 2001)。因此,如果两组数据之间存在潜在关系,则Procrustes分析更有能力检测到,并且鉴于结果的图形性质,它还提供了出色的解释性准则。

R包vegan的Procrustes分析示例

Procrustes分析在群落分析中得到广泛应用,因此vegan包(这是一个在群落分析中非常知名的R包)中就提供了Procrustes分析的方法,下文就以vegan包的Procrustes分析为例展示。

其它可用于Procrustes分析的R包,请自行了解。

下文示例数据、R代码等的获取链接(提取码,ij18):

https://pan.baidu.com/s/1VXqsxicZE4a2VdY6bnuJLQ

示例数据

举一个非常常见的例子,在A、B、C三个环境中(每个地点观测了4个样地)测量了物种组成和当地的环境指标,并期望通过Procrustes分析建立环境和物种的关联。

网盘附件示例数据集,一个物种丰度矩阵(spe_table.txt),一个环境变量矩阵(env_table.txt)。

PCA降维及探索性分析

由于两个数据集的属性不同,直接比较并不合适。因此,分别对两个数据集执行主成分分析(PCA)降维,并提取特征轴的坐标(代表了变量集的线性组合)用于比较。

使用vegan的rda()执行PCA。过程中,将环境变量标准化为均值为0和标准差为1,以消除不同环境测度的量纲差异;对物种变量执行Hellinger转化,避免直接应用欧几里得距离时产生的“马蹄形效应”。(为什么这样做,参考前文主成分分析;当然,对于物种数据的降维,基于Bray-curtis距离的主坐标分析(PCoA)也是一个好的选择,本篇未用它举例,大家可以自行尝试下)

library(vegan)##样方-环境属性矩阵
env <- read.delim('env_table.txt', row.names = 1, sep = '\t', stringsAsFactors = FALSE, check.names = FALSE)#环境变量的 PCA 需要标准化,详情 ?rda
env_pca <- rda(env, scale = TRUE)##样方-物种丰度矩阵
otu <- read.delim('spe_table.txt', row.names = 1, sep = '\t', stringsAsFactors = FALSE, check.names = FALSE)#物种数据 Hellinger 预转化,详情 ?decostand
otu_hel <- decostand(otu, method = 'hellinger')#对转化后的物种数据执行 PCA,无需标准化,详情 ?rda
otu_pca <- rda(otu_hel, scale = FALSE)##排序图比较,以 PCA 的 I 型标尺为例
par(mfrow = c(1, 2))
biplot(env_pca, choices = c(1, 2), scaling = 1, main = '环境组成的PCA', col = c('red', 'blue'))
biplot(otu_pca, choices = c(1, 2), scaling = 1, main = '物种组成的PCA', col = c('red', 'blue'))

同时也可借助PCA作为探索性分析,看两个数据集中样方的排序坐标是否具有一致性。比如说,在排序图中不同分组都区分的很明显,表明环境与物种存在协同性;如果PCA结果中两个数据集比较后找不到规律,可能表明它们之间的关联度较低。

在示例的两个数据集各自的PCA排序图中,样方的排布还是非常明显的,A、B、C三组的样本都能够分开。尽管具体的坐标有区别,但这无妨,因为Procrustes分析可以通过平移、旋转和缩放坐标,最小化最组坐标之间的偏差平方和(M2),描述二者的关联程度。

Procrustes分析度量两数据集一致性

接下来,将上述两个PCA结果中的样方坐标提取出来,作为Procrustes分析的输入。vegan中,procrustes()执行Procrustes分析。

关于procrustes()中参数X和Y的指定,环境数据的PCA坐标指定于X,物种组成的PCA坐标指定于Y,因为后续Procrustes分析中旋转和缩放操作是对Y而言的,将Y匹配于X。这种顺序可以表示物种依赖于环境的逻辑,代表了将物种匹配于环境,最好不要反过来。

注:procrustes()参数中,当symmetric=FALSE时,将旋转并按比例缩放Y以匹配X,可知这种模式是“非对称”的,X和Y的分配值调换后,Procrustes分析的偏差平方和(M2)也会随之改变。而当symmetric=TRUE时,首先将两组坐标都按比例缩放为单位方差,从而给出更独立于比例的对称统计。这种“对称”模式下,X和Y的分配值调换后,Procrustes分析的偏差平方和(M2)不会发生改变,但注意旋转仍将是非对称的(旋转的仍然是Y)。

#Procrustes 分析
#提取两个 PCA 中的样方排序坐标,均以 I 型标尺为例
site_env <- summary(otu_pca, scaling = 1)$site
site_otu <- summary(otu_pca, scaling = 1)$site#执行 Procrustes 分析,详情 ?procrustes
#以对称分析为例(symmetric = TRUE)
proc <- procrustes(X = env_pca, Y = otu_pca, symmetric = TRUE)
summary(proc)#旋转图
plot(proc, kind = 1, type = 'text')#一些重要的结果提取
names(proc)head(proc$Yrot)  #Procrustes 分析后 Y 的坐标
head(proc$X)  #Procrustes 分析后 X 的坐标
proc$ss  #偏差平方和 M2 统计量
proc$rotation  #通过该值可获得旋转轴的坐标位置

通过平移、旋转和缩放坐标,图中映射在主正交轴中的点是来自环境变量PCA的样方点,映射在斜向正交轴中的点是来自物种组成PCA的样方点,箭头指示了二者中配对的样方。从图形结果中可以看出,环境和物种的潜在关系表现出较好的一致性。

最小化最组坐标之间的平方差之和(M2)为0.2178。

#残差图
plot(proc, kind = 2)
residuals(proc)  #残差值

该图显示了每个配对样方的残差,从底部到顶部的水平线是残差的25%(虚线),50%(实线)和75%(虚线)分位数。如果样方中环境和物种组成更为一致,则旋转图中两个匹配的点距离越近,残差较小,反之环境和物种更无规律,则残差更大。

M2统计量的显著性检验(PROTEST)

上述图形结果显示,环境和物种的潜在关系表现出较好的一致性,同时获得了指示这种一致性的M2统计量。

但是这种一致性是否是显著的,procrustes()没有为我们提供出来。因此,通过另一函数protest()执行置换检验评估Procrustes分析结果的显著性(即PROTEST,见上文概述部分)。

#PROTEST 检验,详情 ?protest
#以 999 次置换为例
#注:protest() 中执行的是对称 Procrustes 分析,X 和 Y 的分配调换不影响 M2 统计量的计算
set.seed(123)
prot <- protest(X = env_pca, Y = otu_pca, permutations = how(nperm = 999))
prot#重要统计量的提取
names(prot)
prot$signif  #p 值
prot$ss  #偏差平方和 M2 统计量

999次置换检验后显示p<0.001,结果是非常显著的。

备注:我尝试在procrustes()中添加参数symmetric = TRUE/FALSE,但都返回了对称Procrustes分析的M2统计量,该函数只能执行对称模式的Procrustes分析?不过倒是不影响结果判断,因为对称Procrustes分析显著的话,非对称Procrustes分析肯定也是显著的,因此p值怎样都适用。

ggplot2的一个作图示例

Procrustes分析到这里就大致演示完了。

如果觉得vegan默认的图不方便调整,不妨将上述计算好的坐标导出,通过ggplot2作图,如下展示一个示例。

library(ggplot2)#提取 Procrustes 分析的坐标
Y <- cbind(data.frame(proc$Yrot), data.frame(proc$X))
X <- data.frame(proc$rotation)#添加分组信息
group <- read.delim('group.txt', sep = '\t', stringsAsFactors = FALSE, check.names = FALSE)
Y$samples <- rownames(Y)
Y <- merge(Y, group, by = 'samples')#ggplot2 作图
p <- ggplot(Y) +
geom_point(aes(X1, X2, color = groups), size = 1.5, shape = 16) +
geom_point(aes(PC1, PC2, color = groups), size = 1.5, shape = 1) +
scale_color_manual(values = c('red2', 'purple2', 'green3'), limits = c('A', 'B', 'C')) +
geom_segment(aes(x = X1, y = X2, xend = PC1, yend = PC2), arrow = arrow(length = unit(0.1, 'cm')),color = 'blue', size = 0.3) +
theme(panel.grid = element_blank(), panel.background = element_rect(color = 'black', fill = 'transparent'),legend.key = element_rect(fill = 'transparent')) +
labs(x = 'Dimension 1', y = 'Dimension 2', color = '') +
geom_vline(xintercept = 0, color = 'gray', linetype = 2, size = 0.3) +
geom_hline(yintercept = 0, color = 'gray', linetype = 2, size = 0.3) +
geom_abline(intercept = 0, slope = X[1,2]/X[1,1], size = 0.3) +
geom_abline(intercept = 0, slope = X[2,2]/X[2,1], size = 0.3) +
annotate('text', label = sprintf('M^2 == 0.2178'),x = -0.21, y = 0.42, size = 3, parse = TRUE) +
annotate('text', label = 'P < 0.001',x = -0.21, y = 0.38, size = 3, parse = TRUE)p#输出图片
ggsave('procrustes.pdf', p, width = 6, height = 5)
ggsave('procrustes.png', p, width = 6, height = 5)

该图和上文中vegan包的默认出图结构是一致的,解读方式参考上文即可。额外添加了样方分组、统计量标识等信息。

参考资料

概念:http://jackson.eeb.utoronto.ca/procrustes-analysis/

R操作:http://john-quensen.com/tutorials/procrustes-analysis/

Gower J C. Generalized procrustes analysis. Psychometrika, 1975, 40, 33-51.

Peres-Neto P R, Jackson D A. How well do multivariate data sets match? The advantages of a Procrustean superimposition approach over the Mantel test. Oecologia, 2001, 129(2):169-178.

Zhao R, Feng J, Liu J, et al. Deciphering of microbial community and antibiotic resistance genes in activated sludge reactors under high selective pressure of different antibiotics. Water Research, 2019, 388-402.

猜你喜欢

10000+:菌群分析 宝宝与猫狗 梅毒狂想曲 提DNA发Nature Cell专刊 肠道指挥大脑

系列教程:微生物组入门 Biostar 微生物组  宏基因组

专业技能:学术图表 高分文章 生信宝典 不可或缺的人

一文读懂:宏基因组 寄生虫益处 进化树

必备技能:提问 搜索  Endnote

文献阅读 热心肠 SemanticScholar Geenmedical

扩增子分析:图表解读 分析流程 统计绘图

16S功能预测   PICRUSt  FAPROTAX  Bugbase Tax4Fun

在线工具:16S预测培养基 生信绘图

科研经验:云笔记  云协作 公众号

编程模板: Shell  R Perl

生物科普:  肠道细菌 人体上的生命 生命大跃进  细胞暗战 人体奥秘

写在后面

为鼓励读者交流、快速解决科研困难,我们建立了“宏基因组”专业讨论群,目前己有国内外5000+ 一线科研人员加入。参与讨论,获得专业解答,欢迎分享此文至朋友圈,并扫码加主编好友带你入群,务必备注“姓名-单位-研究方向-职称/年级”。PI请明示身份,另有海内外微生物相关PI群供大佬合作交流。技术问题寻求帮助,首先阅读《如何优雅的提问》学习解决问题思路,仍未解决群内讨论,问题不私聊,帮助同行。

学习16S扩增子、宏基因组科研思路和分析实战,关注“宏基因组”

点击阅读原文,跳转最新文章目录阅读

普鲁克分析(Procrustes Analysis)评估物种-环境/功能关联度的一个示例相关推荐

  1. 多维标度法(MDS,Multidimensional Scaling)及普氏分析(Procrustes Analysis)在人体姿态关节点上的简单示例(python)

    多维标度法(MDS,Multidimensional Scaling) 多维标度法一个简单的应用示例就是,已知一组城市之间的相对距离关系(相似矩阵),如何求解出各个城市在地图上的位置,使其尽可能满足前 ...

  2. 论文浅尝 | 基于正交普鲁克分析的高效知识图嵌入学习

    笔记整理:朱渝珊,浙江大学在读博士,研究方向为快速知识图谱的表示学习,多模态知识图谱. 1.Motivation 知识图谱是许多NLP任务和下游应用的核心,如问答.对话代理.搜索引擎和推荐系统.知识图 ...

  3. 【R生态】普鲁克分析(Procrustes Analysis)

  4. 普氏分析在生信中的应用

    普氏分析(Procrustes Analysis) 在微生物群落研究的过程中,我们经常需要评估微生物群落结构与环境因子整体之间是否具有显著的相关性,此时,通常使用的方式是Mantel test和普氏分 ...

  5. 2分钟在线做出一张普氏分析图(Procrustes Analysis)

    常常会有老师要求小编帮忙做普氏分析,尤其是微生物组和宏基因组相关的项目.这次小编索性把所有的分析一次性处理好. Q:什么是普氏分析? 随着高通量测序的普及,常规的相关性分析已经无法满足科研工作者的需要 ...

  6. Procrustes Analysis(普氏分析)

    Procrustes Analysis普氏分析法 选取N幅同类目标物体的二维图像,并用上一篇博文的方法标注轮廓点,这样就得到训练样本集: 由于图像中目标物体的形状和位置存在较大偏差,因此所得到的数据并 ...

  7. java常规普氏分析法_人脸对齐:Procrustes analysis 普氏分析

    概述 在人脸相关应用中,获得的人脸图像常常形状各异,这时就需要对人脸形状进行归一化处理.人脸对齐就是将两个不同的形状进行归一化的过程,将一个形状尽可能地贴近另一个形状. 值得注意的是,在英语文献中,F ...

  8. Procrustes Analysis普氏分析法

    选取N幅同类目标物体的二维图像,并用上一篇博文的方法标注轮廓点,这样就得到训练样本集: 由于图像中目标物体的形状和位置存在较大偏差,因此所得到的数据并不具有仿射不变性,需要对其进行归一化处理.这里采用 ...

  9. opencv+face_recognition+python实现换脸(face swap)操作(3)——基于普氏分析法(Procrustes Analysis)的代码实现

    #获得特征点 def ladmask(img):faces_loaction=face_recognition.face_locations(img,number_of_times_to_upsamp ...

最新文章

  1. rsync服务同步,linux日志,screen工具
  2. 2020十大新兴技术揭晓!每一项都可能颠覆我们的生活
  3. 第一章 内核模块 elf文件
  4. 编码与乱码(05)---GBK与UTF-8之间的转换--转载
  5. Leetcode 456. 132 Pattern
  6. 【站点部署】解析二级域名并部署站点
  7. 【linux】kill命令信号总结
  8. react页面保留_如何在React中保留已登录的用户
  9. html css . doc,html+CSS基础.doc
  10. 建议电脑电源标准逐步去掉-12V、3.3V
  11. jsp1201高校实习实训系统
  12. landesk 卸载_landesk怎么卸载,软件卸载不了怎么办
  13. master matlab,MOEA-master
  14. React 之 Expected an assignment or function call and instead saw an expression 解决办法
  15. 「网络安全」安全设备篇(7)——抗DDOS产品
  16. 体验共享单车后对于Locman技术实现的几点思考
  17. 如何打开powershell 【超简单,一步完成】
  18. 强制重启计算机快捷键,强制重启电脑快捷键
  19. 我眼中的光明·第三周
  20. 计算机应用基础18春在线作业2,东师计算机应用基础18——春在线作业2.docx

热门文章

  1. 分析了10万起诈骗案例,大数据告诉你:2018年骗子更狡猾了
  2. 关注这些技术号,你将拥有半个互联网圈
  3. 千人千面,撩拨你的个性化广告
  4. 飞书,成就组织和个人 让每一分努力都有意义!
  5. 【硅谷牛仔】优步CEO,最倒霉的成功创业者 -- 特拉维斯·卡兰尼克
  6. [MATLAB]从已知矩阵中取出子阵
  7. java 调用计算机程序方法
  8. 09 Java程序员面试宝典视频课程之多线程
  9. php十天入门教程,十天学会php之第十天_PHP教程
  10. 高薪诚聘 | 匠韵智能招聘3D视觉工程师