专栏名称: 生信菜鸟团
生信菜鸟团荣誉归来,让所有想分析生物信息学数据的小伙伴找到归属,你值得拥有!
目录
相关文章推荐
生信人  ·  神经内分泌:聚焦难治性肿瘤 ·  4 天前  
51好读  ›  专栏  ›  生信菜鸟团

单细胞转录组代码(3)标准化、线性降维、非线性降维

生信菜鸟团  · 公众号  · 生物  · 2024-09-30 18:07

正文

学习笔记总结于『生信技能树』马拉松课程

本文学习单细胞转录组分析过程中的标准化、线性降维、非线性降维

五、标准化和降维

all.genes <- rownames(pbmc)
pbmc <- ScaleData(pbmc, features = all.genes)#这里pbmc从58MB变成349MB了,因为表达矩阵里面原本全是0和1,ScaleData()之后就不是0和1了
pbmc[["RNA"]]@scale.data[30:34,1:3]#查看数据框,发现ScaleData之后就有数字了;至此只能一行内之间的比较了,跨行比较将没有意义
图20

1.线性降维PCA

1.1线性降维

pbmc <- RunPCA(pbmc, features = VariableFeatures(pbmc))#尽可能在保留差异信息的同时,也保证了运算速度
# 单细胞数据需要考虑运算的速度和对象的大小,这关系着计算资源是否够用

# 查看前5个主成分由哪些feature组成
print(pbmc[["pca"]], dims = 1:5, nfeatures = 5)

# 查看以后,可能发现有些基因不在研究范围,如果不想用这个基因,就直接用代码从features里剔除就行,代码如下
# VariableFeatures(pbmc)[VariableFeatures(pbmc)!="MAF1"]或者↓
# setdiff(VariableFeatures(pbmc),c("COA6","MAF1"))#取差集

1.2权重与热图

下面这两个图没什么必要画出来,不过标准流程里面有,所以就写进来了,我们看一下

# 每个主成分对应基因的权重
VizDimLoadings(pbmc, dims = 1:2, reduction = "pca")
图21
# 每个主成分对应基因的热图
DimHeatmap(pbmc, dims = 1:15, cells = 500)#第9张图之后的热图已经比较模糊了
图22

1.3主成分筛选

一般不需要带着太多主成分进行后续分析,太多基因也会拖慢运行速度,所以需要筛选

①方法一

ElbowPlot(pbmc)#选拐点,例如此处7、8、9好像都可以,一般选自己觉得合适的几个数中最大的就行
# 可以用默认值15先做一遍
图23

②方法二

限速步骤:该步骤运行时间较长,所以在此设置:第一次运行这段代码会生成一个文件,当下次我们跑流程跑到这步代码时若检测到我们需要的文件已存在,则跳过这段代码。这样就不会因反复运行而耗费时间了

#方法二 (这个方法比较慢,所以注释掉了)
# 限速步骤
# f = "jc.Rdata"
# if(!file.exists(f)){
#   pbmc <- JackStraw(pbmc, num.replicate = 100)
#   pbmc <- ScoreJackStraw(pbmc, dims = 1:20)
#   save(pbmc,file = f)
# }

# 不过需要注意,这里有pbmc,如果我的pbmc发生改动,这里记得要删掉原Rdata,再重新运行

# load(f)
# JackStrawPlot(pbmc, dims = 1:20)

如图24,从第1到第13个,p值都是<0.05,所以需要这13个

按照图24来看我们需要选择数字13;而根据图23来看范围可以是7~10左右。如果实在不知怎么选择,就尽可能选较大的数

图24

两个方法任选其一,方法二运行太慢,一般直接用方法一即可

1.4 PC1和PC2  细胞聚类图

DimPlot(pbmc, reduction = "pca")+ NoLegend()

得到如图25细胞聚类情况,每个点即一个细胞。如果有多个样本,这张图将有不同颜色的点,这样就能看出细胞是否以样本为单位聚成一簇了。我们不希望看到样本与样本之间分得很开,比如样本1即PC1聚成一簇,样本二即PC2聚成一簇,因为这是批次效应导致的

图25
# 结合JackStrawPlot和ElbowPlot,挑选10个PC,所以这里dims定义为1:10
pbmc <- FindNeighbors(pbmc, dims = 1:10)
pbmc <- FindClusters(pbmc, resolution = 0.5) #resolution分辨率范围0~1,分辨率越小,分的簇数量就少(就是看起来越模糊),0.5是折中的值
# 结果聚成几类,用Idents查看
length(levels(Idents(pbmc)))

得到结果9,即分了9类

图26

FindClusters() 之后,每个细胞便有了不同的类别归属,每个细胞属于第几个簇都标好了

图27

2.非线性降维 UMAP 或 t-sne







请到「今天看啥」查看全文