基于R语言进行扩增子数据的UMAP分析!
UMAP(Uniform Manifold Approximation and Projection)是一种新兴的流形学习降维算法,是一种快速和高效的方法,用于对高维数据进行压缩和可视化。与其他降维算法(如PCA和t-SNE)不同,UMAP 能够解决高维数据的紧密聚类问题,并且能够保留更多的局部结构。UMAP相比其他降维算法具有以下优点:1)能够保留更多的局部结构,特别适用于高维密集聚类问题;2)运算速度快,可用于大规模数据集的计算;3)模型可扩展性强,可以与其他机器学习算法和数据分析算法结合使用。
UMAP的核心思想是基于拓扑理论,它利用一组随机的测地线来寻找高维数据中的局部和整体结构。UMAP利用拓扑映射将高维数据映射到一个低维度连续流形空间内,同时保持原始数据的局部和整体结构。因此,UMAP算法适用于各种高维数据降维和可视化的应用,包括生物信息学,图像处理,文本挖掘等领域。
在R语言中,UMAP算法可通过umap软件包实现。使用该软件包,可以将高维矩阵嵌入到二维或三维空间中,通过可视化来帮助研究人员挖掘数据中可能存在的分组或者模式。需要强调的是,UMAP作为一种非线性降维算法,在使用时需要根据具体问题进行参数的选择和优化,避免产生过度拟合或低维嵌入信息不足的问题。
基础思路与代码
1、设置工作环境并加载R包:
###科研后花园########
#author:wzs
#data:2023/5/21
#设置工作环境
rm(list=ls())
setwd("D:/桌面/UMAP分析")
#加载R包
library(umap)
library(ggplot2)
library(vegan)
2、加载数据
这里我们先使用自己的OTU数据跑通代码(无实际意义,仅作示例使用):
otu_raw <- read.table(file="otu.txt",sep="\t",header=T,check.names=FALSE ,row.names=1)
3、数据处理与标准化:
#由于排序分析函数所需数据格式原因,需要对数据进行转置
otu <- t(otu_raw)
#去除低质量OTU
otu <- otu[rowSums(otu) > 0, ]
#进行hellinger标准化,亦可进行总和标准化、z-score标准化等
otu <- decostand(otu, method="hellinger")
4、UMAP分析:
#运用UMAP算法将OTU表的样品向量嵌入到二维空间中
umap <- umap(otu,n_neighbors = 10)
head(umap$layout)
5、作图数据提取及分组数据添加:
# 提取umap值
df <- data.frame(umap$layout)
#给df添加samp1es变量
df$samples <- row.names(df)
#读入分组文件
group <- read.table("group.txt", sep='\t', header=T)
#修改列名
colnames(group) <- c("samples","group")
#将绘图数据和分组合并
df <- merge(df,group,by="samples")
head(df)
6、绘图:
color=c("#1597A5","#FFC24B","#FEB3AE")#颜色变量
p1<-ggplot(data=df,aes(x=X1,y=X2,
color=group))+#指定数据、X轴、Y轴,颜色
theme_bw()+#主题设置
geom_point(size=3)+#绘制点图并设定大小
theme(panel.grid = element_blank())+
geom_vline(xintercept = 0,lty="dashed")+
geom_hline(yintercept = 0,lty="dashed")+
labs(x=paste0("UMAP1 "),
y=paste0("UMAP2 "))+
scale_color_manual(values = color) +#点的颜色设置
scale_fill_manual(values = c("#1597A5","#FFC24B","#FEB3AE"))+
theme(axis.title.x=element_text(size=12),#修改X轴标题文本
axis.title.y=element_text(size=12,angle=90),#修改y轴标题文本
axis.text.y=element_text(size=10),#修改x轴刻度标签文本
axis.text.x=element_text(size=10),#修改y轴刻度标签文本
panel.grid=element_blank())#隐藏网格线
p1
拓展——使用实际数据进行分析
这里我们使用以microeco包中的示例数据为例,具体数据细节大家可以安装以microeco包进行查看。具体验证代码如下:
library(microeco)
data(sample_info_16S)
data(otu_table_16S)
sample_info_16S <- as.data.frame(sample_info_16S)#确保行名是样本名称,重要
otu_table_16S <- as.data.frame(otu_table_16S)
#由于排序分析函数所需数据格式原因,需要对数据进行转置
otu <- t(otu_table_16S)
#去除低质量OTU
otu <- otu[rowSums(otu) > 0, ]
#进行hellinger标准化,亦可进行总和标准化、z-score标准化等
otu <- decostand(otu, method="hellinger")
#运用UMAP算法将OTU表的样品向量嵌入到二维空间中
umap <- umap(otu,n_neighbors = 10)
head(umap$layout)
# 提取umap值
df <- data.frame(umap$layout)
#给df添加samp1es变量
df$SampleID <- row.names(df)
#分组文件
group <- sample_info_16S
#将绘图数据和分组合并
df <- merge(df,group,by="SampleID")
head(df)
#绘图
color=c("#1597A5","#FFC24B","#FEB3AE")#颜色变量
p1<-ggplot(data=df,aes(x=X1,y=X2))+#指定数据、X轴、Y轴,颜色
theme_bw()+#主题设置
geom_point(aes(fill=Group),size=3,color="black",shape=21,alpha=0.7)+#绘制点图并设定大小
theme(panel.grid = element_blank())+
geom_vline(xintercept = 0,lty="dashed")+
geom_hline(yintercept = 0,lty="dashed")+
labs(x=paste0("UMAP1 "),
y=paste0("UMAP2 "))+
scale_fill_manual(values = color)+
theme(axis.title.x=element_text(size=12),#修改X轴标题文本
axis.title.y=element_text(size=12,angle=90),#修改y轴标题文本
axis.text.y=element_text(size=10),#修改x轴刻度标签文本
axis.text.x=element_text(size=10),#修改y轴刻度标签文本
panel.grid=element_blank())#隐藏网格线
p1
爱我请给我好看!