使用Seurat进行单细胞VDJ免疫分析

NGS系列文章包括NGS基础、转录组分析 (Nature重磅综述|关于RNA-seq你想知道的全在这)、ChIP-seq分析 (ChIP-seq基本分析流程)、单细胞测序分析 (重磅综述:三万字长文读懂单细胞RNA测序分析的最佳实践教程 (原理、代码和评述))、DNA甲基化分析、重测序分析、GEO数据挖掘(典型医学设计实验GEO数据分析 (step-by-step) - Limma差异分析、火山图、功能富集)等内容。

小剧场:

我:老板,你听说没有楼上做的单细胞实验加了VDJ分析?
老板:VCD分析?哦,,我早就听过了!
我:老板,是VDJ分析?
老板:VDJ分析,哦对对就是VDJ分析,,,我早就说咱们也应该做了,你看看,又迟了一步,都怪你不提醒我!
我瞟了一眼她桌子上的淘宝页面(廉价灯芯裤),默默走开了。。。

其实我在介绍clonotypr (令我惊奇的是,当我把推送推出去的当天,我亲爱的作者就把该包从github撤了下来啊!)时说明过VDJ免疫分析对免疫及抗体产生的重要意义,这也是为什么现在许多做新冠单细胞分析的都会使用5’端测序联用VDJ测序分析

1. 为什么要进行单细胞免疫组库的分析

  • 应用方向一:探索肿瘤免疫微环境,辅助免疫治疗。

每个人都拥有一个自己的适应性免疫组库,TCR和BCR通过基因重组和体细胞突变取得多样性,使得我们身体可以识别和抵御各种内部和外部的入侵者。而肿瘤的发生往往躲避了人体T淋巴细胞而产生、增殖和转移。

使用10X Genomics ChromiumTM Single Cell Immune Profiling Solution可以捕捉肿瘤发生时的免疫微环境变化,寻找免疫治疗的靶点,从而辅助免疫治疗更好地抗击肿瘤。

  • 应用方向二:探索自身免疫性疾病和炎症性疾病发生机制,辅助疫苗的研究

自身免疫性疾病发生起始和发展的中心环节被认为是抗原特异性T细胞激活导致的,使用10X Genomics ChromiumTM Single Cell Immune Profiling Solution,可以解析自身免疫性疾病的发病机制,从而为疾病的诊疗提供依据。

  • 应用方向三:移植和免疫重建

器官或者骨髓移植时,经常会诱发宿主的排斥反应,从而发生慢性移植抗宿主病。同种异体反应随机分布在整个T细胞组库的交叉反应,因此延迟T细胞恢复和限制的T细胞受体多样性与异体移植后感染和疾病复发风险增加相关。

而我比较注意的是在疫苗接种前后BCR/TCR CDR3免疫组库的分析,最近medRxiv上发表的有关新冠的文献Immune Cell Profiling of COVID-19 Patients in the recovery stage by Single-cell sequencing中对不同BCR/TCR的VDJ重排进行分析,揭示了针对新冠特异的克隆扩增。

2. 免疫组库主要包括哪几个方面

T淋巴细胞(T cell)和B淋巴细胞(B cell)主要负责适应性免疫应答,其抗原识别主要依赖于T细胞受体(T cell recptor, TCR)和B细胞受体(B cell recptor, BCR),这两类细胞表面分子的共同特点是其多样性,可以识别多种多样的抗原分子。BCR的轻链和TCRβ链由V、D、J、C四个基因片段组成,BCR的重链和TCRα链由V、J、C三个基因片段组成,这些基因片段在遗传过程中发生重组、重排,组合成不同的形式,保证了受体多样性。其中变化最大的就是CDR3区。

3. 10× Genomics VDJ测序进行cellranger后的输出形式是什么样的?

Outputs:
- Run summary HTML:                                  /home/jdoe/runs/sample345/outs/web_summary.html
- Run summary CSV:                                   /home/jdoe/runs/sample345/outs/metrics_summary.csv
- All-contig FASTA:                                  /home/jdoe/runs/sample345/outs/all_contig.fasta
- All-contig FASTA index:                            /home/jdoe/runs/sample345/outs/all_contig.fasta.fai
- All-contig FASTQ:                                  /home/jdoe/runs/sample345/outs/all_contig.fastq
- Read-contig alignments:                            /home/jdoe/runs/sample345/outs/all_contig.bam
- Read-contig alignment index:                       /home/jdoe/runs/sample345/outs/all_contig.bam.bai
- All contig annotations (JSON):                     /home/jdoe/runs/sample345/outs/all_contig_annotations.json
- All contig annotations (BED):                      /home/jdoe/runs/sample345/outs/all_contig_annotations.bed
- All contig annotations (CSV):                      /home/jdoe/runs/sample345/outs/all_contig_annotations.csv
- Filtered contig sequences FASTA:                   /home/jdoe/runs/sample345/outs/filtered_contig.fasta
- Filtered contig sequences FASTQ:                   /home/jdoe/runs/sample345/outs/filtered_contig.fastq
- Filtered contigs (CSV):                            /home/jdoe/runs/sample345/outs/filtered_contig_annotations.csv
- Clonotype consensus FASTA:                         /home/jdoe/runs/sample345/outs/consensus.fasta
- Clonotype consensus FASTA index:                   /home/jdoe/runs/sample345/outs/consensus.fasta.fai
- Clonotype consensus FASTQ:                         /home/jdoe/runs/sample345/outs/consensus.fastq
- Concatenated reference sequences:                  /home/jdoe/runs/sample345/outs/concat_ref.fasta
- Concatenated reference index:                      /home/jdoe/runs/sample345/outs/concat_ref.fasta.fai
- Contig-consensus alignments:                       /home/jdoe/runs/sample345/outs/consensus.bam
- Contig-consensus alignment index:                  /home/jdoe/runs/sample345/outs/consensus.bam.bai
- Contig-reference alignments:                       /home/jdoe/runs/sample345/outs/concat_ref.bam
- Contig-reference alignment index:                  /home/jdoe/runs/sample345/outs/concat_ref.bam.bai
- Clonotype consensus annotations (JSON):            /home/jdoe/runs/sample345/outs/consensus_annotations.json
- Clonotype consensus annotations (CSV):             /home/jdoe/runs/sample345/outs/consensus_annotations.csv
- Clonotype info:                                    /home/jdoe/runs/sample345/outs/clonotypes.csv
- Barcodes that are declared to be targeted cells:   /home/jdoe/runs/sample345/out/cell_barcodes.json
- Loupe V(D)J Browser file:                          /home/jdoe/runs/sample345/outs/vloupe.vloupe

首先我们来看看web.html对整个测序质量的评估:

我们看到在Enrichment中reads映射到VDJ基因的比例为80.7%,其中TRA/TRB代表TCR α/β链 ,map到TRA的比例为24.4%,map到TRB的比例为56%。当然,后面也会有蛮多指标的,比如VDJ注释,VDJ质量及表达等。。。

当然我们也会有很多表格,其中最重要的表格为contig_annotationclonotype

contig_annotation(BCR示例)

上面表格中的IGH和IGK/IGL代表BCR H和BCR L链 。看到这个表格,我第一反应其实是为什么D区基因(d_gene)多数均为None,主要原因还是D区通常较短又突变较多,因技术限制而常常捕捉不到。数据中也提供了CDR3的蛋白序列和核苷酸序列。

clonotype(TCR示例)

从以上数据可以看出,有部分克隆是由单链决定的。

那么如何将VDJ的克隆表型和scRNA-seq结合起来呢?其实大佬已经回答了这个问题:

add_clonotype <- function(tcr_location, seurat_obj){tcr <- read.csv(paste(tcr_folder,"filtered_contig_annotations.csv", sep=""))# Remove the -1 at the end of each barcode.# Subsets so only the first line of each barcode is kept,# as each entry for given barcode will have same clonotype.tcr$barcode <- gsub("-1", "", tcr$barcode)tcr <- tcr[!duplicated(tcr$barcode), ]# Only keep the barcode and clonotype columns.# We'll get additional clonotype info from the clonotype table.tcr <- tcr[,c("barcode", "raw_clonotype_id")]names(tcr)[names(tcr) == "raw_clonotype_id"] <- "clonotype_id"# Clonotype-centric info.clono <- read.csv(paste(tcr_folder,"clonotypes.csv", sep=""))# Slap the AA sequences onto our original table by clonotype_id.tcr <- merge(tcr, clono[, c("clonotype_id", "cdr3s_aa")])# Reorder so barcodes are first column and set them as rownames.tcr <- tcr[, c(2,1,3)]rownames(tcr) <- tcr[,1]tcr[,1] <- NULL# Add to the Seurat object's metadata.clono_seurat <- AddMetaData(object=seurat_obj, metadata=tcr)return(clono_seurat)}

怎么用呢?举个栗子吧:

数据下载

download.file("https://bioshare.bioinformatics.ucdavis.edu/bioshare/download/iimg5mz77whzzqc/vdj_v1_mm_balbc_pbmc.zip", "vdj_v1_mm_balbc_pbmc.zip")#这是小鼠的PBMC数据

加载R包

library(Seurat)
library(cowplot)

加载数据

## Cellranger
balbc_pbmc <- Read10X_h5("vdj_v1_mm_balbc_pbmc/vdj_v1_mm_balbc_pbmc_5gex_filtered_feature_bc_matrix.h5")s_balbc_pbmc <- CreateSeuratObject(counts = balbc_pbmc, min.cells = 3, min.features = 200, project = "cellranger")

提取线粒体基因

s_balbc_pbmc$percent.mito <- PercentageFeatureSet(s_balbc_pbmc, pattern = "^mt-")

增加T和B细胞的克隆信息

add_clonotype <- function(tcr_prefix, seurat_obj, type="t"){tcr <- read.csv(paste(tcr_prefix,"filtered_contig_annotations.csv", sep=""))# Remove the -1 at the end of each barcode.(注意,此步骤如果标记使用不同的barcode,比如多了个-1,可以使用 tcr$barcode <- gsub("-1", "", tcr$barcode)进行提取)# Subsets so only the first line of each barcode is kept,# as each entry for given barcode will have same clonotype.tcr <- tcr[!duplicated(tcr$barcode), ]# Only keep the barcode and clonotype columns.# We'll get additional clonotype info from the clonotype table.tcr <- tcr[,c("barcode", "raw_clonotype_id")]names(tcr)[names(tcr) == "raw_clonotype_id"] <- "clonotype_id"# Clonotype-centric info.clono <- read.csv(paste(tcr_prefix,"clonotypes.csv", sep=""))# Slap the AA sequences onto our original table by clonotype_id.tcr <- merge(tcr, clono[, c("clonotype_id", "cdr3s_aa")])names(tcr)[names(tcr) == "cdr3s_aa"] <- "cdr3s_aa"# Reorder so barcodes are first column and set them as rownames.tcr <- tcr[, c(2,1,3)]rownames(tcr) <- tcr[,1]tcr[,1] <- NULLcolnames(tcr) <- paste(type, colnames(tcr), sep="_")# Add to the Seurat object's metadata.clono_seurat <- AddMetaData(object=seurat_obj, metadata=tcr)return(clono_seurat)
}s_balbc_pbmc <- add_clonotype("vdj_v1_mm_balbc_pbmc/vdj_v1_mm_balbc_pbmc_t_", s_balbc_pbmc, "t")
s_balbc_pbmc <- add_clonotype("vdj_v1_mm_balbc_pbmc/vdj_v1_mm_balbc_pbmc_b_", s_balbc_pbmc, "b")
head(s_balbc_pbmc[[]])

我给解释一下以上function中每一步都在干什么:

  • 首先读入contig_annotations.csv,并赋给tcr

  • 去除tcr中重复的barcode,即如果具有相同的barcode,将以第一次出现的barcode为主来去重;

  • tcr中的barcoderaw_clonotype_id赋值于tcr

  • 读入clonotypes.csv,并赋给clono

  • tcrcolono进行merge(单细胞分析Seurat使用相关的10个问题答疑精选!),并赋给tcr

  • 将最后得到的,带有barcoderaw_clonotype_idcolonotcr对象以metadata的形式加入seurat object中。

发现很多的NA,非常正常啊,不是每个细胞都是T/B cell,然后还列出来了T/B CDR3的蛋白序列。

table(!is.na(s_balbc_pbmc$t_clonotype_id),!is.na(s_balbc_pbmc$b_clonotype_id))

s_balbc_pbmc <- subset(s_balbc_pbmc, cells = colnames(s_balbc_pbmc)[!(!is.na(s_balbc_pbmc$t_clonotype_id) & !is.na(s_balbc_pbmc$b_clonotype_id))])
#删除同时表达T、B克隆表型的细胞
s_balbc_pbmc

进行常规workflow

s_balbc_pbmc <- subset(s_balbc_pbmc, percent.mito <= 10)s_balbc_pbmc <- subset(s_balbc_pbmc, nCount_RNA >= 500 & nCount_RNA <= 40000)
s_balbc_pbmc <- NormalizeData(s_balbc_pbmc, normalization.method = "LogNormalize", scale.factor = 10000)
s_balbc_pbmc <- FindVariableFeatures(s_balbc_pbmc, selection.method = "vst", nfeatures = 2000)all.genes <- rownames(s_balbc_pbmc)
s_balbc_pbmc <- ScaleData(s_balbc_pbmc, features = all.genes)
s_balbc_pbmc <- RunPCA(s_balbc_pbmc, features = VariableFeatures(object = s_balbc_pbmc))

use.pcs = 1:30
s_balbc_pbmc <- FindNeighbors(s_balbc_pbmc, dims = use.pcs)
s_balbc_pbmc <- FindClusters(s_balbc_pbmc, resolution = c(0.5))
s_balbc_pbmc <- RunUMAP(s_balbc_pbmc, dims = use.pcs)
DimPlot(s_balbc_pbmc, reduction = "umap", label = TRUE)

让我们看看T细胞的marker的表达情况:

t_cell_markers <- c("Cd3d","Cd3e")
FeaturePlot(s_balbc_pbmc, features = t_cell_markers)

比如我知道某个b_cdr3s_aa我感觉特有意思,想在UMAP 图上进行表示,于是我先把他的蛋白序列找了出来,IGH:CARWGGYGYDGGYFDYW;IGK:CGQSYSYPYTF,然后:

DimPlot(s_balbc_pbmc, cells.highlight = Cells(subset(s_balbc_pbmc, subset = b_cdr3s_aa
+                                               == "IGH:CARWGGYGYDGGYFDYW;IGK:CGQSYSYPYTF")))

万“绿”丛中一点红!

当然你也可以在metadata中纳入更多的TCR/BCR中的有关信息,比如我们把annotation.csv中的chains也纳入进来的话,就是这个样子滴:

p2 <-DimPlot(s_balbc_pbmc,group.by = "t_chain")
p2

参考来源

https://github.com/ucdavis-bioinformatics-training/2020-Advanced_Single_Cell_RNA_Seq/blob/master/data_analysis/VDJ_Analysis_fixed.md

你可能还想看

  • NBT:单细胞转录组新降维可视化方法PHATE

  • 复现nature communication PCA原图|代码分析(一)

  • 这篇Nature子刊文章的蛋白组学数据PCA分析竟花费了我两天时间来重现|附全过程代码

  • 一个R包玩转单细胞免疫组库分析,还能与Seurat无缝对接

往期精品(点击图片直达文字对应教程)

后台回复“生信宝典福利第一波”或点击阅读原文获取教程合集

Seurat的单细胞免疫组库分析来了!相关推荐

  1. 一个R包玩转单细胞免疫组库分析,还能与Seurat无缝对接

    单细胞免疫组库数据分析 NGS系列文章包括NGS基础.转录组分析 (Nature重磅综述|关于RNA-seq你想知道的全在这).ChIP-seq分析 (ChIP-seq基本分析流程).单细胞测序分析  ...

  2. 单细胞免疫组库揭示肿瘤免疫疗法副作用的分子机制

    抗CTLA-4和抗PD-1免疫疗法对肿瘤的抑制作用是多层面的,同时也会产生一定的副作用,例如结肠炎等,其分子机制了解尚少.通过单细胞测序和单细胞免疫组库测序分析显示,决定肿瘤免疫副作用的并不是Treg ...

  3. 免疫组库vdj的数据处理(TCR/BCR)

    文章目录 前言 一.免疫组库 二.免疫组库数据处理 1.组装得到CDR3序列 1.1.scTCR/BCR 1.1.1 10X Genomics平台 1.1.2 其他单细胞测序平台 1.2.bulk T ...

  4. 免疫组库数据分析(二):Excel 分析免疫组库数据

    免疫组库数据分析(二):Excel 分析免疫组库数据 前言 在系列文章第一篇<免疫组库数据分析(一):windows 系统下MiXCR的安装和使用>讲解了5'RACE实验数据如何在Wind ...

  5. 免疫组库数据分析(三):免疫组库数据可视化

    免疫组库数据分析(三):免疫组库数据可视化 前言 在系列文章第二篇<免疫组库数据分析(二):Excel 分析免疫组库数据>中,分析了免疫组库中V基因.J基因.V-J组合的使用频率.在氨基酸 ...

  6. 自用 学习BCR 免疫组化

    今天所学: 用miniconda下载了pRESTO 打算用Immcantation 来进行免疫组库的分析 (base) C:\Users\XXXX>python D:\programdata\S ...

  7. 跟着Cell学单细胞转录组分析(八):单细胞转录组差异基因分析及多组结果可视化

    接着单细胞下游分析: 从Cell学单细胞转录组分析(一):开端!!! 跟着Cell学单细胞转录组分析(二):单细胞转录组测序文件的读入及Seurat对象构建 跟着Cell学单细胞转录组分析(三):单细 ...

  8. NC:自体免疫水泡皮肤病中鉴定基因与微生物组互作(微生物组关联分析MWAS)

    之前我们平台分享过<Nature:宏基因组关联分析>综述,让大家系统的了解这一领域.同时还分享过一篇 <GigaScience:谷子产量与微生物组关联分析>是植物领域中的优秀工 ...

  9. Nature | 李海等揭示肠道菌群参与塑造B淋巴细胞抗原受体组库

    责编 | 兮 B细胞作为构成获得性免疫的重要组成部分,其功能取决于B细胞受体 (B cell Receptor) 重链可变区基因胚系VDJ重排形成的抗原受体多样性.大量单个特异性B细胞抗原识别特异性的 ...

最新文章

  1. 【leetcode 字符串】466. Count The Repetitions
  2. php setrawcookie,PHP setrawcookie() 函数
  3. React Native Android端多环境自动打包
  4. DateTime.Now.Ticks.ToString()说明
  5. Leetcode 7. 整数反转
  6. cookie可存的最大限制_cookie、localStorage、sessionStorage、
  7. Docker及K8S使用碎碎记
  8. SSH关于公钥认证Permission denied的问题
  9. Windows 2016 安装单机版本Oracle ASM 的简单说明
  10. Ubuntu18.04安装中文字体SimHei
  11. 2021年40个最佳免费WordPress主题
  12. MyBatis 报错The error may exist in…….xml
  13. 开发一个App要100万? 太扯淡
  14. 用基带等效的方式仿真8-DPSK载波调制信号在AWGN信道下的误码率和误比特率,并与理论值相比较。
  15. ubuntu加了张固态_将ubuntu系统迁移到ssd固态
  16. 学习使用vue实现一个简单的轮播图
  17. MySQL - 设计游戏用户信息表
  18. 【时间之外】做产品必须知道的SKU是什么?
  19. 用python生成M序列
  20. 病原微生物高通量测序:第二节 应用场景

热门文章

  1. [SpecialJudge]构造“神秘“字符串(洛谷P3742题题解,Java语言描述)
  2. 【Java】对JTable里的元素进行排序
  3. 通过uwsgi+nginx启动flask的python web程序
  4. 【IntelliJ IDEA】使用idea解决新建jsp文件而找不到jsp文件模版的新建选项
  5. 《Adobe Photoshop CS6中文版经典教程》—第1课1.4节在Photoshop中还原操作
  6. sql server中扩展存储过程
  7. 通讯频道:TOM续约Skype破镜重圆
  8. 程序员如果想安身立命 什么情况????
  9. 本人计划继续写飞鸽传书,支持的人有吗?
  10. 【再来一套网站程序】kfguan网整站程序下载