查看原文
其他

基于R语言进行扩增子数据的UMAP分析!

王志山 科研后花园 2023-09-08

       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)#去除低质量OTUotu <- 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)#去除低质量OTUotu <- 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

PS: 以上内容是小编个人学习代码笔记分享,仅供参考学习,欢迎大家一起交流学习。
代码及源数据获取:https://github.com/wzsBio/code

爱我请给我好看!

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

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