免疫组库是研究免疫系统多样性和抗体/ T细胞受体(TCR)识别特异性的关键步骤。在此过程中,V/D/J基因的使用偏向性作为重要参考指标之一,能够揭示免疫系统在不同个体或不同条件下如何选择和利用特定的基因片段,形成多样的免疫应答。V(变异)、D(多样)和J(连接)基因的组合决定了T细胞受体和B细胞受体的特异性,而这些组合的使用偏向性为理解免疫反应的机制、疾病的免疫特征以及疫苗的设计等方面提供了宝贵的线索。

通过高通量测序技术,如RNA-seq、TCR-seq或BCR-seq获得免疫组库数据。这些测序数据会提供每个样本中T细胞受体或B细胞受体的基因序列。
为了有效分析基因的使用频率,首先需要进行数据清洗与预处理。主要步骤包括:
接下来,利用已有的免疫基因数据库(如IMGT)对每个序列进行注释,以准确识别其中的V、D、J基因。可以使用专门的工具(如MiXCR、IgBlast等)来注释这些序列中的V、D、J基因,同时会统计每个序列(克隆子)的出现的次数与使用频率。
当每个克隆子的V、D、J基因组成被注释,也有该克隆子的出现次数及使用频率,接下来
统计每个V、D、J基因的使用频率存在两种计算方法:
这种方法基于每个测序读段(Read)的出现频率来计算V/D/J基因的使用频率。这里的关键点是将测序数据中的每个read与特定的克隆子(即基于相同DNA序列,相同V-D-J组合)关联起来。
计算步骤:
此方法的重点是基于测序中每个read的频率来度量基因的使用情况,因此通常适用于大规模测序数据。
这种方法基于克隆子的数量来计算V/D/J基因的使用频率。在这种方法中,克隆子是指具有相同DNA序列,无论这些序列在数据中的频率如何。
计算步骤:
这种方法的优势在于它直接关注克隆子(即由相同DNA序列构成的群体)的数量,而不是单个测序read的频率。这有助于识别更为稳定和广泛的免疫克隆,而不仅仅是看单个基因的序列出现频率。
library(dplyr)
# 示例数据框
sequences <- data.frame(
clone = c('ATGC', 'CGTA', 'GCTA', 'TACG', 'AGCT'),
Clonecount = c(10, 5, 15, 8, 2),
V_gene = c('V1', 'V2', 'V1', 'V3', 'V1'),
D_gene = c('D1', 'D2', 'D1', 'D3', 'D1'),
J_gene = c('J1', 'J1', 'J2', 'J1', 'J2'),
clonefrequency = c(10/40, 5/40, 15/40, 8/40, 2/40)
)
1. 以CloneCount(克隆子频率)为计量单位的R代码
# 计算 V 基因使用频率(基于 clonefrequency)
v_gene_freq_cumulative <- sequences %>%
group_by(V_gene) %>%
summarise(v_frequency = sum(clonefrequency))
# 计算 D 基因使用频率(基于 clonefrequency)
d_gene_freq_cumulative <- sequences %>%
group_by(D_gene) %>%
summarise(d_frequency = sum(clonefrequency))
# 计算 J 基因使用频率(基于 clonefrequency)
j_gene_freq_cumulative <- sequences %>%
group_by(J_gene) %>%
summarise(j_frequency = sum(clonefrequency))
# 查看结果
v_gene_freq_cumulative
d_gene_freq_cumulative
j_gene_freq_cumulative
#如果对原始输出文件进行过滤,导致clonefrequency总和不是100%,则用Clonecount.
# 计算V基因的使用频率(基于Clonecount)
v_gene_freq <- sequences %>%
group_by(V_gene) %>%
summarise(v_frequency = sum(Clonecount)) %>%
mutate(v_frequency = v_frequency / sum(v_frequency))
# 计算D基因的使用频率(基于Clonecount)
d_gene_freq <- sequences %>%
group_by(D_gene) %>%
summarise(d_frequency = sum(Clonecount)) %>%
mutate(d_frequency = d_frequency / sum(d_frequency))
# 计算J基因的使用频率(基于Clonecount)
j_gene_freq <- sequences %>%
group_by(J_gene) %>%
summarise(j_frequency = sum(Clonecount)) %>%
mutate(j_frequency = j_frequency / sum(j_frequency))
# 查看结果
v_gene_freq
d_gene_freq
j_gene_freq# 计算V基因的使用频率(基于Clonetype)
v_gene_clone_freq <- sequences %>%
group_by(V_gene) %>%
summarise(clone_count_v = n()) %>%
mutate(v_frequency_clone = clone_count_v / sum(clone_count_v))
# 计算D基因的使用频率(基于Clonetype)
d_gene_clone_freq <- sequences %>%
group_by(D_gene) %>%
summarise(clone_count_d = n()) %>%
mutate(d_frequency_clone = clone_count_d / sum(clone_count_d))
# 计算J基因的使用频率(基于Clonetype)
j_gene_clone_freq <- sequences %>%
group_by(J_gene) %>%
summarise(clone_count_j = n()) %>%
mutate(j_frequency_clone = clone_count_j / sum(clone_count_j))
# 查看结果
v_gene_clone_freq
d_gene_clone_freq
j_gene_clone_freq选择哪种方法取决于研究目标和数据的特点。如果您关注基因使用的频率和精细的测序数据,可以使用方法1;如果您更关注克隆子的多样性和群体结构,则方法2可能更为合适