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

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

降维

在组学分析中,一般通过降维算法得到低纬度如二维或三维的新坐标数据,再结合可视化技术去展示样本的在新坐标的空间分布,接着加上统计检验结果证实整体组学水平上组间的差异性。降维算法有基于线性模型的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 |基于血清蛋白质组早期诊断标志筛选的简单套路
相关实践学习
基于Hologres轻量实时的高性能OLAP分析
本教程基于GitHub Archive公开数据集,通过DataWorks将GitHub中的项⽬、行为等20多种事件类型数据实时采集至Hologres进行分析,同时使用DataV内置模板,快速搭建实时可视化数据大屏,从开发者、项⽬、编程语⾔等多个维度了解GitHub实时数据变化情况。
阿里云实时数仓实战 - 用户行为数仓搭建
课程简介 1)学习搭建一个数据仓库的过程,理解数据在整个数仓架构的从采集、存储、计算、输出、展示的整个业务流程。 2)整个数仓体系完全搭建在阿里云架构上,理解并学会运用各个服务组件,了解各个组件之间如何配合联动。 3&nbsp;)前置知识要求:熟练掌握 SQL 语法熟悉 Linux 命令,对 Hadoop 大数据体系有一定的了解 &nbsp; 课程大纲 第一章&nbsp;了解数据仓库概念 初步了解数据仓库是干什么的 第二章&nbsp;按照企业开发的标准去搭建一个数据仓库 数据仓库的需求是什么 架构 怎么选型怎么购买服务器 第三章&nbsp;数据生成模块 用户形成数据的一个准备 按照企业的标准,准备了十一张用户行为表 方便使用 第四章&nbsp;采集模块的搭建 购买阿里云服务器 安装 JDK 安装 Flume 第五章&nbsp;用户行为数据仓库 严格按照企业的标准开发 第六章&nbsp;搭建业务数仓理论基础和对表的分类同步 第七章&nbsp;业务数仓的搭建&nbsp; 业务行为数仓效果图&nbsp;&nbsp;
相关文章
|
监控 安全 Linux
在Linux中,如何进行网络资源的优先级管理?
在Linux中,如何进行网络资源的优先级管理?
|
缓存 BI
[计算机网络(第八版)]第二章 物理层(学习复习笔记)
[计算机网络(第八版)]第二章 物理层(学习复习笔记)
|
监控 数据挖掘 Linux
Linux命令jobs:后台任务管理利器
`jobs`是Linux终端的利器,用于管理和查看后台任务。它显示当前会话中的作业状态,如运行、停止,可通过`Ctrl+Z`暂停任务,`bg`放后台,`fg`回前台。参数`-l`显示PID,`-n`显示最近状态变化的作业。`jobs`帮助高效监控和管理长时间运行的命令,如在数据分析时。记得使用正确任务编号,谨慎使用`kill`,并定期检查任务状态。
|
数据采集 数据可视化 数据挖掘
使用R语言进行主成分分析(PCA)
【4月更文挑战第26天】本文介绍了如何使用R语言进行主成分分析(PCA),包括安装必要包`stats`、`FactoMineR`和`factoextra`,数据预处理如标准化,使用`PCA()`函数执行PCA,以及通过`summary()`、`fviz_pca_ind()`和`fviz_pca_var()`进行结果解读和可视化。此外,还讨论了如何通过载荷系数解释主成分,强调PCA在数据降维和探索数据结构中的作用。
880 1
|
自然语言处理
分享开源项目Chatwoot
Chatwoot是一个开源的客户支持平台,它提供了一系列工具,使企业能够通过各种渠道(如电子邮件、社交媒体、网站聊天窗口等)与客户进行沟通。它的目标是为企业提供一个统一的界面,汇总来自不同渠道的客户对话,从而提高客户服务效率和效果。
340 0
|
数据挖掘 数据格式
R语言- ComplexHeatmap 绘制复杂热图示例
ComplexHeatmap是R语言中用于绘制复杂热图的一个重要包。它提供了一种灵活、高效、易于定制的方法来绘制热图,并支持多种数据类型和数据格式,支持包括多种热图类型,包括基本热图、聚类热图、分组热图、矩阵热图等。用户可以根据自己的需求选择不同的热图类型,并进行灵活的定制。在生物信息学、医学、生态学等领域得到广泛应用。 本文将通过一个复杂热图的创建示例分享 ComplexHeatmap的语法规则。
1215 0
|
存储 小程序 编译器
C语言从入门到实战——数据在内存中的存储方式
数据在内存中的存储方式是以二进制形式存储的。计算机中的内存由一系列存储单元组成,每个存储单元都有一个唯一的地址,用于标识它在内存中的位置。计算机可以通过这些地址来定位并访问内存中的数据。 数据在内存中的存储方式取决于数据的类型。数值类型的数据(例如整数、浮点数等)以二进制形式存储,并根据类型的不同分配不同的存储空间。字符串和字符数据由ASCII码存储在内存中。数据结构(例如数组、结构体、链表等)的存储方式也取决于其类型和组织结构。 总之,数据在内存中以二进制形式存储,并根据其类型和组织方式分配不同的存储空间。
419 0
|
SQL 监控 druid
深入了解Druid连接池:高性能数据库连接管理工具
在现代的应用开发中,数据库连接池是优化数据库访问性能的关键。Druid连接池作为一款高性能的数据库连接管理工具,为我们提供了强大的连接池功能和监控能力。本文将深入探讨Druid连接池的基本概念、特点,以及如何在实际应用中使用它进行高效的数据库连接管理。
1522 0
|
SQL 搜索推荐 Linux
Seurat -> RunPrestoAll 替代FindAllMarkers 加速DE 搜索
本文分享了一种在Seurat 流程里面加速大型数据集执行 DE 分析的方法 RunPrestoAll 的用法示例,以供参考学习
1570 0
|
计算机视觉
OpenCV-尺寸调整cv::resize
OpenCV-尺寸调整cv::resize
181 0