ixxmu / mp_duty

抓取网络文章到github issues保存
https://archives.duty-machine.now.sh/
122 stars 30 forks source link

空间单细胞取巧办法 #2216

Closed ixxmu closed 2 years ago

ixxmu commented 2 years ago

https://mp.weixin.qq.com/s/3aOvNnToi4Zt5BVR0sjDoA

github-actions[bot] commented 2 years ago

空间单细胞取巧办法 by 生信技能树

我们做单细胞其实最开始都需要降维聚类分群,最后就是看不同单细胞亚群的比例变化,每个单细胞亚群都是成百上千个细胞的组合。然后看同条件下具体的某个单细胞亚群的表达量变化,但是我们不会关心具体的每个单细胞亚群里面的单个细胞的表达量,也就是说并没有真正的单个细胞的分析。

在没有单细胞转录组技术的年代,我们如果有足够的流式筛选技术提取到各个单细胞亚群后去普通转录组,得到的图表和生物学结论未必差到哪里。同理,目前的空间单细胞其实也不需要具体到一个平面的每个点的细胞,终归是需要把平面划分为不同区域。扪心自问,如果真的是让你关心每个单细胞或者说空间里面的每个点,你玩的过来吗?分门别类的思想无处不在,既然我们并不关心具体的每个单细胞的表达量,而是看各个单细胞亚群的表达量,所以就有了流式筛选的策略,同理我们并不关心空间上面的每个点,而是划分为不同区域,所以就有了荧光显微切割的多位点取样。

这里,我们介绍一个空间单细胞取巧办法,就是PADME-seq技术,是最近刷朋友圈看到的2022年5月发表在CELL杂志的文章:《Quiescent cancer cells resist T cell attack by forming an immunosuppressive niche》,提到了一个看起来高大上的单细胞技术photo-conversion of areas to dissect micro-environments (PADME-seq) ,其实它就是 photo-labeling, FACS-sorting, and scRNA-seq这3个技术的整合。

  • we had 1,743 and 975 cells from inside the areas of QCCs for each experiment respectively,
  • 1,968 and 2,259 in non-QCC regions.

可以看到, photo-labeling, 就是为了把样品空间分组,拆分成为了  inside the areas of QCCs 和  non-QCC regions. 的两个区域。

而FACS-sorting, 是因为这个研究仅仅是关心免疫细胞,所以相当于流式筛选策略。

最后是scRNA-seq,得到的是就是一个普通的单细胞表达量矩阵啦。

PADME-seq技术示意图

所以可以回归到常规的降维聚类分群:

 

因为就是两个不同区域的分组,所以可以看细胞比例差异:

细胞比例差异

虽然是两个不同区域的分组, 但是他们都是免疫微环境,所以细胞亚群构成是一样的,仅仅是具体比例会稍微有一点点变化。

然后提取感兴趣的T细胞亚群,进行细分:

T细胞亚群细分

单细胞亚群合理的命名就必须要有各自高表达量基因及其生物学功能注释,作为支撑。

各自高表达量基因及其生物学功能注释

蛮有意思的,它对失调的T细胞细分是 :

  • terminally exhausted (Prf1, Havcr2, Gzmb, and Il2rb),
  • intermediate exhausted (Tnfrsf4, Lag3, Ifng, Ccl3, Tnfrsf9, and Csf1),
  • proliferative (mKi67 and Cdk1),
  • progenitor exhausted (Cd28, Cxcr3, Ifit1, and Stat1)

跟我们之前提到的不太一样。很容易下载 GSE198714_RAW.tar 后,单个样品独立读取:

rm(list=ls())
options(stringsAsFactors = F
library(Seurat)
# 你的文件夹里面的需要有3个10x文件哦! 
ct = Read10X(file.path(dir,pro))
ct[[1]] # RNA:Gene Expression
ct[[2]] # HTO:Antibody Capture

y = as.data.frame(ct[[2]])
v.htos <-   y [colSums(  y )>0
# 从700万,减少到了 45万 

umi = ct[[1]]
umi=umi[,colnames(umi) %in% colnames(v.htos)]
identical(colnames(umi) ,colnames(v.htos))

sce.hashtag <- CreateSeuratObject(counts = umi,
                                  min.cells = 5,
                                  min.features = 200)
sce.hashtag

# Normalize RNA data with log normalization
sce.hashtag <- NormalizeData(sce.hashtag)
# Find and scale variable features
sce.hashtag <- FindVariableFeatures(sce.hashtag, 
                                    selection.method = "mean.var.plot")
sce.hashtag <- ScaleData(sce.hashtag, 
                         features = VariableFeatures(sce.hashtag))
sce.hashtag


# Add HTO data as a new assay independent from RNA
v.htos = v.htos[,colnames(v.htos) %in% colnames(sce.hashtag)]
sce.hashtag[["HTO"]] <- CreateAssayObject(counts = v.htos)
names(sce.hashtag)
# Normalize HTO data, here we use centered log-ratio (CLR) transformation
sce.hashtag <- NormalizeData(sce.hashtag, 
                             assay = "HTO"
                             normalization.method = "CLR"
head(sce.hashtag@meta.data)

VlnPlot(sce.hashtag, features = c("nFeature_RNA""nCount_RNA",
                                  "nCount_HTO","nFeature_HTO"), 
        ncol = 2,pt.size = 0)

sce.hashtag <- HTODemux(sce.hashtag,
                        assay = "HTO"
                        positive.quantile = 0.99)
sce.hashtag
table(sce.hashtag$HTO_classification.global)
sce.hashtag@assays
table(sce.hashtag$hash.ID)

Idents(sce.hashtag) <- "hash.ID"
VlnPlot(sce.hashtag, features = "nCount_RNA", pt.size = 0, log = TRUE)
# FeatureScatter(sce.hashtag, feature1 = "rna_HBE1", feature2 = "rna_S100A9")

# First, we will remove negative cells from the object
table(Idents(sce.hashtag))
sce.hashtag.subset <- subset(sce.hashtag, 
                             idents = c("Negative","Doublet"), 
                             invert = TRUE)
table(Idents(sce.hashtag.subset)) 
sce.hashtag.subset <- RunPCA(sce.hashtag.subset)
sce.hashtag.subset <- RunUMAP(sce.hashtag.subset,dims=1:10)
DimPlot(sce.hashtag.subset) 
ggsave('umap.pdf')
save(sce.hashtag.subset,file = 'sce.hashtag.subset.Rdata')

感兴趣的可以试试看哦,我就没有精力继续细跟 这个photo-conversion of areas to dissect micro-environments (PADME-seq) 啦。

目前单细胞技术实在是太多了,尤其是单细胞多组学,让我们应接不暇。比如刚刚刷到了一个 May 08, 2022 的 综述:《Into the multiverse: advances in single-cell multiomic profiling 》

单细胞多组学

不知道大家是否有精力去follow这些技术呢?

文末友情宣传

强烈建议你推荐给身边的博士后以及年轻生物学PI,多一点数据认知,让他们的科研上一个台阶:


ixxmu commented 2 years ago

CreateAssayObject 给sce 增加矩阵; NormalizeData的方法 normalization.method = "CLR"