美文网首页
单细胞数据分析笔记4: 免疫组库分析(scRepertoire)

单细胞数据分析笔记4: 免疫组库分析(scRepertoire)

作者: 小程的学习笔记 | 来源:发表于2024-04-06 22:54 被阅读0次

    scRepertoire 旨在从 10x Genomics Cell Ranger 管道获取filter contig(要求barcode没有任何标签(前缀)输出,处理该数据以根据两条 TCR 或 Ig 链分配克隆型,并分析克隆型动态。
    可分为:
    1)仅克隆型分析功能,例如独特的克隆型或克隆空间定量;
    2)使用 Seurat、SingleCellExperiment 或 Monocle 3 软件包与 mRNA 表达数据的交互

    1. \color{green}{数据解读}

    1.1 clonotypes.csv (克隆型相关信息)

    TCR_BCR-1
    Column Description
    clonotype_id 该样本中共有序列所属的克隆型 ID(相同clonotype_id在不同样本之间不代表同一克隆型)
    frequency 具有该克隆型的cell barcodes的数量(虽然受测序深度等方面的限制,可能会miss一些高频克隆型,但也侧面部分反映了这个BCR/TCR的丰度)
    proportion 具有该克隆型的cell barcodes的分数
    cdr3s_aa 以分号分隔的链:序列对列表,其中链是 TRA、TRB、TRG、TRD、IGK、IGL 或 IGH,序列是该链的 CDR3 氨基酸序列
    cdr3s_nt 以分号分隔的链:序列对列表,其中链是 TRA、TRB、TRG、TRD、IGK、IGL 或 IGH,序列是该链的 CDR3 核苷酸序列

    1.2 filtered_contig_annotations.csv (过滤后的contig相关的文件)

    TCR_BCR-2
    Column Description
    barcode 该序列的cell barcode
    is_cell True 或 False 值,指示cell barcode是否是一个细胞
    contig_id 此序列的唯一标识符
    high_confidence True 或 False 值,指示该序列是否被称为高置信度(不太可能是嵌合序列或其他伪影)
    length 该序列的长度(以核苷酸为单位)
    chain 与此序列相关的链:TRA、TRB、IGK、IGL 或 IGH
    v_gene 得分最高的 V 片段
    d_gene 得分最高的 D 片段
    j_gene 得分最高的 J 片段
    c_gene 得分最高的 C 片段
    full_length True 或 False 值,指示该序列是否为全长
    productive True 或 False 值,指示该序列是否为富有成效
    cdr3 预测的 CDR3 氨基酸序列
    cdr3_nt 预测的 CDR3 核苷酸序列
    reads 与该序列对齐的读取数
    umis 与该序列对齐的不同 UMI 的数量
    raw_clonotype_id 此cell barcode所分配到的克隆型 ID
    raw_consensus_id 此序列分配到的共有序列的 ID

    1.3 consensus_annotations.csv (一致性序列相关的文件)

    TCR_BCR-3
    Column Description
    clonotype_id 此共有序列所分配到的克隆型 ID
    consensus_id 该共识序列的 ID
    v_start 共有序列上 V 区起始位置的基于 0 的索引
    v_end 共有序列上 V 区末端位置的基于 0 的索引
    v_end_ref 参考上 V 基因结束位置的从 0 开始的索引
    j_start 共有序列上 J 区起始位置的基于 0 的索引
    j_start_ref 参考上 J 基因起始位置的基于 0 的索引
    j_end 共有序列上 J 区末端位置的基于 0 的索引
    cdr3_start 共有序列上 CDR3 区域起始位置的基于 0 的索引
    cdr3_end 共有序列上 CDR3 区域结束位置的基于 0 的索引

    2. \color{green}{加载包以及数据预处理}

    由于 CellRanger 的输出是 TCRA 和 TCRB 链的量化,没有细胞barcode与clonotype直接对应的数据,因此不能直接整合到seurat中。scRepertoire分析的第一步是把上面的文件转换为barcode与clonotype对应的数据。这是使用执行的combineTCR(combineBCR)函数,其中输入的是 contig_list。还可以通过样品和 ID 信息重新标记条形码,以防止重复。

    ## 安装并加载所需的R包
    # install.packages("immunarch")
    # BiocManager::install("scRepertoire")
    library(scRepertoire)
    library(immunarch)
    library(Seurat)
    library(tibble)
    library(tidyr)
    library(RColorBrewer)
    library(scales)
    library(ggpubr)
    library(ggplot2)
    
    # 读入contig_annotations.csv文件
    N11 <- read.csv('/data/N11_BCR_filtered_contig_annotations.csv')
    N12 <- read.csv('/data/N12_BCR_filtered_contig_annotations.csv')
    N5 <- read.csv('/data/N5_BCR_filtered_contig_annotations.csv')
    N6 <- read.csv('/data/N6_BCR_filtered_contig_annotations.csv')
    N7 <- read.csv('/data/N7_BCR_filtered_contig_annotations.csv')
    
    N2 <- read.csv('/data/N2_BCR_filtered_contig_annotations.csv')
    P17 <- read.csv('/data/P17_BCR_filtered_contig_annotations.csv')
    P18 <- read.csv('/data/P18_BCR_filtered_contig_annotations.csv')
    
    N9 <- read.csv('/data/N9_BCR_filtered_contig_annotations.csv')
    P11 <- read.csv('/data/P11_BCR_filtered_contig_annotations.csv')
    P13 <- read.csv('/data/P13_BCR_filtered_contig_annotations.csv')
    P7 <- read.csv('/data/P7_BCR_filtered_contig_annotations.csv')
    
    # scRepertoire需要将这些样本储存在list中,后续命名添加分组等等
    BCR_list <- list(N11,N12,N5,N6,N7,N2,P17,P18,N9,P11,P13,P7)
    
    # 如果barcode多,样本多的话,这一步执行还是需要花费一段时间的
    data_bcr <- combineBCR(BCR_list,
                           ID = c("N11","N12","N5","N6","N7","N2","P17","P18","N9","P11","P13","P7"), 
                           samples = c("HC","HC","HC","HC","HC","Mild","Mild","Mild","Severe","Severe","Severe"), 
                           threshold = 0.85)
    
    # 还有其他的分组信息添加,还可以继续使用addVariable
    # data_bcr <- addVariable(data_bcr, name = "Age", 
    #                         variables = c("50", "40", "80", "60", "45", "77"))
    
    # 也可在combineBCR()后利用subsetContig()删除特定的列表元素(子集化)
    # subset <- subsetContig(data_bcr, name = "ID", 
    #                        variables = c("N11","N2"))
    
    参数说明:

    cells:指定VDJ类型。"T-AB"代表α-β TCR;"T-GD"代表 γ-δ TCR
    call.related.clones: 使用核苷酸序列和V基因来调用相关克隆。 默认设置为 TRUE。 FALSE 将返回 CTstrict 或严格克隆型作为 V 基因 + 氨基酸序列
    threshold: 数字越高,用于聚类的序列相似度就越高
    removeNA: "TRUE"代表删除任何没有值的链;"FALSE"( 默认设置)代表并合并具有NA 值的单元格
    removeMulti: "TRUE"代表删除任何具有 2 条以上免疫受体链的细胞barcode;"FALSE"( 默认设置)代表并合并具有 > 2 个链的单元
    filterMulti: "TRUE"代表用多个链分离细胞barcode中前2个表达的链;"FALSE"( 默认设置)代表允许选择最高表达的轻链和重链

    3. \color{green}{Contig} \color{green}{可视化}

    3.1 量化Clonotypes(使用quantContig 探索每个样本的unique clone信息)

    library(ggsci)
    p1 <- quantContig(data_bcr, 
                      cloneCall="strict", 
                      scale = T, # 将数值转换为百分比
                      chain = "both") +  # 柱形图具体的数值可以添加 exportTable = T函数导出
      # 自行修改配色
      # scale_fill_manual(values = c("#1f77b4", "#ff7f0e", "#2ca02c", "#d62728", "#9467bd",
      #                              "#8c564b", "#e377c2", "#7f7f7f", "#bcbd22", "#17becf",
      #                              "#ff0000", "#0000ff")) +
      scale_color_rickandmorty() +
      theme(axis.text.x = element_text(angle = 60, hjust = 1))
    
    # 只想可视化特异性的chain,那么在chain这里选择参数即可。
    # TCR可以选择“TRA”, “TRB”, “TRD”, “TRG”, BCR则是“IGH” or “IGL”
    p2 <- quantContig(data_bcr, 
                      cloneCall="strict", 
                      scale = T, 
                      chain = "IGL") +
      # 自行修改配色
      # scale_fill_manual(values = c("#1f77b4", "#ff7f0e", "#2ca02c", "#d62728", "#9467bd",
      #                              "#8c564b", "#e377c2", "#7f7f7f", "#bcbd22", "#17becf",
      #                              "#ff0000", "#0000ff")) +
      scale_color_rickandmorty() +
      theme(axis.text.x = element_text(angle = 60, hjust = 1))
    
    TCR_BCR-4

    ꔷ 这里cloneCall函数有四个参数:
    1)"gene":使用VDJC 基因
    2)"nt":使用 CDR3 区域的核苷酸序列
    3)"aa":使用 CDR3 区域的氨基酸序列
    4)"strict" 使用包含VDJC 基因 + CDR3 区域的核苷酸序列

    3.2 Clonotype丰度(按丰度检查克隆型的相对分布)

    p3 <- abundanceContig(data_bcr, cloneCall = "strict", scale = F)
    #也可以添加分组,直接用分组来展示
    p4 <- abundanceContig(data_bcr, cloneCall = "strict", scale = F, group.by = 'sample')
    
    TCR_BCR-5

    3.3 Clonotype长度(查看CDR3序列的长度分布)

    p5<- lengthContig(data_bcr, 
                      cloneCall="aa",  # 此处cloneCall只能是"nt"或"aa"
                      chain = "both") 
    
    TCR_BCR-6

    3.4 比较Clonotype(查看样本之间的克隆型和动态变化)

    p6 <- compareClonotypes(data_bcr, 
                            numbers = 5, # 每组中要绘制图表的克隆型的最大数量
                            cloneCall="strict", 
                            graph = "alluvial") + # "alluvial" or "area"
      scale_colour_brewer(palette = "Greens")
    
    # 看任意样本之间的比较
    p7 <- compareClonotypes(data_bcr, 
                            cloneCall="strict", 
                            numbers = 3,
                            graph = "alluvial",
                            samples = c("HC_N11", "Severe_P7")) + 
      scale_colour_brewer(palette = "Greens")
    
    TCR_BCR-7

    3.5 TCR 或 BCR 基因的相对使用

    p8 <- vizGenes(data_bcr, 
                   gene = "V", 
                   chain = "IGL", 
                   plot = "bar",  # "bar" or "heatmap"
                   order = "variance", 
                   scale = TRUE) # "TRUE"代表按每个样本的基因数量缩放;"FALSE"代表原始数据
    
    TCR_BCR-8
    # 查看单个链中基因的使用情况。例如,对不同样本之间 IGL V 和 J 使用的差异感兴趣:
    p9 <- vizGenes(data_bcr[c(1:5)], 
                   gene = "V", 
                   chain = "IGL", 
                   y.axis = "J",  # 沿 y 轴分隔计数的变量
                   plot = "heatmap", 
                   scale = TRUE, 
                   order = "gene") # "gene"代表按基因名称排序;"variance"代表按单独变量类别之间的方差排序
    
    p10 <- vizGenes(data_bcr[c(6:8)], 
                   gene = "V", 
                   chain = "IGL", 
                   y.axis = "J", 
                   plot = "heatmap", 
                   scale = TRUE, 
                   order = "gene")
    
    p11 <- vizGenes(data_bcr[c(9:12)], 
                   gene = "V", 
                   chain = "IGL", 
                   y.axis = "J", 
                   plot = "heatmap", 
                   scale = TRUE, 
                   order = "gene")
    
    TCR_BCR-9

    4. \color{green}{更高级的Clonetype分析}

    4.1 克隆空间稳态(查看特定比例的克隆所占据的样本全部的相对比例)

    通过检查克隆空间,可以有效地查看特定比例的克隆所占据的相对空间。可以将整个免疫受体测序视为一个量杯。克隆空间稳态询问杯子中不同比例的克隆填充的百分比。比例分割点在函数中的cloneType变量下设置,并且可以在基线处进行调整

    p12 <- clonalHomeostasis(data_bcr, cloneCall = "aa", 
                            cloneTypes = c(Rare = 1e-04, 
                                           Small = 0.001, 
                                           Medium = 0.01, 
                                           Large = 0.1, 
                                           Hyperexpanded = 1))
    
    #也可以按照分组展示,只需要添加group.by参数
    p13 <- clonalHomeostasis(data_bcr, cloneCall = "aa", 
                            cloneTypes = c(Rare = 1e-04, 
                                           Small = 0.001, 
                                           Medium = 0.01, 
                                           Large = 0.1, 
                                           Hyperexpanded = 1),
                            group.by = 'sample')
    
    TCR_BCR-10

    4.2 克隆比例

    与克隆空间稳态一样,克隆比例的作用是将克隆放入单独的容器中。关键区别在于,该clonalProportion()函数不是查看克隆与总数的相对比例,而是按总数对克隆进行排名。分割代表按拷贝或出现频率对克隆型进行排名,这意味着 1:10 是每个样本中前 10 个克隆型。默认箱位于函数中的split变量下,可以调整。

    p14 <- clonalProportion(data_bcr, cloneCall = "gene",
                           split = c(10, 100, 1000, 10000, 30000, 1e+05))
    
    TCR_BCR-11

    4.3 重叠分析

    查看样本之间的相似性。目前可以执行四种方法:1)overlap,2)Morisita指数,3)Jaccard指数,4)raw。overlap着眼于较小样本中独特克隆型长度的克隆型重叠;Morisita指数更为复杂,衡量种群内个体分散程度的生态指标,纳入了种群规模。Jaccard相似度指数与overlap非常相似 - Jaccard指数的分母是两个比较的并集,而不是使用较小样本的长度,从而导致数字小得多。

    p15 <- clonalOverlap(data_bcr, 
                        cloneCall = "strict", 
                        method = "morisita")
    
    # 分析样本克隆大小分布的相似性
    p16 <- clonesizeDistribution(data_bcr, 
                                cloneCall = "strict", 
                                method="ward.D2")
    
    TCR_BCR-12

    4.4 Diversity Analysis 多样性分析

    多样性也可以通过样本或其他变量来衡量。使用五个指标计算多样性:1)Shannon,2)inverse Simpson, 3)Chao1,4)Abundance-based Coverage Estimator (ACE),5)inverse Pielou’s 均匀度度量。前两者一般用于估计基线多样性,Chao/ACE指数用于估计样本的丰富度。该函数的新实现包括使用最少数量的独特克隆型对 100 个引导程序 (n.boots) 进行下采样,作为更稳健的多样性估计。

    p17 <- clonalDiversity(data_bcr, 
                           cloneCall = "aa", 
                           n.boots = 1000, 
                           x.axis = 'sample', # 这里的sample就是我们前面data_bcr的分组
                           group = 'ID') # ID就是每个样本
    
    TCR_BCR-13

    4.5 分散比较

    计算相对克隆型,并生成比较两个样本的散点图

    p18 <- scatterClonotype(data_bcr, 
                            cloneCall ="gene", 
                            x.axis = "HC_N12", 
                            y.axis = "Severe_P11",
                            dot.size = "total",
                            graph = "proportion") # 绘制比例或原始克隆型计数图
    
    TCR_BCR-14

    5. \color{green}{单细胞的交互}

    5.1 数据预处理

    head(data_bcr$HC_N11$barcode)
    ## [1] "HC_N11_AGTTAGCGCTCACACGC" "HC_N11_TATCTGTTACTAAACGC" "HC_N11_TCGTAGAATGCGCACTT" "HC_N11_GTACAGTATGACTGGGC" "HC_N11_CTACTATATGCTAGCCC" "HC_N11_CTACGGGATGGTGTGGC"
    
    head(scRNA_harmony)
                              orig.ident nCount_RNA nFeature_RNA percent.mt percent.HB RNA_snn_res.0.8 seurat_clusters
    ## N11_ACAAGCTTACGGAGGTG        N11        500          244   0.600000          0               4               4
    ## N11_ATAGGCTGCTGCACGCT        N11        500          258   1.200000          0               4               4
    ## N11_ATTCAGGGCTATTCACG        N11        500          242   1.200000          0               0               0
    ## N11_CTTTCAAATGCATGAAT        N11        500          272   1.600000          0               0               0
    ## N11_GGATGTTTACACGATAC        N11        500          261   3.600000          0               4               4
    ## N11_TCCTCCCGCTTTGCAGT        N11        500          256   1.400000          0               0               0
    ## N11_TCCTCTTATGGATATAC        N11        500          260   1.400000          0               4               4
    ## N11_AAACGAAGCTGAATTGA        N11        501          259   1.397206          0               0               0
    ## N11_ATTCCATATGGTAGCCG        N11        501          260   1.996008          0               4               4
    ## N11_CACTGAACGACTTGAAC        N11        501          281   1.397206          0               0               0
    
    # 因为barcode和seurat流程中的不一致,故需要修改(scRepertoire提供函数stripBarcode()可去除标签,这里因自己的优点不一样就自己修改了)
    
    # 定义一个函数,按指定符号分割字符串,并合并前两个分割后的元素
    split_and_merge <- function(string, delimiter) {
      splitted <- strsplit(string, delimiter)[[1]]
      return(paste(splitted[2:3], collapse = delimiter))
    }
    
    for (i in 1:length(data_bcr)) {
      barcode_i <- data_bcr[[i]]$barcode
      for (n in 1:length(barcode_i)) {
        barcode_i[n] <- split_and_merge(barcode_i[n], "_")
      }
      data_bcr[[i]]$barcode <- barcode_i
    }
    
    for (i in 1:length(data_tcr)) {
      barcode_i <- data_tcr[[i]]$barcode
      for (n in 1:length(barcode_i)) {
        barcode_i[n] <- split_and_merge(barcode_i[n], "_")
      }
      data_tcr[[i]]$barcode <- barcode_i
    }
    
    # 结合 TCR 和 BCR
    list.receptors <- c(data_bcr, data_tcr)
    
    seurat <- combineExpression(list.receptors, 
                                scRNA_harmony, 
                                cloneCall = "gene", 
                                proportion = FALSE, 
                                cloneTypes = c(Single = 1, Small = 5, Medium = 20, Large = 100, Hyperexpanded = 500))
    
    DimPlot(seurat, group.by = "cloneType", raster=FALSE) +
      scale_color_manual(values = colorblind_vector(5), na.value="grey") + 
      theme(plot.title = element_blank())
    
    TCR_BCR-15

    ꔷ 为了对频率进行分类,scRepertoire提供可变比例,如果 proportion 选择"TRUE" 允许相对比例;当 选择"FALSE" 时将使用绝对频率来定义克隆型组,cloneTypes充当放置标签的容器。默认情况下,cloneTypes设置为等于 cloneTypes = c(Rare = 1e-4、Small = 0.001、Medium = 0.01、Large = 0.1、Hyperexpanded = 1)
    ꔷ 需要注意的是,如果有重复的cell barcode(如果细胞同时具有 Ig 和 TCR),则不会添加免疫受体信息

    5.2 克隆覆盖(可视化克隆扩增细胞在降维图上的位置)

    默认为"PCA"和freq.cutpoint以生成等高线图,可通过选择bins的数量或freq.cutpoint的数量来修改轮廓。clonalOverlay()可用于查看所有单元格或使用facet通过元数据变量进行分面。当进行分面时,将保持整体降维,而等高线图将根据分面变量进行调整。

    clonalOverlay(seurat, 
                  reduction = "UMAP", 
                  freq.cutpoint = 30, 
                  bins = 10, 
                  facet = "Group") + 
      guides(color = "none")
    
    TCR_BCR-16

    5.2 克隆网络

    与 clonalOverlay() 类似,可以使用 clonalNetwork() 来查看簇之间共享的克隆型的相互作用网络。此函数显示来自起始节点的克隆的相对比例,结束节点由箭头指示。

    可以使用 3 种方法来过滤克隆:
    filter.clones:
    ꔷ 选择一个数字来分离包含前 X 个细胞的克隆 (filter.clones = 2000)
    ꔷ 选择"min"以确保所有组都缩放到最小组的大小
    filter.identity:
    对于选择要可视化的身份,显示单个组的往返网络连接
    filter.proportion:
    删除组中克隆数量少于一定比例的克隆

    # No Identity filter
    clonalNetwork(seurat, 
                  reduction = "UMAP", 
                  identity = "seurat_clusters",
                  filter.clones = NULL,
                  filter.identity = NULL,
                  cloneCall = "aa")
    
    # Examining Cluster 2 only
    clonalNetwork(seurat, 
                  reduction = "UMAP", 
                  identity = "seurat_clusters",
                  filter.identity = "C2",
                  cloneCall = "aa")
    
    TCR_BCR-17

    5.3 突出显示克隆型

    通过highlightClonotypes()查看特定序列的克隆型。为了突出显示克隆型,首先需要使用cloneCall我们将使用的序列类型,然后使用sequence特定序列本身。

    seurat <- highlightClonotypes(seurat, 
                                  cloneCall= "aa", 
                                  sequence = c("CARDAGTITVVGPSGIDRW_CMQALQTPRTF", 
                                               "NA_CMQALQTPRTF"))
    DimPlot(seurat, group.by = "highlight",raster=FALSE) + 
      theme(plot.title = element_blank())
    
    TCR_BCR-18

    5.4 占用的剧目

    可以通过使用occupiedscRepertoire()函数,并选择x 轴来显示单细胞对象元数据中的簇或其他变量,按簇查看分配到特定频率范围的细胞计数。
    proportion 可用于查看相对级别分组
    label 将返回克隆型的绝对数量

    occupiedscRepertoire(seurat, x.axis = "Group")
    
    TCR_BCR-19

    5.5 冲积克隆型

    修改meta数据后,可以使用"alluvialClonotypes()"函数查看多个类别的克隆型。本质上我们能够使用这些图来检查分类变量的交换,因为此函数将生成一个图表,其中每个克隆型按所谓的分层排列(需要一些时间,具体取决于总细胞的大小)

    alluvialClonotypes(seurat, cloneCall = "gene", 
                       y.axes = c("orig.ident", "Group", "celltype"), 
                       color = "orig.ident") 
    
    # 特定子集
    alluvialClonotypes(seurat, cloneCall = "gene", 
                       y.axes = c("orig.ident", "Group", "celltype"), 
                       color = "TRAV12-2.TRAJ42.TRAC_TRBV20-1.TRBD2.TRBJ2-3.TRBC2") + 
      scale_fill_manual(values = c("grey", colorblind_vector(2)[2]))
    
    TCR_BCR-20

    5.6 圆环

    与冲积图一样,可以使用 circlize R 包中的弦图来可视化簇的互连。

    library(circlize)
    library(scales)
    
    circles <- getCirclize(seurat, 
                           group.by = "seurat_clusters")
    # 为每个簇分配颜色
    grid.cols <- scales::hue_pal()(length(unique(seurat@active.ident)))
    names(grid.cols) <- levels(seurat@active.ident)
    # 绘图
    circlize::chordDiagram(circles,
                           self.link = 1, 
                           grid.col = grid.cols)
    
    # 对单细胞对象进行子集化来探索B细胞
    subset <- subset(seurat, celltype == "B_cell")
    
    circles <- getCirclize(subset, group.by = "seurat_clusters")
    grid.cols <- scales::hue_pal()(length(unique(subset@active.ident)))
    names(grid.cols) <- levels(subset@active.ident)
    
    chordDiagram(circles, self.link = 1, 
                 grid.col = grid.cols, directional = 1, 
                 direction.type =  "arrows",
                 link.arr.type = "big.arrow")
    
    TCR_BCR-21

    相关文章

      网友评论

          本文标题:单细胞数据分析笔记4: 免疫组库分析(scRepertoire)

          本文链接:https://www.haomeiwen.com/subject/mwkmtjtx.html