首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >单细胞PCA降维结果理解

单细胞PCA降维结果理解

作者头像
生信技能树jimmy
发布于 2024-05-31 21:20:46
发布于 2024-05-31 21:20:46
2K0
举报
文章被收录于专栏:单细胞天地单细胞天地

前情提要

在上一期推文单细胞数据标准化及高变基因鉴定里面有整理单细胞下游分析基本流程及使用到的函数

并且简单介绍了数据标准化:NormalizeData()、选择高变基因:FindVariableFeatures()以及数据缩放:ScaleData()三个分析步骤

今天一起来学习了解一下——PCA降维:RunPCA()

PCA降维原理

PCA(Principal Component Analysis),即主成分分析方法,是一种使用最广泛的数据降维算法。 PCA的基本原理是通过线性变换将原始数据投影到一个新的坐标系中,使得投影后的数据具有最大的方差。这些新的坐标轴被称为主成分。

通过PCA降维,可以将高维数据转换为低维表示,从而减少数据的维度,去除冗余信息,并保留数据中最重要的特征。这有助于可视化和理解数据,同时可以提高后续分析的效率和准确性。

单细胞PCA降维

在单细胞下游分析中,在对数据进行标准化和缩放之后,我们会对数据进行PCA线性降维,用到的函数是RunPCA()

代码语言:javascript
复制
pbmc <- RunPCA(pbmc, features = VariableFeatures(object = pbmc))

PCA结果理解

运行完PCA降维之后,可以查看一下PCA的结果

结果中有基于细胞(cell.embeddings)以及基于基因(feature.loadings)的两个数据矩阵,都是对应的50个PC维度

如果选择feature.loadings中某一个PC进行排序,那就可以看到这个PC维度中相关性高的基因,根据这个基因可以辅助细胞鉴定

代码语言:javascript
复制
#查看前几个PC维度及其特征基因
print(pbmc[["pca"]], dims = 1:5, nfeatures = 10)

可以看到表示数据集中单细胞之间表现出相关性强的基因(feature)模块,这些基因就是对细胞区分度最大的基因。

代码语言:javascript
复制
#查看PC1,2的相关性基因,并且可视化结果

>print(pbmc[["pca"]], dims = 1:2, nfeatures = 10)

PC_ 1 
Positive:  CST3, TYROBP, LST1, AIF1, FTL, FTH1, LYZ, FCN1, S100A9, TYMP 
Negative:  MALAT1, LTB, IL32, IL7R, CD2, B2M, ACAP1, CD27, STK17A, CTSW 
PC_ 2 
Positive:  CD79A, MS4A1, TCL1A, HLA-DQA1, HLA-DQB1, HLA-DRA, LINC00926, CD79B, HLA-DRB1, CD74 
Negative:  NKG7, PRF1, CST7, GZMB, GZMA, FGFBP2, CTSW, GNLY, B2M, SPON2

可以看到PC_1的Positive基因主要是髓系相关比如LYZ、S100A9;Negative基因主要是淋巴免疫相关的,所以PC_1就可以很好的把这两个类群的细胞区分开来

然后PC_ 2中Positive基因主要是B细胞相关的,比如CD79A,MS4A1;Negative基因主要是NKG7、PRF1的NK细胞相关的Marker基因,所以PC_2维度可以很好的把B细胞和NK细胞区分出来

以此类推,我们也可以看一下PC2和3的区别

代码语言:javascript
复制
>print(pbmc[["pca"]], dims = 2:3, nfeatures = 10)

PC_ 2 
Positive:  CD79A, MS4A1, TCL1A, HLA-DQA1, HLA-DQB1, HLA-DRA, LINC00926, CD79B, HLA-DRB1, CD74 
Negative:  NKG7, PRF1, CST7, GZMB, GZMA, FGFBP2, CTSW, GNLY, B2M, SPON2 
PC_ 3 
Positive:  HLA-DQA1, CD79A, CD79B, HLA-DQB1, HLA-DPB1, HLA-DPA1, CD74, MS4A1, HLA-DRB1, HLA-DRA 
Negative:  PPBP, PF4, SDPR, SPARC, GNG11, NRGN, GP9, RGS18, TUBB1, CLU 

>DimPlot(sce,reduction = 'pca',dim=2:3,label = T,repel = T)

从PC_ 3的Negative基因——PPBP, PF4,以及可视化的结果可以看到,通过PC_ 3这个维度可以很好的把血小板(Platelet)区分出来

feature.loadings中每个PC都包含了全部的高变基因,但是每个PC中都只有少数的基因会显著相关(Positive或者Negative),通过这些基因就可以帮助我们区分不同的细胞

cell.embedding中就是细胞在PCA轴上的坐标映射,可以使用FeaturePlot查看不同PC维度下细胞的映射情况

代码语言:javascript
复制
FeaturePlot(pbmc,features = "PC_1",order = T)

刚刚我们通过feature.loadings知道PC-1中Positive基因主要是髓系相关比如LYZ、S100A9,所以cell也是髓系细胞高亮

代码语言:javascript
复制
FeaturePlot(pbmc,features = "PC_2",order = T)

PC-2中Positive基因主要是B细胞相关的,比如CD79A,MS4A1,所以cell也是B细胞高亮

不同方法查看特征基因

Ⅰ. 通过VizDimLoadings可以可视化刚刚查看的不同维度的特征基因

代码语言:javascript
复制
#使用VizDimLoadings可视化降维基因
VizDimLoadings(pbmc, dims = 1:4, reduction = "pca")

Ⅱ. 通过DimHeatmap绘制以主成分为重点的热图,细胞和基因都按其主成分分数排序

代码语言:javascript
复制
DimHeatmap(pbmc, dims = 1:6, cells = 500, balanced = TRUE)

# balanced = TRUE,代表绘制具有 + 和 - 分数的相同数量的基因。

可以基于DimHeatmap的参数对图片进行一些调整,让其更符合我们的需求

代码语言:javascript
复制
DimHeatmap(pbmc,dims = 1, cells = 1000,
           balanced = T, fast = F, nfeatures = 30)+
  scale_fill_viridis()

也可以根据我们感兴趣PC的前十个features,提取对应的基因进行热图的绘制

代码语言:javascript
复制
#整理需要显著相关的前10个基因
cg1='CST3, TYROBP, LST1, AIF1, FTL, FTH1, LYZ, FCN1, S100A9, TYMP'
cg2='MALAT1, LTB, IL32, IL7R, CD2, B2M, ACAP1, CD27, STK17A, CTSW '
cg=trimws(c(strsplit(cg1,',')[[1]],
            strsplit(cg2,',')[[1]]))
cg

tmp <- ScaleData(pbmc, features = cg)

ttt = tmp@assays$RNA@scale.data[cg,order(pbmc@reductions$pca@cell.embeddings[,1])]

pheatmap::pheatmap(ttt,show_rownames = T,show_colnames = F,
                   cluster_rows = F,cluster_cols = F
)

PCA维度确认

为了克服scRNA-seq数据的任何单一特征中的广泛技术噪音,Seurat根据细胞的PCA评分对细胞进行聚类,每个PC基本上代表一个“元特征”,该“元特征”结合了相关特征集的信息。排名靠前的主成分表示数据集的稳健压缩。

可以通过肘部图来辅助我们确定PCA的维度

肘部图——根据每个分量(函数)解释的方差百分比对主要分量进行排序

代码语言:javascript
复制
ElbowPlot(pbmc)

基于官网的pbmc的数据集,使用肘部图可视化主要PC的标准差,可以看到PC9-10周围的“肘部”,这表明大多数真实信号是在前10个PC中捕获的。PC维度选择肘部附近的值比如10、15都可以。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-05-29,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 前情提要
  • PCA降维原理
  • 单细胞PCA降维
  • PCA结果理解
  • 不同方法查看特征基因
  • PCA维度确认
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档