单细胞免疫组库VDJ——scRepertoire (四)

一、介绍

scRepertoire 旨在从 10x Genomics Cell Ranger 管道中获取过滤器 contig 输出,处理该数据以根据两个 TCR 或 Ig 链分配克隆型,并分析克隆型动态。后者可以分为 1) 仅克隆型分析功能,例如独特的克隆型或克隆空间量化和 2) 使用 Seurat、SingleCellExperiment 或 Monocle 3 包与 mRNA 表达数据能够交互。

1、安装

> devtools::install_github("ncborcherding/scRepertoire")
> packageVersion('scRepertoire')
[1] ‘1.5.2’

2、加载库

suppressMessages(library(scRepertoire))
suppressMessages(library(Seurat))

二、数据处理

1、加载和处理 Contig Data

使用来自 10x Genomics Cell Ranger的过滤后的_contig_annotations.csv 输出。此文件位于 VDJ 对齐文件夹的 ./outs/ 目录中。要生成用于 scRepertoire 的重叠群列表,只需 1) 为每个样本加载 filters_contig_annotations.csv,然后2) 制作一个列表。

S1 <- read.csv(".../Sample1/outs/filtered_contig_annotations.csv")
S2 <- read.csv(".../Sample2/outs/filtered_contig_annotations.csv")
S3 <- read.csv(".../Sample3/outs/filtered_contig_annotations.csv")
S4 <- read.csv(".../Sample4/outs/filtered_contig_annotations.csv")
contig_list <- list(S1, S2, S3, S4)

2、Combining the Contigs

由于 CellRanger 的输出是 TCRA 和 TCRB 链的量化,下一步是通过细胞条形码创建一个包含 TCR 基因(由 VDJC 基因组成)和 CDR3 序列的单个列表对象。这是使用 执行的combineTCR(),其中输入是剥离的 contig_list。还可以通过样本和 ID 信息重新标记条形码,以防止重复。

#若有分组信息,则填入samples中,ID可填入样本名称,cells:T-AB 表示T 细胞的α-β;
T-GD 表示T细胞的γ-δ ,一般此处选择T-AB。
combined <- combineTCR(contig_list, 
                samples = c("group1", "group1", "group2", "group2"), 
                ID = c("S1", "S2", "S3", "S4"), cells ="T-AB")

处理BCR时,对应函数combineBCR(),但有两个主要注意事项:1)每个条形码最多只能有 2 个序列,如果存在更多,则选择具有最高读数的 2 个。2) 克隆型的严格定义 (CTstrict) 基于 V 基因和核苷酸序列的 >85% 标准化 Levenshtein 距离。Levenshtein 距离是在所有恢复的 BCR 序列中计算的,无论运行如何。

3、添加附加变量

如果要添加的变量不仅仅是样本和 ID 怎么办?我们可以使用addVariable()函数添加它们。我们需要的只是您要添加的变量的名称以及特定的字符或数值(变量)。例如,在这里我们添加了处理和测序样品的批次。

example <- addVariable(combined, name = "batch",  variables = c("b1", "b2", "b1", "b2"))
example[[1]][1:5,ncol(example[[1]])] # This is showing the first 5 values of the new column added

同样,我们可以在使用该subsetContig()函数后删除特定的列表元素。为了进行子集化,我们需要确定要用于子集化的向量(名称)以及子集的变量值(变量)。

subset <- subsetContig(combined, name = "sample", variables = c("group1", "group2"))

4、可视化及高级分析

4.1、Quantify Clonotypes

探索克隆型的第一个函数是quantContig()返回唯一克隆型的总数或相对数量。先来个图我们再说参数:

quantContig(combined, cloneCall="gene+nt", scale = T)+theme(axis.text.x = element_text(angle = 30,vjust = 0.85,hjust = 0.75))#X坐标加点斜体,出图好看
quantContig(combined, cloneCall="gene+nt", scale = F)+theme(axis.text.x = element_text(angle = 30,vjust = 0.85,hjust = 0.75))

image.png

两张图的唯一区别就是scale参数。其余参数的对比不一一展示。
其余参数含义如下:

  • cloneCall :这里有四个选项
    (1) “gene” :使用包含 TCR/Ig 的 VDJC 基因
    (2) “nt”:使用 CDR3 区域的核苷酸序列
    (3) “aa” :使用 CDR3 区域的氨基酸序列
    (4) “gene+nt” 使用包含 TCR/Ig + CDR3 区域的核苷酸序列的 VDJC 基因。这是克隆型的正确定义
    需要注意的重要一点是,克隆型基本上是使用两个基因座的基因或 nt/aa CDR3 序列的组合来调用的。在 scRepertoire 的这种实施中,克隆型调用并未在 CDR3 序列中包含小的变化。因此,基因方法将是最敏感的,而nt或aa的使用则较为敏感,而对克隆型最特异的是gene+nt。此外,克隆型调用试图合并两个基因座,即TCRA和TCRB链,并且如果单个细胞条形码具有识别的多个序列(即, 2 个 TCRA 链在一个细胞中表达)。使用 10x 方法,有一个条形码子集只返回一个免疫受体链,未返回的链被分配一个NA值。

  • scale:将图表转换为独特克隆型的百分比。

  • group:用于分组的列标题。

  • exportTable:返回用于形成图形的数据框

exportTable=T,导出数据

> quantContig_output <- quantContig(combined, cloneCall="gene+nt",    scale = T, exportTable = T)
> quantContig_output
  contigs    values total   scaled
1    1552 group1_S1  7620 20.36745
2    2678 group1_S2  8336 32.12572
3    1093 group2_S3  3064 35.67232
4     941 group2_S4  8125 11.58154

4.2、克隆型丰度

通过丰度检查克隆型的相对分布。abundanceContig()将根据样本或运行中的实例数生成具有克隆型总数的折线图。

abundanceContig(combined, cloneCall = "gene", scale = F)
image.png

4.3、克隆型的长度

lengtheContig()我们可以通过调用函数查看 CDR3 序列的长度分布。重要的是,与其他基本可视化不同,cloneCall只能是“nt”或“aa”。由于如上所述调用克隆型的方法,长度应显示多峰曲线,这是对未返回的链序列和单个条形码中的多个链使用NA的产物。

> lengthContig(combined, cloneCall="aa", chain = "both")#代码来自官方,出现报错
Error in seq.default(min(Con.df$length), max(Con.df$length), by = 5) :
  'from' must be a finite number
In addition: Warning messages:
1: In min(Con.df$length) : no non-missing arguments to min; returning Inf
2: In max(Con.df$length) : no non-missing arguments to max; returning -Inf
> ?lengthContig#发现chains出的参数改变
Usage:

     lengthContig(
       df,
       cloneCall = "aa",
       group = NULL,
       scale = FALSE,
       chains = "combined",
       exportTable = FALSE
     )

Arguments:

      df: The product of combineTCR(), combineBCR(), or
          expression2List()

cloneCall: How to call the clonotype - CDR3 nucleotide (nt), CDR3 amino
          acid (aa).

   group: The group header for which you would like to analyze the
          data.

   scale: Converts the graphs into denisty plots in order to show
          relative distributions.

  chains: Whether to keep clonotypes "combined" or visualize by chain.

exportTable: Returns the data frame used for forming the graph.
#通过修改参数得到正确图形。
lengthContig(combined, cloneCall="aa", chain = "combined")#左图
lengthContig(combined, cloneCall="aa", chain = "single") #右图
新版本结果图,左图展示的是一起统计,右图展示的是单链统计

4.4 比较克隆型

compareClonotypes()查看样本之间的克隆型和动态变化。

compareClonotypes(combined, numbers = 15, samples = c("group1_S1", "group1_S2"),  cloneCall="aa", graph = "alluvial")

Arguments:
df: The product of combineTCR(), combineBCR(), or
          expression2List()
cloneCall: How to call the clonotype - CDR3 gene (gene), CDR3
          nucleotide (nt), CDR3 amino acid (aa), or CDR3
          gene+nucleotide (gene+nt).
samples: 可用于根据列表元素的名称隔离特定样本
clonotypes: 可用于分离特定的克隆型序列,确保调用与您想要可视化的序列匹配。
numbers: 要绘制的最高克隆型数,这将根据单个样本的频率计算。这也可以留空。
graph: The type of graph produced, either "alluvial" or "area".
exportTable: Returns the data frame used for forming the graph.

4.5 可视化基因使用

vizGenes()用来查看基因在单链中的使用情况,这个函数在新版本中没有,‘1.5.2’这个版本中有。

vizGenes(combined[c(1,3,5)], #选择样本,
         gene = "V",  chain = "TRB",   y.axis = "J", # 表示TRB V 和 J 使用的差异
         plot = "heatmap", #绘制热图,还可以选“bar”,绘制柱状图
         scale = TRUE, 
         order = "gene")
image.png

4.6 克隆空间稳态

clonalHomeostasis(combined, cloneCall = "gene",
                  cloneTypes = c(Rare = 1e-04,
                                 Small = 0.001,
                                 Medium = 0.01,
                                 Large = 0.1,
                                 Hyperexpanded = 1))
image.png

4.7 克隆比例

clonalProportion(combined, cloneCall = "nt") 
image.png

4.8 Overlap Analysis

使用clonalOverlap()可以可视化样本之间的相似性。目前可以执行三种方法clonalOverlap():

  • 1)overlap coefficient
  • 2)Morisita指数
  • 3)Jaccard指数
    前者正在研究根据较小样本中独特克隆型长度缩放的克隆型重叠。Morisita 指数更为复杂,它是个体在群体中分散程度的生态测量,包括人口规模。Jaccard Similarity Index 与重叠系数非常相似 - Jaccard Index 的分母不是使用较小样本的长度,而是两个比较的并集,导致数量要小得多。参数method = c("overlap", "morisita", "jaccard", "raw")
clonalOverlap(combined, cloneCall = "gene+nt",   method = "overlap")
自己的数据结果

4.9 多样性分析

多样性是使用五个指标计算的:

    1. Shannon
    1. inverse Simpson
    1. Chao1
    1. Abundance-based Coverage Estimator (ACE)
    1. inverse Pielou’s measure of species evenness #此版本计算后并没有这个指标的结果。
      前两者一般用于估计基线多样性,Chao/ACE 指数用于估计样本的丰富度。
p<-clonalDiversity(combined, cloneCall = "gene+nt",  n.boots = 100)
image.png

4.10 Scatter Compare

scatterClonotype(combined, cloneCall ="gene", 
                 x.axis = "PY_P", 
                 y.axis = "PY_T",
                 dot.size = "total",
                 graph = "proportion")
网站说明图片,自己运行报错 could not find function "scatterClonotype"

参考:
http://bioconductor.riken.jp/packages/release/bioc/html/scRepertoire.html
https://ncborcherding.github.io/vignettes/vignette.html

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,193评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,306评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,130评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,110评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,118评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,085评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,007评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,844评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,283评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,508评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,395评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,985评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,630评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,797评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,653评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,553评论 2 352

推荐阅读更多精彩内容