微信交流群有小伙伴提到了近五年来伴随着单细胞转录组数据的“大行其道”的一些科研乱象,大意就是不少课题组的金主们对单细胞背景一无所知也不愿意深入学习,仅仅是凭借着各个公众号推文的“只言片语”就贸然开启了自己的单细胞转录组项目。
比如大多数人就是做了两分组的六个样品,十万块钱左右的项目。但是呢,因为金主们的外行,所以很多公司走标准流程的过程中其实可以完全不做单细胞的建库测序出真实数据,可以凭空捏造数据。。。。
看完了微信交流群的讨论,让我不寒而栗。我也简单的了解了一下单细胞数据造假的可能性,确实是有一些统计学算法是可以模拟生成单细胞转录组数据,从而跳过这个单细胞的建库测序的过程,如下所示:
- Splatter,https://bioconductor.org/packages/devel/bioc/vignettes/splatter/inst/doc/splatter.html
- SplatParams,https://bioconductor.org/packages/devel/bioc/vignettes/splatter/inst/doc/splat_params.html
- scDesign1,2019年5月发表在bioinformatics杂志的文章,
- scDesign2,2021年5月发表在Genome Biology杂志的文章, https://github.com/JSB-UCLA/scDesign2
- scDesign3,2023年5月发表在Nature Biotechnology杂志的文章,https://songdongyuan1994.github.io/scDesign3/docs/index.html
首先看Splatter来生成两分组的六个样品单细胞项目数据
需要自己读文档哈:
然后我看到了一个中文翻译:模拟单细胞RNA测序数据的R包-Splatter,感兴趣的也可以读一下。主要是使用使用getParams
或setParams
函数即可,比如下面我们演示了5万个细胞的表达量矩阵,它们都是有2万个基因
# BiocManager::install("splatter")
library(splatter)
set.seed(1)
(params <- newSplatParams())
params <- setParams(params, update = list(nGenes = 2000, batchCells = 3000,mean.rate = 0.1))
params <- setParams(params, mean.shape = 0.5, de.prob = 0.2,lib.loc = 12, lib.scale = 0.6)
sim <- splatSimulate(params)
counts(sim)[1:4,1:4]
library(Seurat)
sce.all = CreateSeuratObject(counts =counts(sim) )
as.data.frame(sce.all@assays$RNA$counts[1:10, 1:2])
head(sce.all@meta.data, 10)
table(sce.all@meta.data$orig.ident)
然后就可以使用同样的代码但是修改里面的参数,比如文库大小等,这样的话就输出另外一个3万个细胞的2万个基因的表达量矩阵。这两个分组每个都有3万个细胞,所以可以随机分配给3个样品。这样的话,两分组的六个样品,十万块钱左右的项目的单细胞转录组数据就被模拟出来了哈!
当然了,这个模拟数据还缺里面的基因名字的合理性问题,因为如果你拿它去跑我们的单细胞转录组降维聚类分群会发现基因是不合理的,但是对真正理解这些包的用法的小伙伴来说,并不是难事。因为它可以依赖于一个项目模板数据去模拟类似的数据,这样的话就看起来合理很多!
其它包的用法,我这里就不赘述了,感觉要是教给了心术不正的小伙伴来说,就跟目前的chatGPT一样的,让人不寒而栗!