降维

在组学分析中,一般通过降维算法得到低纬度如二维或三维的新坐标数据,再结合可视化技术去展示样本的在新坐标的空间分布,接着加上统计检验结果证实整体组学水平上组间的差异性。降维算法有基于线性模型的PCA,也有基于非线性tSNEUMAP等方法。

示例数据和代码领取

详见:R实战| PCA、tSNE、UMAP三种降维方法在R中的实现

PCA

主成分分析(Principal Component Analysis,PCA)是最常用的无监督学习方法。

rm(list = ls())
library(tidyverse)
library(broom)
library(palmerpenguins)# 示例数据
penguins <- penguins %>%drop_na() %>%select(-year)
head(penguins)# 使用prcomp()进行PCA
# PCA前对数值型数据进行标准化
pca_fit <- penguins %>%select(where(is.numeric)) %>%scale() %>%prcomp()
# 查看成分重要性
summary(pca_fit)# 可视化PC1和PC2
pca_fit %>%augment(penguins) %>%rename_at(vars(starts_with(".fitted")),list(~str_replace(.,".fitted",""))) %>%ggplot(aes(x=PC1, y=PC2,color=species,shape=sex))+geom_point()

PCA plot: PC1 vs PC2

UMAP

数据预处理

## UMAP
rm(list = ls())
library(tidyverse)
library(palmerpenguins)
#install.packages("umap")
library(umap)
theme_set(theme_bw(18))penguins <- penguins %>% drop_na() %>%select(-year)%>%mutate(ID=row_number()) penguins_meta <- penguins %>%select(ID, species, island, sex)

使用umap包进行umap分析

set.seed(142)
umap_fit <- penguins %>%select(where(is.numeric)) %>%column_to_rownames("ID") %>%scale() %>% umap()umap_df <- umap_fit$layout %>%as.data.frame()%>%rename(UMAP1="V1",UMAP2="V2") %>%mutate(ID=row_number())%>%inner_join(penguins_meta, by="ID")
umap_df %>% head()

可视化

# 可视化
umap_df %>%ggplot(aes(x = UMAP1, y = UMAP2, color = species,shape = sex))+geom_point()+labs(x = "UMAP1",y = "UMAP2",subtitle = "UMAP plot")

UMAP plot in R: Example 1
# 分面
umap_df %>%ggplot(aes(x = UMAP1, y = UMAP2,color = species)) +geom_point(size=3, alpha=0.5)+facet_wrap(~island)+labs(x = "UMAP1",y = "UMAP2",subtitle="UMAP plot")+theme(legend.position="bottom")

UMAP plot in R: Example 2
# 圈出异常样本
library(ggforce)
umap_df %>%ggplot(aes(x = UMAP1,y = UMAP2, color = species,shape = sex)) +geom_point() +labs(x = "UMAP1",y = "UMAP2",subtitle="UMAP plot") +geom_circle(aes(x0 = -5, y0 = -3.8, r = 0.65), color = "green",inherit.aes = FALSE)

UMAP Plot to Identify Potential sample mix-ups

tSNE

数据预处理

## tSNE
rm(list = ls())
library(tidyverse)
library(palmerpenguins)
library(Rtsne)
theme_set(theme_bw(18))penguins <- penguins %>% drop_na() %>%select(-year)%>%mutate(ID=row_number())penguins_meta <- penguins %>%select(ID,species,island,sex)

使用Rtsne 包进行tSNE 分析

set.seed(142)
tSNE_fit <- penguins %>%select(where(is.numeric)) %>%column_to_rownames("ID") %>%scale() %>% Rtsne()tSNE_df <- tSNE_fit$Y %>% as.data.frame() %>%rename(tSNE1="V1",tSNE2="V2") %>%mutate(ID=row_number())tSNE_df <- tSNE_df %>%inner_join(penguins_meta, by="ID")tSNE_df %>% head()

可视化

tSNE_df %>%ggplot(aes(x = tSNE1, y = tSNE2,color = species,shape = sex))+geom_point()+theme(legend.position="bottom")

tSNE Plot

参考

  1. How To Make tSNE plot in R - Data Viz with Python and R (datavizpyr.com)

  2. How to make UMAP plot in R - Data Viz with Python and R (datavizpyr.com)

  3. How To Make PCA Plot with R - Data Viz with Python and R (datavizpyr.com)

往期内容

  1. CNS图表复现|生信分析|R绘图 资源分享&讨论群!

  2. 组学生信| Front Immunol |基于血清蛋白质组早期诊断标志筛选的简单套路


木舟笔记矩阵

R实战| PCA、tSNE、UMAP三种降维方法在R中的实现相关推荐

  1. PCA与LDA两种降维方法原理的简要对比

    1.PCA(主成分分析) 无监督的,选择的是投影后数据方差最大的方向.因此PCA假设方差越大,代表的信息量越大,使用主成分来表示原始数据可以去除冗余的维度,达到降维的目的. 2.LDA(线性判别分析) ...

  2. 12种降维方法终极指南(含Python代码)

    12种降维方法终极指南(含Python代码) 你遇到过特征超过1000个的数据集吗?超过5万个的呢?我遇到过.降维是一个非常具有挑战性的任务,尤其是当你不知道该从哪里开始的时候.拥有这么多变量既是一个 ...

  3. 12种降维方法终极指南

    来源:Analytics Vidhya 编译:Bot 授权自 论智 你遇到过特征超过1000个的数据集吗?超过5万个的呢?我遇到过.降维是一个非常具有挑战性的任务,尤其是当你不知道该从哪里开始的时候. ...

  4. 流形学习的四种降维方法

    文章目录 流形学习 主成分分析(PCA) 原理 实现 手写版 调库版 缺点 奇异值分解(SVD) 原理 实现 线性判别分析(LDA) 原理 手写版 调库版 PCA与LDA 局部线性嵌入(LLE) 原理 ...

  5. t-SNE:最好的降维方法之一

    引言 本期由来自哈工大的同样热爱科普的潮汐之子为我们带来t-SNE的全方位普及,作者的研究方向为自然语言处理 说明 本文目的是做成一个60分钟t-SNE闪电入门简介,可能无法详细讲解原理,学术帝还请阅 ...

  6. win10系统停止更新服务器,Win10系统关闭自动更新功能的三种最佳方法

    Win10系统正式版发布在即,受到很多微软粉丝的追捧,并且微软也启动了为期一年的免费升级计划.很多用户使用Win10时发现一个问题,win10系统的自动更新功能是无法关闭的,导致用户都是给强制安装了推 ...

  7. linux电脑滚轮不能用,图文详解电脑鼠标滚轮不动了怎么办_电脑鼠标滚轮不能用的三种解决方法-系统城...

    近期,许多小伙伴发现电脑鼠标滚轮失灵了,无缘无故的就无法使用,浏览网页玩游戏都没办法继续进行,真的很麻烦.针对电脑鼠标滚轮不动了的故障,小编收集整理具体原因和解决方法给大家,希望大家采纳! 原因一:鼠 ...

  8. outlook邮箱邮件大小限制_Office Outlook 2010、2013附件大小超过了允许的范围限制三种解决方法图解...

    在outlook2010.2013中添加附件超过20M,就会提示:"附件大小超出了允许的范围"! outlook2007的附件默认大小是150M,而outlook2010.2013 ...

  9. outlook邮箱邮件大小限制_Office Outlook 2010、2013附件大小超过了允许的范围限制三种解决方法图解 – 爱分享...

    在outlook2010.2013中添加附件超过20M,就会提示:"附件大小超出了允许的范围"! outlook2007的附件默认大小是150M,而outlook2010.2013 ...

最新文章

  1. 基于java的IO流的文件读取系统
  2. win7下的iis配置
  3. 下图为双总线结构机器的数据通路_海康机器人为物流加码:进击吧,双11新“打工人”...
  4. jzoj3519-灵能矩阵【LCM,树形dp】
  5. java 反射操作字段_x86上的Java最终字段没有操作?
  6. 你真的懂数据分析吗?一文读懂数据分析的流程、基本方法和实践
  7. 搏天短网址生成网站源码v3.1
  8. struts2中的constant配置详解
  9. PHP中COOKIE即时生效,php实现cookie即时生效
  10. OpenGL超级宝典(第7版)环境配置和相关问题
  11. java监控屏幕_Java实现简单屏幕监控
  12. PS-fiveday-快速选择和魔棒工具(快速抠图)
  13. java.sql.SQLException: Value ”0000-00-00 00:00:00“ can not be represented as java.sql.Timestamp
  14. thinkphp5使用容联发送短信验证码
  15. kotlin集合过滤操作符
  16. H5浪漫告白气球表白
  17. input输入长度 vue_Vue实现input宽度随文字长度自适应操作
  18. 基于Springboot+Vue实现智能停车场管理系统
  19. 前端技术分享之3/8女神节抽奖活动
  20. CSS display详解

热门文章

  1. 【python接口自动化】csdn涨薪技术- DDT数据驱动测试
  2. 互zan宝V1.31程序源码
  3. 二、cas4.2.x修改支持http协议
  4. mount -o remount /system
  5. 针对未知三相电的R、S、T相,如何实现3V3A接线方式
  6. Android 应用统一字体设置 typeface
  7. 【博客611】linux路由表机制
  8. python 全栈开发 百度网盘,python全栈开发实战pdf
  9. 斐讯路由器怎样设置虚拟服务器,斐讯wifi路由器怎样设置
  10. FindText - 屏幕抓字生成字库工具与找字函数