15  PCoA主坐标分析

15.1 什么是PCoA?

人眼一般能感知的空间为二维和三维。高维数据可视化的重要目标就是将高维数据呈现于二维或三维空间中。高维数据变换就是使用降维度的方法,使用线性或非线性变换把高维数据投影到低维空间,去掉冗余属性,但同时尽可能地保留高维空间的重要信息和特征。

PCoA(principal co-ordinates analysis)是一种研究数据相似性或差异性的可视化方法,通过一系列的特征值和特征向量进行排序后,选择主要排在前几位的特征值,PCoA 可以找到距离矩阵中最主要的坐标,结果是数据矩阵的一个旋转,它没有改变样品点之间的相互位置关系,只是改变了坐标系统。通过PCoA 可以观察个体或群体间的差异。

PCoA与PCA的区别在于PCA是基于原始的物种组成矩阵所做的分析,使用的是欧式距离,仅仅比较的是物种丰度的不同,而PCoA首先根据不同的距离算法计算样品之间的距离,然后对距离矩阵进行处理,使图中点间的距离正好等于原来的差异数据,实现定性数据的定量转换。

本文我们就来讨论一下PCoA图是如何绘制的以及如何对其进行解读。

15.2 绘图前的数据准备

需要2个文件,demo数据可以在https://www.bioladder.cn/shiny/zyp/bioladder2/demoData/PCoA/PCoA.zip下载。

15.2.1 PCoA数据

数据来源一般是搜库结果定量表。包含2个维度的数据,一般情况下,每一行是一个基因,每一列是一个样本。

15.2.2 分组数据

行名的名称和个数要和之前的PCoA数据保持一致,列名为分组名称,可以包含不止一个分组。

15.3 R语言怎么做PCoA分析


# 加载R包,没有安装请先安装  install.packages("包名") 
library(ggplot2)
library(ade4)   # 用于计算PcoA
library(vegan)  # 用于计算距离

# 读取PCoA数据文件
df = read.delim("https://www.bioladder.cn/shiny/zyp/bioladder2/demoData/PCoA/data.txt",# 这里读取了网络上的demo数据,将此处换成你自己电脑里的文件
                header = T,    # 指定第一行是列名
                row.names = 1  # 指定第一列是行名
)
df=t(df) # 对数据进行转置,如果想对基因分组则不用转置

# 读取样本分组数据文件
dfGroup = read.delim("https://www.bioladder.cn/shiny/zyp/bioladder2/demoData/PCoA/class.txt",
                     header = T,
                     row.names = 1
)

# PCoA计算
df.dist = vegdist(df,method='euclidean')    #基于euclidean距离
pcoa =  dudi.pco(df.dist,
                 scannf = F,   # 一种逻辑值,指示是否应该显示特征值条形图
                 nf=2)         # 保留几个维度的坐标信息

# 整理绘图所需的数据
data = pcoa$li
data$name = rownames(data)
data$group = dfGroup$Group

# 绘图
ggplot(data,aes(x = A1,
                y = A2,
                color = group,
                group = group,
                fill = group
                   ))+
  geom_point()+
  theme_classic()+
  geom_vline(xintercept = 0, color = 'gray', size = 0.4) +   # 在0处添加垂直线条
  geom_hline(yintercept = 0, color = 'gray', size = 0.4) +
  stat_ellipse(aes(x=A1,    # 添加置信区间圈
                   y=A2,
  ),
  geom = "polygon",
  level = 0.95,
  alpha=0.4)+
  geom_text(                # 添加文本标签
    aes(label=name),   
    vjust=1.5,            
    size=2,
    color = "black"
  )+
  labs(  # 更改x与y轴坐标为pcoa$eig/sum(pcoa$eig)
    x = paste0("PCoA1 (",as.character(round(pcoa$eig[1] / sum(pcoa$eig) * 100,2)),"%)"),
    y = paste0("PCoA2 (",as.character(round(pcoa$eig[2] / sum(pcoa$eig) * 100,2)),"%)")
  )

15.4 BioLadder生信云平台在线绘制PCoA图

不想写代码?可以用BioLadder生信云平台在线绘制PCoA。

网址:

BioLadder-生物信息在线分析和可视化云平台​www.bioladder.cn/