immunarch — Fast and Seamless Exploration of Single-cell and Bulk T-cell/Antibody Immune Repertoires in R
前情提要:
10× Genomics单细胞免疫组库VDJ分析必知必会
免疫组库数据分析||immunarch教程:克隆型分析
免疫组库数据分析||immunarch教程:探索性数据分析
免疫组库数据分析||immunarch教程:载入10X数据
免疫组库数据分析||immunarch教程:快速开始
免疫组库数据分析||immunarch教程:GeneUsage分析
免疫组库数据分析||immunarch教程:Diversity 分析
免疫组库数据分析||immunarch教程:Clonotype tracking
今天,我们继续我们的免疫组库数据分析的Demos,这一次我们来谈谈Clonotypes annotation分析。像我这样刚入门免疫组库的人首先会问什么是Clonotypes annotation?
提到annotation 我们不应该感到陌生,在NGS数据分析中这是个高频词汇:基因组要annotation ,16S要annotation ,转录组需要annotation ,cell type 需要annotation 。。。不做注释(annotation )我们都不知道手里的数据是什么,所以要想获得新的视角, 就要做annotation 。Clonotypes 的annotation 意义也在这,只是描述数量关系我们可以做什么GeneUsage啊,Diversity啊,Clone type tracking啊,但是每个Clonetype具体的生物学意义是什么?有了序列,我们常规的注释套路就是做比对,做注释的比对要有数据库。下面跟着运来小哥哥来看几个有意思的数据吧。
免疫受体数据库简介
带有关于免疫受体特异性的聚合信息的数据库提供了一种直接的方式来注释您的数据并找到与条件相关的受体。immunarch为几个常见的数据库提供了很友好的接口,以注释您的数据使用最流行的AIRR数据库- VDJDB, mcpa - tcr和PIRD TBAdb。
数据库下载
-
VDJDB
VDJDB是已知抗原特异性的T细胞受体序列的数据库。该数据库是基于github的,可以在这里使用:https://github.com/antigenomics/vdjdb-db
Citation: Shugay M et al. VDJdb: a curated database of T-cell receptor sequences with known antigen specificity. Nucleic Acids Research 2017
VDJDB数据库整理
在使用数据库之前,过滤掉数据库中不相关的免疫受体是有用的。例如,如果你分析人类t细胞的贝塔汇编,它没有必要阻止免疫受体来自其他物种,以及非trb数据。使用位于https://vdjdb.cdr3.net/search的VDJDB web接口过滤数据。过滤完数据并按下“Refresh table”按钮后,找到“Export”按钮并选择其中的“TSV”标签。您将下载过滤后的数据库文件,其名称类似于“SearchTable-2019-10-17 12_36_11.989”。tsv”,可以用immunarch进行注释。
如我们想找新冠相关的CDR3注释信息:
下载VDJDB全库,如果你是初学者可以先跳过。
如果您在“CDR3”选项卡的“General”部分设置了所有的复选标记,那么可以使用前面的方法来下载完整的数据库。但是,如果您想下载原始数据库文件,这里是详细的VDJDB下载和解压过程的指南。
首先,您需要安装JDK 8 - Java开发工具包。如果你已经有了,跳过这一步。如果没有,搜索系统的正确安装说明即可。
其次,需要安装Groovy—一种用于处理VDJDB的语言。转到这个链接this link,根据您的系统下载发行版或windows安装程序。对于Windows用户来说,最好的方法是下载Windows安装程序。对于Linux用户来说,最简单的方法是使用OS包管理器,如apt、dpkg、pacman等。对于Mac用户来说,最无缝的方式就是使用自制软件。
通过以下链接从GitHub下载VDJDB存储库:https://github.com/antigenomics/vdjdb-db/archive/master.zip
解压缩存档文件并转到解压缩的“vdjdb-db-master”文件夹。
进入“src”文件夹。
打开终端或控制台并执行以下命令:groovy -cp。BuildDatabase。groovy - no2fix。
经过一些处理后,数据库文件将在“vdjdb-db-master”文件夹中的“database”文件夹中可用。您需要为immunarch注释函数提供到该文件的路径。
-
McPAS-TCR
mcpa - tcr是一个人工策划的病理相关的t细胞受体序列目录。该数据库可在http://friedmanlab.weizmann.ac.il/McPAS-TCR/查阅
Citation: Tickotsky N, Sagiv T, Prilusky J, Shifrut E, Friedman N (2017). McPAS-TCR: A manually-curated catalogue of pathology-associated T cell receptor sequences. Bioinformatics 33:2924-2929
数据库的web界面的过滤功能位于“Search Database”选项卡中。处理完数据后,按下“Download csv”按钮。下载名为“mcpa - tcr_search”的文件。可以使用immunarch进行注释。
要下载mcpa - tcr全库,只需访问http://friedmanlab.weizmann.ac。和按“Download the complete database”按钮。请注意,有时您需要按两次或在一个新的浏览器标签下按它来启动下载过程。
-
TBAdb from PIRD
TBAdb是一个人工策划的针对特定抗原或疾病的t细胞受体(TCR)和b细胞受体(BCR)数据库。数据库包括TCR-AB、TCR-GD和BCR三个部分。这三个部分分别收集TCRA和TCRB、TCR- gamma、TCR-delta和BCR的序列和特异性信息。该数据库可通过https://db.cngb.org/pird/tbadb/访问。
Citation: ZHANG W, Wang L, Liu K, Wei X, Yang K, Du W, Wang S, Guo N, Ma C, Luo L, et al. PIRD: Pan immune repertoire database. Bioinformatics(2019)
目前没有办法从TBAdb下载过滤后的数据。查询功能在https://db.cngb.org/pird/query/的“TBAdb”选项卡中可用。下载TBAdb需要到https://db.cngb.org/pird/tbadb/并按下“下载TBAdb”按钮。请注意,为了下载数据库文件,您应该同意许可协议。
以上,我们介绍了几种CDR3注释的数据库,下面我们看看如何在immunarch快速做注释。下载数据库后,我们可以使用R进行注释部分。为了演示R和immunarch的适用性,我们将使用一个常见的任务,即巨细胞病毒(CMV)感染的注释。
首先,我们需要将数据库加载到R中,并从输入数据库中过滤掉非人类、非trb和非cmv数据。对于数据库,我们遵循与repLoad和vis函数相同的原理:函数dbLoad为所有受支持的数据库提供了加载和基本查询的单一接口。
-
VDJDB annotation
按照上面的说明下载VDJDB数据库。在下面的示例中,我们使用数据库片段的url作为文件路径。在您自己的代码中,您需要提供到本地数据库文件的路径,例如“/Users/yourname/Downloads/vdjdb-db-master/vdjdb.slim.txt”。
不要使用下面的链接,因为它们只是测试的目的,而不是实际的数据库!
注意,从web接口获得的VDJDB数据与从原始文件获得的VDJDB数据不同。检查下一节,了解如何使用VDJDB搜索表。
library(immunarch); data(immdata) # Load the package and the test dataset
vdjdb = dbLoad("https://gitlab.com/immunomind/immunarch/raw/dev-0.5.0/private/vdjdb.slim.txt.gz", "vdjdb")
vdjdb
# A tibble: 61,049 x 19
gene cdr3 species antigen.epitope antigen.gene
1 TRB CASS~ Macaca~ STPESANL Tat
2 TRB CASS~ HomoSa~ RLRAEAQVK EBNA3A
3 TRB CASS~ Macaca~ TTPESANL Tat
4 TRA CASN~ HomoSa~ GILGFVFTL M
5 TRB CASS~ MusMus~ HGIRNASFI M45
6 TRB CSAS~ HomoSa~ KLGGALQAK IE1
7 TRA CAVL~ HomoSa~ GILGFVFTL M
8 TRB CASS~ HomoSa~ KLGGALQAK IE1
9 TRB CAST~ MusMus~ SSYRRPVGI PB1
10 TRB CASS~ HomoSa~ NLVPMVATV pp65
# ... with 61,039 more rows, and 14 more variables:
# antigen.species , complex.id , v.segm ,
# j.segm , v.end , j.start , mhc.a ,
# mhc.b , mhc.class , reference.id ,
# vdjdb.score , Species , Chain ,
# Pathology
colnames(vdjdb)
[1] "gene" "cdr3" "species"
[4] "antigen.epitope" "antigen.gene" "antigen.species"
[7] "complex.id" "v.segm" "j.segm"
[10] "v.end" "j.start" "mhc.a"
[13] "mhc.b" "mhc.class" "reference.id"
[16] "vdjdb.score" "Species" "Chain"
[19] "Pathology"
要加载VDJDB并过滤掉信息,您需要提供.species, .chain和.pathology 参数。其实既然都进来是一个大表,我们可以用R的表格处理语法来整理啊,tidyverse用起来。
vdjdb = dbLoad("https://gitlab.com/immunomind/immunarch/raw/dev-0.5.0/private/vdjdb.slim.txt.gz", "vdjdb", .species = "HomoSapiens", .chain = "TRB", .pathology = "CMV")
vdjdb
vdjdb
# A tibble: 18,039 x 19
gene cdr3 species antigen.epitope antigen.gene
1 TRB CSAS~ HomoSa~ KLGGALQAK IE1
2 TRB CASS~ HomoSa~ KLGGALQAK IE1
3 TRB CASS~ HomoSa~ NLVPMVATV pp65
4 TRB CASS~ HomoSa~ KLGGALQAK IE1
5 TRB CASS~ HomoSa~ NLVPMVATV pp65
6 TRB CAST~ HomoSa~ KLGGALQAK IE1
7 TRB CASS~ HomoSa~ KLGGALQAK IE1
8 TRB CASS~ HomoSa~ KLGGALQAK IE1
9 TRB CATS~ HomoSa~ KLGGALQAK IE1
10 TRB CASS~ HomoSa~ NLVPMVATV pp65
# ... with 18,029 more rows, and 14 more variables:
# antigen.species , complex.id , v.segm ,
# j.segm , v.end , j.start , mhc.a ,
# mhc.b , mhc.class , reference.id ,
# vdjdb.score , Species , Chain ,
# Pathology
-
VDJDB search tables Clonotypes
vdjdb_st = dbLoad("https://gitlab.com/immunomind/immunarch/raw/dev-0.5.0/private/SearchTable-2019-10-17%2012_36_11.989.tsv.gz", "vdjdb-search", .species = "HomoSapiens", .chain = "TRB", .pathology = "CMV")
vdjdb_st
vdjdb_st
# A tibble: 4,999 x 19
complex.id Gene CDR3 V J Species `MHC A` `MHC B`
1 0 TRB CASS~ TRBV~ TRBJ~ HomoSa~ HLA-A*~ B2M
2 0 TRB CAWS~ TRBV~ TRBJ~ HomoSa~ HLA-A*~ B2M
3 0 TRB CASS~ TRBV~ TRBJ~ HomoSa~ HLA-A*~ B2M
4 0 TRB CASS~ TRBV~ TRBJ~ HomoSa~ HLA-B*~ B2M
5 0 TRB CASS~ TRBV~ TRBJ~ HomoSa~ HLA-B*~ B2M
6 0 TRB CASS~ TRBV~ TRBJ~ HomoSa~ HLA-B*~ B2M
7 0 TRB CASV~ TRBV~ TRBJ~ HomoSa~ HLA-B*~ B2M
8 0 TRB CASS~ TRBV~ TRBJ~ HomoSa~ HLA-B*~ B2M
9 0 TRB CASS~ TRBV~ TRBJ~ HomoSa~ HLA-B*~ B2M
10 0 TRB CASG~ TRBV~ TRBJ~ HomoSa~ HLA-B*~ B2M
# ... with 4,989 more rows, and 11 more variables: `MHC
# class` , Epitope , `Epitope gene` ,
# `Epitope species` , Reference , Method ,
# Meta , CDR3fix , Score , Chain ,
# Pathology
-
McPAS-TCR
mcpas = dbLoad("https://gitlab.com/immunomind/immunarch/raw/dev-0.5.0/private/McPAS-TCR.csv.gz", "mcpas", .species = "Human", .chain = "TRB", .pathology = "Cytomegalovirus (CMV)")
mcpas
# A tibble: 2,723 x 29
CDR3.alpha.aa CDR3.beta.aa Species Category Pathology
1 NA CASLAPGTTNE~ Human Pathoge~ Cytomega~
2 NA CASLQAGANEQF Human Pathoge~ Cytomega~
3 NA CASLSGGGEQF Human Pathoge~ Cytomega~
4 NA CASLVASGQET~ Human Pathoge~ Cytomega~
5 NA CASSHRDSGNT~ Human Pathoge~ Cytomega~
6 NA CASSSANYGYTF Human Pathoge~ Cytomega~
7 NA CATSDPLTASY~ Human Pathoge~ Cytomega~
8 CARNTGNQF CACSLRSQGTD~ Human Pathoge~ Cytomega~
9 CAGNTGNQFYFG CASSAWDRSSG~ Human Pathoge~ Cytomega~
10 CAYPYNNNDMRF CASSELGGAGT~ Human Pathoge~ Cytomega~
# ... with 2,713 more rows, and 24 more variables:
# Pathology.Mesh.ID , Additional.study.details ,
# Antigen.identification.method , NGS ,
# Antigen.protein , Protein.ID ,
# Epitope.peptide , Epitope.ID , MHC ,
# Tissue , T.Cell.Type ,
# T.cell.characteristics , CDR3.alpha.nt ,
# TRAV , TRAJ , TRBV , TRBD ,
# TRBJ , Reconstructed.J.annotation ,
# CDR3.beta.nt , Mouse.strain , PubMed.ID ,
# Remarks , Chain
-
TBAdb
tbadb = dbLoad("https://gitlab.com/immunomind/immunarch/raw/dev-0.5.0/private/TBAdb.xlsx", "tbadb", .species = "Homo Sapiens", .chain = c("TRB", "TRA-TRB"), .pathology = "CMV") # 失败了啊,本地下吧。
tbadb
注释的关键免疫功能是dbAnnotate。作为输入,它需要搜索序列、数据库和感兴趣的列,如CDR3氨基酸序列或V基因片段名称列。如果您想在immunarch打包的测试数据上进行测试,请在继续进行之前执行以下代码行。只需一行代码,就可以在输入数据和VDJDB数据库中找到所有匹配CDR3氨基酸序列的clonotypes:
data(immdata)
?dbAnnotate
dbAnnotate(immdata$data, vdjdb, "CDR3.aa", "cdr3")
CDR3.aa Samples A2-i129 A2-i131 A2-i133 A2-i132
1: CASSLGETQYF 11 6 4 2 8
2: CASSFQETQYF 9 3 2 2 4
3: CASSQETQYF 9 5 2 1 2
4: CASSSSYEQYF 9 1 0 0 1
5: CASSLEGYEQYF 8 0 0 1 1
---
579: CSVGTGTYEQYF 1 0 0 0 0
580: CSVQGGAYNEQFF 1 0 1 0 0
581: CSVQGGSYNEQFF 1 0 1 0 0
582: CSVVATNEKLFF 1 0 0 1 0
583: CSVVGTGNTEAFF 1 0 0 0 0
A4-i191 A4-i192 MS1 MS2 MS3 MS4 MS5 MS6
1: 4 0 1 3 1 2 5 1
2: 2 0 1 1 0 4 0 2
3: 3 2 0 1 0 0 4 1
4: 2 2 1 1 0 1 1 3
5: 3 0 1 0 1 1 1 1
---
579: 1 0 0 0 0 0 0 0
580: 0 0 0 0 0 0 0 0
581: 0 0 0 0 0 0 0 0
582: 0 0 0 0 0 0 0 0
583: 0 0 0 0 0 0 1 0
“Samples”列指定在其中发现克隆型的样品数量。列中的其他数字对应于特定输入样品中克隆型的克隆计数。在下一个例子中,我们将使用CDR3氨基酸序列和V基因片段在mcpa - tcr数据库中搜索与条件相关的序列:
dbAnnotate(immdata$data, mcpas, c("CDR3.aa", "V.name"), c("CDR3.beta.aa", "TRBV"))
CDR3.aa V.name Samples A2-i129 A2-i131
1: CAISESYEQYF TRBV10-3 3 0 1
2: CASSLAPGATNEKLFF TRBV7-6 3 0 0
3: CASSLGENIQYF TRBV13 3 0 0
4: CASSLGRETQYF TRBV28 3 0 0
5: CSVGTGGTNEKLFF TRBV29-1 3 0 0
---
2120: KNPTAF TRBV19 1 0 0
2121: LLGGQETQYF TRBV7-4 1 0 0
2122: WASSFQGFTEAF TRBV28 1 0 0
2123: WASSQALPYEQYF TRBV12-4 1 0 0
2124: WASSQQTGTIGGYTF TRBV6-5 1 0 0
A2-i133 A2-i132 A4-i191 A4-i192 MS1 MS2 MS3 MS4 MS5
1: 0 0 0 1 0 0 0 0 0
2: 0 0 0 0 0 1 0 0 1
3: 0 0 1 1 0 0 0 0 0
4: 0 0 0 0 0 0 0 0 75
5: 0 0 0 0 0 1 0 0 0
---
2120: 0 0 0 0 0 0 0 0 0
2121: 0 0 0 0 0 0 0 0 0
2122: 0 0 0 0 0 0 0 0 0
2123: 0 0 0 0 0 0 0 0 0
2124: 0 0 0 0 0 0 0 0 0
MS6
1: 0
2: 0
3: 0
4: 1
5: 1
---
2120: 0
2121: 0
2122: 0
2123: 0
2124: 0
如果你寻求搜索一个数据库为一组特定的序列,并使用它作为一个数据库文件:
local_db = data.frame(Seq = c("CASSDSSGGANEQFF", "CSARLAGGQETQYF"), V = c("TRBV6-4", "TRBV20-1"), stringsAsFactors = F)
dbAnnotate(immdata$data, local_db, c("CDR3.aa", "V.name"), c("Seq", "V"))
CDR3.aa V.name Samples A2-i129 A2-i131 A2-i133
1: CASSDSSGGANEQFF TRBV6-4 7 1 1 2
2: CSARLAGGQETQYF TRBV20-1 6 1 3 0
A2-i132 A4-i191 A4-i192 MS1 MS2 MS3 MS4 MS5 MS6
1: 0 3 0 0 0 2 0 0 12
2: 1 0 0 0 0 1 0 0 1
使用vis()函数进行可视化将在immunarch的下一个主要版本中得到支持。您可以使用ggplot2来可视化已发现的克隆型的分布.
immunarch提供了一个非常基本的查询界面,只允许按物种类型、链类型和病理类型进行过滤。要进行高级过滤,如抗原表位过滤,需要使用R 。在大多数情况下,dplyr包过滤是最顺手的。下面是一个如何使用dplyr从VDJDB中过滤出特定抗原表位的例子:
# Load the dplyr library
library(dplyr)
# Load the database with immunarch
vdjdb = dbLoad("https://gitlab.com/immunomind/immunarch/raw/dev-0.5.0/private/vdjdb.slim.txt.gz", "vdjdb", .species = "HomoSapiens", .chain = "TRB", .pathology = "CMV")
# Check which antigen epitopes are presented in the database
table(vdjdb$antigen.epitope)
ARNLVPMVATVQGQN AYAQKIFKI CPSQEPMSIYVY
3 39 2
CVETMCNEY DEEDAIAAY EDVPSGKLFMHVTLG
2 2 1
EFFWDANDIY ELKRKMIYM ELRRKMMYM
1 5 10
FPTKDVAL IPSINVHHY KLGGALQAK
10 93 12667
LSEFCRVLCCYVLEE MLNIPSINV NEGVKAAW
2 73 49
NLVPMVATV QIKVRVDMV QIKVRVKMV
4496 15 24
QYDPVAALF RPHERNGFTV RPHERNGFTVL
39 4 22
TPRVTGGGAM VLEETSVML VMAPRTLIL
207 14 1
VTEHDTLLY YILEETSVM YSEHPTFTSQY
202 3 53
# Filter out all non NLVPMVATV epitopes
vdjdb = vdjdb %>% filter(antigen.epitope == "NLVPMVATV")
vdjdb
# A tibble: 4,496 x 19
gene cdr3 species antigen.epitope antigen.gene
1 TRB CASS~ HomoSa~ NLVPMVATV pp65
2 TRB CASS~ HomoSa~ NLVPMVATV pp65
3 TRB CASS~ HomoSa~ NLVPMVATV pp65
4 TRB CASS~ HomoSa~ NLVPMVATV pp65
5 TRB CSAD~ HomoSa~ NLVPMVATV pp65
6 TRB CASS~ HomoSa~ NLVPMVATV pp65
7 TRB CASS~ HomoSa~ NLVPMVATV pp65
8 TRB CASS~ HomoSa~ NLVPMVATV pp65
9 TRB CSVE~ HomoSa~ NLVPMVATV pp65
10 TRB CASS~ HomoSa~ NLVPMVATV pp65
# ... with 4,486 more rows, and 14 more variables:
# antigen.species , complex.id , v.segm ,
# j.segm , v.end , j.start , mhc.a ,
# mhc.b , mhc.class , reference.id ,
# vdjdb.score , Species , Chain ,
# Pathology
# Check if everything is OK and there is no other epitopes
table(vdjdb$antigen.epitope)
NLVPMVATV
4496
表位(Epitope )又是什么?
所谓表位(epitope)就是抗原中能被免疫细胞特异性识别的线性片段或空间构象性结构,是引起免疫应答和免疫反应的基本单位。表位在免疫学基础与应用研究中具有核心地位,是疫苗、抗体药物、肿瘤免疫、移植免疫、超敏反应的结构基础。IEDB是免疫表位数据库(Immune Epitope DataBase)的缩写,创建于2003年。免疫表位数据库(IEDB)是由NIAID资助的免费资源。它在传染病、过敏、自身免疫和移植的背景下,对在人类、非人类灵长类和其他动物中研究的抗体和T细胞表位的实验数据进行了编目。IEDB还托管工具,以协助预测和分析表位。http://www.iedb.org/
好了,我们为什么要做Clonotypes annotation?还不是因为我们要从有限的数据中获得更多的生物信息吗?一般的套路是根据CDR3序列跟数据库里面的信息匹配,获得跟多信息。这里的信息就是数据库里面的信息。
http://blog.sciencenet.cn/blog-204973-845856.html
https://immunarch.com/articles/web_only/v11_db.html