Visium HD 空间转录组分析探索之--细胞类型注释(RCTD解卷积)

前面一节经过基础分析后,我们得到了8um bin单细胞降维聚类结果,接下来就可以对上述降维聚类后的结果进行细胞类型注释了,细胞类型注释不管单细胞还是空间转录组都是非常重要的一步,如果对于细胞类型注释不准确,后面的分析基本上无从说起了。

      这里我们使用文章中提到的,基于单细胞数据进行解卷积注释,文章中用到的方法是RCTD(Robust decomposition of cell type mixtures in spatial transcriptomics) https://www.nature.com/articles/s41587-021-00830-w 使用单细胞数据作为参考来进行空间细胞类型注释。RCTD拟合一个统计模型,该模型估计每个bin的细胞类型混合,文中的例子证明RCTD可以准确地发现模拟和真实空间转录组数据中细胞类型的定位。

RCTD可以将单个细胞类型或细胞类型混合物分配到HD的bins。它有三种模式:

1. Doublet mode:每个点分配1-2种细胞类型,推荐用于高空间分辨率的技术,如Slide-seq和MERFISH;

2. Full mode: 每个点分配任何数量的细胞类型,推荐用于空间分辨率较差的技术,如100微米分辨率Visium;

3. Multi mode: 双重模式的扩展,可以发现每个点两种以上的细胞类型,作为全模式的替代选择。这里我们选择Doublet模式,每个8um bin分配1-2种细胞类型。

RCTD分析输入文件:

    Visium HD - Space Ranger outputs in 8µm bin size

    filtered_feature_bc_matrix.h5

    Single-cell data (Celltype annotated .rds)

在进行整合之前,我们需要在空间文件夹输出中将tissue_positions.parquet转换为tissue_positions.csv。目前,spacexr包无法识别tissue_positions.parquet。此外,spacexr正在空间文件夹中查找以tissue_positions开头的文件,这意味着如果tissue_positions.parquet和tissue_positions.csv都在空间文件夹中,则会混淆spacexr。因此,将parquet转换为CSV后,我们需要删除parquet文件或完全重命名parquet文件。

step1. 将空间坐标文件tissue_posistions.parquet转换成csv格式的tissue_positions.csv文件,并删除/spatial文件夹下tissue_posistions.parquet文件

library(arrow)
tissue_pos <- read_parquet("./SpaceRanger_HD_8micron/spatial/tissue_positions.parquet")
write.table(
    tissue_pos,
    "./SpaceRanger_HD_8micron/spatial/tissue_positions.csv",
    col.names=TRUE, 
    row.names=FALSE, 
    quote=FALSE, 
    sep=","
)
system("rm ./SpaceRanger_HD_8micron/spatial/tissue_positions.parquet")

step2. 读取单细胞数据,构造reference;开始解卷积分析。

ImmuRef <- readRDS('./scRNA_Human_CRC_P1.rds')
CountRef <- GetAssayData(ImmuRef, slot = "counts")
CTRef<[email protected]$Ident
CTRef<-gsub("/","_",CTRef)
CTRef<-as.factor(CTRef)
names(CTRef)<-rownames([email protected])
## 构造reference对象
reference <- Reference(CountRef[,names(CTRef)], CTRef , colSums(CountRef))

# Deconvolve HD Data
counts<-Read10X_h5("./SpaceRanger_HD_8micron/spatial/filtered_feature_bc_matrix.h5")
coords<-read_parquet("./SpaceRanger_HD_8micron/spatial/tissue_positions.parquet", as_data_frame = TRUE)
coords <- as.data.frame(coords)
rownames(coords)<-coords$barcode
coords<-coords[colnames(counts),]
coords<-coords[,3:4]
nUMI <- colSums(counts)

puck <- SpatialRNA(coords, counts, nUMI)
barcodes <- colnames(puck@counts)

myRCTD <- create.RCTD(puck, reference, max_cores = 20)
myRCTD <- run.RCTD(myRCTD, doublet_mode = 'doublet')

RCTD_result <- data.frame(ID=rownames(myRCTD@results$results_df), myRCTD@results$results_df)
write.table(RCTD_result, file = file.path(sample_dir, 'RCTD_result.txt'), sep = '\t', row.names = FALSE, col.names = TRUE)

step3. 解卷积结果展示

adata = sc.read_h5ad('./adata_P1.h5ad')
rctd_res = pd.read_csv('./RCTD_result.txt', index_col=0)
rctd_res = rctd_res.dropna()
adata.obs = pd.merge(adata.obs, rctd_res, left_index=True, right_index=True, how='left')
adata = adata[~adata.obs['first_type'].isna()]

with rc_context({'figure.figsize': (8, 8)}):
    ov.pl.embedding(
        adata,
        basis='X_umap',
        color=['first_type'],
        size=4,
        show=False, 
        title='RCTD CellType',
        add_outline=False, 
        frameon='small',
        legend_fontoutline=2,
    )

with rc_context({'figure.figsize': (8, 8)}):
    sc.pl.spatial(
        adata, 
        color=['first_type'],
        title='RCTD CellType',
        library_id='P1',
        alpha_img=0.3
    )

 UMAP展示细胞类型注释结果

空间切片展示细胞类型

拿到单细胞注释结果后就可以进行一系列基于空间的后续分析了,包括邻域分析、空间邻近度分析、最近邻分析、细胞空间共定位、细胞空间通讯、空间信号流等个性化分析了。

微信公众号: 生信大杂烩  

你可能感兴趣的:(Visium,HD,机器学习,python)