UMAP分析及可视化

什么是UMAP?和PCA一样,一种降维的算法,如果不是统计学或者数据专业的人,我建议不要去看它的原理,知道如何用就足够了。

也许听到UMAP最多的是对单细胞数据的分析降维,类似于下图:

图片

然而其他数据,像大样本的转录组在PCA降维效果不好的时候,可以使用UMAP,毕竟现在转录非常便宜,随便测几十个样品和玩似的。

首先构建一个数据集,行为样本,列为基因,并对样本的特征进行分组。

图片

读入数据: 

setwd("E:/生物信息学")options(stringsAsFactors= F)####A <- read.csv("UMAP.csv",header = T,row.names = 1)

安装R包:

install.packages("umap")library(umap)

UMAP分析:

A_umap <- A[,colnames(A)!= c('label2', 'label3','label4')]#新构建一个表,不含有labelA_umap <- data.frame(t(apply(A_umap,1,                             function(v){(v-mean(v,na.rm=T))/sd(v,na.rm=T)})),                     stringsAsFactors=F)#标准化umap <- umap(A_umap,method='naive',n_neighbors = 10)    head(umap$layout)    #####################       [,1]      [,2]r1 16.16427 -11.32371r2 16.26652 -11.21803r3 16.28917 -11.45600r4 16.28618 -11.56981r5 16.15085 -12.07527r6 16.65784 -12.28240             

提取分析结果用于作图:

B <- data.frame(umap$layout)B$label <- A$label2 colnames(B) <- c('UMAP_1','UMAP_2','label')

作图是由ggplot实现的,应该很熟悉了:​​​​​​​

ggplot(B, aes(x=UMAP_1, y=UMAP_2, colour=label)) +   geom_point(size=1)+ xlab("UMAP_1")+ ylab("UMAP_2")+   theme(  panel.grid.major = element_blank(),                 panel.grid.minor = element_blank(),                 legend.title=element_blank(),                  panel.border = element_blank(),                 axis.line.x = element_line(color="black", size = 0.5),                 axis.line.y = element_line(color="black", size = 0.5),                 panel.background = element_blank())

图片

降维效果很好,当然图的颜色也是可以修改的,和之前讲的ggplot的修饰一样。除了对样本的分组,还可以展现其他的分组,毕竟数据中我们设置了3

个label,我们看一下以性别的分组作图是什么样的?只需要改动下label即可。

 ​​​​​

C <- data.frame(umap$layout)C$label <- A$label3 colnames(C) <- c('UMAP_1','UMAP_2','label') ggplot(C, aes(x=UMAP_1, y=UMAP_2, colour=label)) +   geom_point(size=1)+ xlab("UMAP_1")+ ylab("UMAP_2")+   theme(panel.grid.major = element_blank(),                 panel.grid.minor = element_blank(),                 legend.title=element_blank(),                  panel.border = element_blank(),                 axis.line.x = element_line(color="black", size = 0.5),                 axis.line.y = element_line(color="black", size = 0.5),                 panel.background = element_blank())

图片

效果不错!

样本多可以试试这个方法,不局限于转录组,其他的任何数据都可以!

想要示例数据的可以打赏截图联系作者获取,记得留下邮箱!

 

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值