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

并且简单介绍了数据标准化:NormalizeData()、选择高变基因:FindVariableFeatures()以及数据缩放:ScaleData()三个分析步骤
今天一起来学习了解一下——PCA降维:RunPCA()
PCA(Principal Component Analysis),即主成分分析方法,是一种使用最广泛的数据降维算法。 PCA的基本原理是通过线性变换将原始数据投影到一个新的坐标系中,使得投影后的数据具有最大的方差。这些新的坐标轴被称为主成分。

通过PCA降维,可以将高维数据转换为低维表示,从而减少数据的维度,去除冗余信息,并保留数据中最重要的特征。这有助于可视化和理解数据,同时可以提高后续分析的效率和准确性。
在单细胞下游分析中,在对数据进行标准化和缩放之后,我们会对数据进行PCA线性降维,用到的函数是RunPCA()
pbmc <- RunPCA(pbmc, features = VariableFeatures(object = pbmc))
运行完PCA降维之后,可以查看一下PCA的结果

结果中有基于细胞(cell.embeddings)以及基于基因(feature.loadings)的两个数据矩阵,都是对应的50个PC维度
如果选择feature.loadings中某一个PC进行排序,那就可以看到这个PC维度中相关性高的基因,根据这个基因可以辅助细胞鉴定

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

可以看到表示数据集中单细胞之间表现出相关性强的基因(feature)模块,这些基因就是对细胞区分度最大的基因。
#查看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的区别
>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维度下细胞的映射情况

FeaturePlot(pbmc,features = "PC_1",order = T)

刚刚我们通过feature.loadings知道PC-1中Positive基因主要是髓系相关比如LYZ、S100A9,所以cell也是髓系细胞高亮
FeaturePlot(pbmc,features = "PC_2",order = T)
PC-2中Positive基因主要是B细胞相关的,比如CD79A,MS4A1,所以cell也是B细胞高亮

Ⅰ. 通过VizDimLoadings可以可视化刚刚查看的不同维度的特征基因
#使用VizDimLoadings可视化降维基因
VizDimLoadings(pbmc, dims = 1:4, reduction = "pca")

Ⅱ. 通过DimHeatmap绘制以主成分为重点的热图,细胞和基因都按其主成分分数排序
DimHeatmap(pbmc, dims = 1:6, cells = 500, balanced = TRUE)
# balanced = TRUE,代表绘制具有 + 和 - 分数的相同数量的基因。

可以基于DimHeatmap的参数对图片进行一些调整,让其更符合我们的需求
DimHeatmap(pbmc,dims = 1, cells = 1000,
balanced = T, fast = F, nfeatures = 30)+
scale_fill_viridis()

也可以根据我们感兴趣PC的前十个features,提取对应的基因进行热图的绘制
#整理需要显著相关的前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
)

为了克服scRNA-seq数据的任何单一特征中的广泛技术噪音,Seurat根据细胞的PCA评分对细胞进行聚类,每个PC基本上代表一个“元特征”,该“元特征”结合了相关特征集的信息。排名靠前的主成分表示数据集的稳健压缩。
可以通过肘部图来辅助我们确定PCA的维度
肘部图——根据每个分量(函数)解释的方差百分比对主要分量进行排序
ElbowPlot(pbmc)
基于官网的pbmc的数据集,使用肘部图可视化主要PC的标准差,可以看到PC9-10周围的“肘部”,这表明大多数真实信号是在前10个PC中捕获的。PC维度选择肘部附近的值比如10、15都可以。
