在对单细胞转录组数据标准化之后,需要对数据进行降维。
那么降维的目的是什么呢?
假设一共1000个细胞,每个细胞只有一个基因(基因Ⅰ)的表达,那么这些细胞会分布在以基因Ⅰ为x轴的一维坐标轴上;如果每个细胞有两个基因(基因Ⅰ、基因Ⅱ)表达,那么这些细胞会分布在以基因Ⅰ为x轴(y轴),基因Ⅱ为y轴(x轴)的二维平面上;如果每个细胞有三个基因(基因Ⅰ、基因Ⅱ、基因Ⅲ)表达,以此类推……
现实中,每个细胞中的基因表达往往成千上万,那么就有成千上万个纬度。因此我们需要降维,将在细胞间变化幅度不大的基因降维去掉,用尽可能少的纬度展示数据的真实结构。
如果已经安装,此步请跳过。
install.packages('Seurat')
install.packages('dplyr')
install.packages('tidyverse')
install.packages('patchwork')
library(Seurat)
library(dplyr)
library(tidyverse)
library(patchwork)
setwd("D:/sc-seq/BC21")
根据自己数据的存放位置自定义路径。
该数据为标准化后的数据。
scRNA <-load("scRNA1.Rdata")
RunPCA函数格式:RunPCA(object,features = NULL, npcs = 50,……)
object:标准化后的Seurat对象;
features:用来进行PCA的基因:为单细胞转录组 | 数据归一化与筛选高变基因中鉴定的高变基因;
npcs:计算和存储的PC数(默认为 50)。
scRNA1 <- RunPCA(scRNA1, features = VariableFeatures(scRNA1))
降维信息储存在下图红框所示"pca"中;蓝色框中3854表示为3854个细胞,50表示50个纬度。即:将所有高变基因降维到了50个纬度。
# 提取pca信息
pca <- scRNA1@reductions[["pca"]]@cell.embeddings
# 查看pca信息
view(pca)
Seurat根据PCA分数对细胞聚类,每个PC基本上表示一个特征,该特征结合了相关特征集上的信息。
下图中PC1解释最大的数据差异,PC2解释了第二大部分差异,PC3解释了第三大部分差异,以此类推……
5.2 纬度数的选择
我们可以通过ElbowPlot绘制图片查看降维的效果。
ElbowPlot函数格式:ElbowPlot(object, ndims = 20, reduction = "pca")
object:标准化后的Seurat对象;
ndims:绘制标准差的维数;
reduction:绘制方法。
# 绘图
plot <- ElbowPlot(scRNA1, ndims=50, reduction="pca")
# 将图片输出到画板上
plot
我们可以通过图片找到转折点(即:转折点前变化幅度大,转折点后变化幅度小)来确定维度数数。
这在里我们选择15个维度数进行下游分析。
选择纬度数时建议一般情况纬度数选择10-20之间;同时更建议根据自己的数据情况,选择多组不同的纬度数进行下游分析,找到最佳结果。
保存存储PCA信息的数据用于后续分析。
save(scRNA1,file='scRNA1.Rdata')