前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >详解 R 语言的PCA与TSNE的降维聚类

详解 R 语言的PCA与TSNE的降维聚类

作者头像
白墨石
发布2021-04-23 11:51:18
1.3K0
发布2021-04-23 11:51:18
举报
文章被收录于专栏:生信情报站生信情报站

为了查看降维聚类的可视化效果,我们先用相似样本降维聚类,然后使用具有差异的样本查看聚类效果。

同时使用 PCA 与 TSNE 来观察两种不同方法的聚类效果。

文章目录

    • 一、相似样本的降维聚类
        • 1、载入所需的包
        • 2、构建两个相似样本数据集
        • 3、绘制热图
        • 4、绘制PCA
        • 5、绘制TSNE
    • 二、差异样本的降维聚类
        • 1、构建第三个具有差异的数据集
        • 2、绘制热图
        • 3、绘制PCA
        • 4、绘制TSNE
    • 全部代码

一、相似样本的降维聚类

1、载入所需的包
代码语言:javascript
复制
rm(list=ls())
library(pheatmap)
library(Rtsne)
library(ggfortify)
library(mvtnorm)
2、构建两个相似样本数据集
代码语言:javascript
复制
# 生成数据(随机)================================
# 设置基因数和细胞数
gene_num=100
cell_num=50
# 设置两个正态分布的随机矩阵(100*50)  作为两个样本矩阵
sample1=rnorm(gene_num*cell_num);
# 生成 100 基因,50 细胞的表达矩阵
dim(sample1)=c(gene_num,cell_num)
# 生成第二个样本
sample2=rnorm(gene_num*cell_num);dim(sample2)=c(gene_num,cell_num)
# 将两个样本合并为一个表达矩阵
sample_all=cbind(sample1,sample2)
# 添加列名
colnames(sample_all)=c(paste0('sample1_cell_',1:cell_num),
               paste0('sample2_cell_',1:cell_num))
# 添加行名
rownames(sample_all)=paste('gene_',1:gene_num,sep = '')
image.png
image.png
3、绘制热图
代码语言:javascript
复制
pheatmap(sample_all)
image.png
image.png
4、绘制PCA
代码语言:javascript
复制
# 画pca===============================================
# 转置,让行为样本
sample_all=t(sample_all)
# 添加样本分组信息
df=cbind(as.data.frame(sample_all),group=c(rep('group1',20),rep('group2',20)))
# prcomp()主成分分析
pca_dat <- prcomp( df[,1:(ncol(df)-1)] )
autoplot(pca_dat, data=df,colour = 'group')+theme_bw()
image.png
image.png
image.png
image.png
5、绘制TSNE
代码语言:javascript
复制
set.seed(123123)
sample_all=t(sample_all)
tsne_out <- Rtsne(sample_all,pca=FALSE,perplexity=10,theta=0.0)
# 获取tSNE的坐标值
str(tsne_out)
# 其中在Y中存储了画图坐标
tsnes=tsne_out$Y
colnames(tsnes) <- c("tSNE1", "tSNE2") #为坐标添加列名
# 在此基础上添加颜色分组信息,首先还是将tsnes这个矩阵变成数据框,然后增加一列group信息,最后映射在geom_point中
tsnes=as.data.frame(tsnes)
group=c(rep('group1',cell_num),rep('group2',cell_num))
tsnes$group=group
ggplot(tsnes, aes(x = tSNE1, y = tSNE2))+ geom_point(aes(col=group))
image.png
image.png

二、差异样本的降维聚类

1、构建第三个具有差异的数据集
代码语言:javascript
复制
# 第三个样本中表达量每个值加2
sample3=rnorm(gene_num*cell_num)+2;dim(sample3)=c(gene_num,cell_num)

sample_all=cbind(sample_all,sample3)
colnames(a3)=c(paste0('cell_01_',1:nc),paste0('cell_02_',1:nc))
rownames(a3)=paste('gene_',1:ng,sep = '')
image.png
image.png
2、绘制热图
代码语言:javascript
复制
pheatmap(sample_all)
image.png
image.png
3、绘制PCA
代码语言:javascript
复制
sample_all=t(sample_all);
dim(sample_all)
df=cbind(as.data.frame(a3),group=c(rep('group1',20),rep('group2',20)))
autoplot(prcomp( df[,1:(ncol(df)-1)] ), data=df,colour = 'group')+theme_bw()
image.png
image.png
image.png
image.png
4、绘制TSNE
代码语言:javascript
复制
set.seed(123123)
tsne_out <- Rtsne(sample_all,pca=FALSE,perplexity=10,theta=0.0)
tsnes=tsne_out$Y
colnames(tsnes) <- c("tSNE1", "tSNE2")
tsnes=as.data.frame(tsnes)
group=c(rep('group1',cell_num),rep('group2',cell_num),rep('group3',cell_num))
tsnes$group=group
ggplot(tsnes, aes(x = tSNE1, y = tSNE2))+ geom_point(aes(col=group))
image.png
image.png

全部代码

代码语言:javascript
复制
rm(list=ls())
library(pheatmap)
library(Rtsne)
library(mvtnorm)

# 生成数据(随机)================================
# 设置基因数和细胞数
gene_num=100
cell_num=50
# 设置两个正态分布的随机矩阵(100*50)  作为两个样本矩阵
sample1=rnorm(gene_num*cell_num);
# 生成 100 基因,50 细胞的表达矩阵
dim(sample1)=c(gene_num,cell_num)
# 生成第二个样本
sample2=rnorm(gene_num*cell_num);dim(sample2)=c(gene_num,cell_num)
# 将两个样本合并为一个表达矩阵
sample_all=cbind(sample1,sample2)
# 添加列名
colnames(sample_all)=c(paste0('sample1_cell_',1:cell_num),
               paste0('sample2_cell_',1:cell_num))
# 添加行名
rownames(sample_all)=paste('gene_',1:gene_num,sep = '')

# 绘制热图==============================================
pheatmap(sample_all)

# 绘制pca===============================================
# 转置,让行为样本
sample_all=t(sample_all)
# 添加样本分组信息
df=cbind(as.data.frame(sample_all),group=c(rep('group1',cell_num),rep('group2',cell_num)))
# prcomp()主成分分析
pca_dat <- prcomp( df[,1:(ncol(df)-1)] )
autoplot(pca_dat, data=df,colour = 'group')+theme_bw()


# 绘制tsne=============================================
# 进行tSNE
set.seed(123123)
sample_all=t(sample_all)
tsne_out <- Rtsne(sample_all,pca=FALSE,perplexity=10,theta=0.0)
# 获取tSNE的坐标值
str(tsne_out)
# 其中在Y中存储了绘制图坐标
tsnes=tsne_out$Y
colnames(tsnes) <- c("tSNE1", "tSNE2") #为坐标添加列名
# 在此基础上添加颜色分组信息,首先还是将tsnes这个矩阵变成数据框,然后增加一列group信息,最后映射在geom_point中
tsnes=as.data.frame(tsnes)
group=c(rep('group1',cell_num),rep('group2',cell_num))
tsnes$group=group
ggplot(tsnes, aes(x = tSNE1, y = tSNE2))+ geom_point(aes(col=group))
dev.off()
dev.new()

# 构建随机数据集==================================================
# 第三个样本中表达量每个值加2
sample3=rnorm(gene_num*cell_num)+2;dim(sample3)=c(gene_num,cell_num)
colnames(sample3)=c(paste0('sample3_cell_',1:cell_num))
rownames(sample3)=paste('gene_',1:gene_num,sep = '')
sample_all=cbind(sample_all,sample3)
# 绘制热图 =========================================================
pheatmap(sample_all)

# 绘制PCA ==========================================================
sample_all=t(sample_all);
dim(sample_all)
df=cbind(as.data.frame(sample_all),group=c(rep('group1',cell_num),rep('group2',cell_num),rep('group3',cell_num)))
autoplot(prcomp( df[,1:(ncol(df)-1)] ), data=df,colour = 'group')+theme_bw()

# 绘制tSNE=========================================================
set.seed(123123)
tsne_out <- Rtsne(sample_all,pca=FALSE,perplexity=10,theta=0.0)
tsnes=tsne_out$Y
colnames(tsnes) <- c("tSNE1", "tSNE2")
tsnes=as.data.frame(tsnes)
group=c(rep('group1',cell_num),rep('group2',cell_num),rep('group3',cell_num))
tsnes$group=group
ggplot(tsnes, aes(x = tSNE1, y = tSNE2))+ geom_point(aes(col=group))
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-04-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、相似样本的降维聚类
    • 1、载入所需的包
      • 2、构建两个相似样本数据集
        • 3、绘制热图
          • 4、绘制PCA
            • 5、绘制TSNE
            • 二、差异样本的降维聚类
              • 1、构建第三个具有差异的数据集
                • 2、绘制热图
                  • 3、绘制PCA
                    • 4、绘制TSNE
                    • 全部代码
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档