前面我们已经完成了cytof数据处理的主要步骤,读入文件,质量控制,降维聚类分群,生物学注释和细胞亚群比例差异分析。 目录如下:
- 1.cytof数据资源介绍(文末有交流群)
- 2.cytofWorkflow之读入FCS文件(一)
- 3.cytofWorkflow之构建SingleCellExperiment对象(二)
- 4.cytofWorkflow之基本质量控制(三)
- 5.cytofWorkflow之聚类分群(四)
- 6.cytofWorkflow之人工注释生物学亚群(五)
- 7.cytofWorkflow之亚群比例差异分析(六)
其实跟纯粹的单细胞转录组就非常类似了,不过单细胞转录组数据分析的细节以及背景我就不赘述了,看我在《单细胞天地》的单细胞基础10讲:
- 01. 上游分析流程
- 02.课题多少个样品,测序数据量如何
- 03. 过滤不合格细胞和基因(数据质控很重要)
- 04. 过滤线粒体核糖体基因
- 05. 去除细胞效应和基因效应
- 06.单细胞转录组数据的降维聚类分群
- 07.单细胞转录组数据处理之细胞亚群注释
- 08.把拿到的亚群进行更细致的分群
- 09.单细胞转录组数据处理之细胞亚群比例比较
以及各式各样的个性化汇总教程,差不多就明白了。
基本流程走完了,仅仅是万里长征第一步而已。我们可以开始尝试分析一些文献的公共数据集啦,不过在处理那些数据的过程中,我们还需要传授给大家几个小技巧。
合并两个不同panel的cytof数据集
有一些情况下,你的同一个实验项目的多个FCS文件,它们的抗体顺序并不一致。如下:
sce1 <- prepData(fs, panel, md, features = panel$fcs_colname)
sce2 <- prepData(fs, panel, md, features = panel$fcs_colname)
rowData(sce1)[,1]
rowData(sce2)[,1]
可以看到,两个数据集的panel其实是一样的:
> rowData(sce1)[,1]
[1] "PerCP-Cy5-5-A" "APC-H7-A" "BV510-A" "PE-Cy7-A"
[5] "BV421-A" "Alexa Fluor 647-A" "PE-A" "FITC-A"
> rowData(sce2)[,1]
[1] "PerCP-Cy5-5-A" "APC-H7-A" "BV510-A" "PE-Cy7-A"
[5] "PE-A" "Alexa Fluor 647-A" "FITC-A" "BV421-A"
都是8个抗体,但是呢,顺序不一样。
这个时候需要对 SingleCellExperiment 对象了如指掌:http://www.bioconductor.org/packages/release/bioc/vignettes/scater/inst/doc/overview.html
different quantifications (e.g., counts, CPMs, log-expression) can be stored simultaneously in the assays slot,
and row and column metadata can be attached using rowData and colData, respectively.
metadata(1): experiment_info
assays(2): counts exprs
首先把SingleCellExperiment对象拆分
SingleCellExperiment对象比较复杂,需要自行阅读,http://www.bioconductor.org/packages/release/bioc/vignettes/scater/inst/doc/overview.html
拆分的代码如下:
ct1=assay(sce1,1)
ct1[1:4,1:4]
ex1=assay(sce1,2)
ex1[1:4,1:4]
r1=as.data.frame(rowData(sce1))
c1=as.data.frame(colData(sce1))
ct2=assay(sce2)
ct2[1:4,1:4]
ex2=assay(sce2,2)
ex2[1:4,1:4]
r2=as.data.frame(rowData(sce2))
c2=as.data.frame(colData(sce2))
然后把两个抗体对齐:
r1;r2
n=match(r1$channel_name,r2$channel_name)
r1;r2[n,]
# 首先合并抗体信号矩阵
ct=cbind(ct1,ct2[n,])
ex=cbind(ex1,ex2[n,])
# 然后合并细胞的样本来源及其分组信息
phe=rbind(c1,c2)
head(phe)
# 最后确定抗体的标记信息
r1 # 因为r2已经被修改回来成为了r1
# 参考 http://www.bioconductor.org/packages/release/bioc/vignettes/scater/inst/doc/overview.html
有了两个矩阵,assays(2): counts exprs ,以及抗体信息,样品信息,就可以重新组建SingleCellExperiment对象,它比较复杂,需要自行阅读,http://www.bioconductor.org/packages/release/bioc/vignettes/scater/inst/doc/overview.html
最后重新组建SingleCellExperiment对象
代码超级简单
sce <- SingleCellExperiment(
assays = list(counts = ct,exprs=ex),
colData = phe,
rowData = r1
)
sce
得到的全新的SingleCellExperiment对象就包含了两个不同panel顺序的cytof数据集啦。
如果不仅仅是panel顺序不一样
panel本身也不一样,就比较麻烦了,不同的panel可能研究的生物学问题不一样,或许有批次效应等其它未知的混杂因素。
需要具体问题具体分析啦。