对应原版教程第8章http://bioconductor.org/books/release/OSCA/overview.htm 细胞的测序结果一般都有1万多的基因。从表达水平来看,其中大部分的信息可能都是较为“普通”的。如何从中抽取出能够最大程度表征细胞间异质性的基因是本小节的主要目的。
笔记要点
subset.row=
参数(建议)sce.pbmc
#class: SingleCellExperiment
#dim: 33694 3985
#assays(2): counts logcounts
sce.416b
#class: SingleCellExperiment
#dim: 46604 185
#assays(2): counts logcounts
绘制基因平均表达量(log转换)和方差的点图,拟合一条曲线,近似表示该表达量的基因受技术误差导致的方差。
library(scran)
dec.pbmc <- modelGeneVar(sce.pbmc)
fit.pbmc <- metadata(dec.pbmc)
plot(fit.pbmc$mean, fit.pbmc$var, xlab="Mean of log-expression",
ylab="Variance of log-expression")
curve(fit.pbmc$trend(x), col="dodgerblue", add=TRUE, lwd=2)
如下图所示,高于拟合曲线的点到拟合曲线的竖直距离表示有意义的生物水平造成的基因表达方差。
具体计算结果如下--bio = total - tech
。(至于负数的结果本身是没有意义的,可忽略)
dec.pbmc[order(dec.pbmc$bio, decreasing=TRUE),]
引申两个参数:
膨胀
,很大概率上高估了技术误差,拟合曲线表现为高跷的尾巴。可通过modelGeneVar()
函数的density.weights
参数设置(默认为T)。如下图,一般红线的拟合情况是我们期望看到的(density.weights=FALSE
)block
参数指定批次的设计
modelGenemodelGeneVar(sce.416b, "ERCC", block=sce.416b$block)
dec.cv2.pbmc <- modelGeneCV2(sce.pbmc)
fit.cv2.pbmc <- metadata(dec.cv2.pbmc)
plot(fit.cv2.pbmc$mean, fit.cv2.pbmc$cv2, log="xy")
curve(fit.cv2.pbmc$trend(x), col="dodgerblue", add=TRUE, lwd=2)
ratio = total / trend
。注意ratio指标是用除法,而不是2.1里描述的减法。因为CV2=(标准差/均值)2,需要排除分母均值的干扰,才能使不同基因的CV2指标具有可比性。dec.cv2.pbmc[order(dec.cv2.pbmc$ratio, decreasing=TRUE),]
关于选择2.1还是2.2计算基因的筛选指标,如教程所说,二者都能很好的捕获基因的生物水平造成的差异性。但后面计算细胞间的距离是基于log-counts的方法,因此使用方法2.1可能会更具有统一性。
#基于log-count的计算指标
dec.pbmc <- modelGeneVar(sce.pbmc)
hvg.pbmc.var <- getTopHVGs(dec.pbmc, n=1000)
#getTopHVGs(dec.pbmc, prop=0.1)
str(hvg.pbmc.var)
#chr [1:1000] "LYZ" "S100A9" "S100A8" "HLA-DRA" "CD74" "CST3" "TYROBP" "IGKC" "CCL5" "HLA-DRB1" ...
#基于log-count的计算指标
dec.pbmc <- modelGeneVar(sce.pbmc, )
hvg.pbmc.var <- getTopHVGs(dec.pbmc, n=1000)
str(hvg.pbmc.var)
#chr [1:1000] "PPBP" "PRTFDC1" "HIST1H2AC" "FAM81B" "PF4" "GNG11" "KIAA1211" "HIST2H2BE" ...
根据教程,再简单列举几种其它方法
getTopHVGs()
函数的fdr.threshold
参数。getTopHVGs(dec.pbmc, fdr.threshold=0.05)
bio
<=0ratio
<=1合格
的高变基因getTopHVGs(dec.pbmc, var.threshold=0)
bio
> 0的基因;ratio
> 1的基因。之后教程还举出一种方法是预先定义一组基因集作为作为高变基因。虽然与高变基因最初定义不符,但在某些情况下还是挺有意思的,就不展开了(其实没怎么看明白),可参看原教程。
确定高变基因后,后续降维操作主要根据能够表示细胞间生物水平差异的高变基因展开
dec.pbmc <- modelGeneVar(sce.pbmc)
chosen <- getTopHVGs(dec.pbmc, prop=0.1)
str(chosen)
sce.pbmc.hvg <- sce.pbmc[chosen,]
dim(sce.pbmc.hvg)
#[1] 1274 3985
subset.row=
参数(建议)# Performing PCA only on the chosen HVGs.
library(scater)
sce.pbmc <- runPCA(sce.pbmc, subset_row=chosen)
reducedDimNames(sce.pbmc)
rowSubset()
函数,将高变基因信息储存到sce对象里(可以添加多次)rowSubset(sce.pbmc,"hvg")=chosen
colnames(rowData(sce.pbmc))
rowData(sce.pbmc)[,2][rowData(sce.pbmc)[,3]]
“uninteresting” biological variation
;例如管家基因house keeping gene,一般可忽略,统称为技术误差。modelGeneVarWithSpikes(sce.416b, "ERCC")
modelGeneVarByPoisson(sce.pbmc)