在免疫组库测序AIRR-Seq研究中我们常常不只关心单个 TCR/BCR 序列更希望找到与疾病状态、治疗响应或临床结局显著相关的一组相似免疫受体序列也就是免疫受体簇。NAIR 包提供了一套完整流程能从批量bulk)免疫组库样本数据中系统性挖掘这类具有生物学意义的关联簇。本文将完整介绍这一分析流程从关联序列筛选、相似克隆识别到全局网络构建与聚类分析。一、引言当我们拥有多份批量适应性免疫受体库测序bulk -AIRR-Seq样本时可以借助 NAIR 包研究与二分类变量相关的 TCR/BCR 簇。这里的二分类变量可以是疾病 / 健康、治疗组 / 对照组、预后良好 / 不良等。整个分析的核心思路是先找到组间差异显著的序列再扩展到与之相似的序列克隆最后构建网络并划分簇得到最终的关联簇。分析流程概览识别关联序列根据二分类变量将研究对象分为两组使用费希尔精确检验筛选出在两组间频率存在统计学显著差异的 TCR/BCR 序列。识别与关联序列相似的克隆对每个关联序列设定序列相似度阈值例如氨基酸差异不超过 1 个定义其 “邻域序列”并从所有样本中找出属于这些邻域的克隆。构建关联克隆的全局网络将上一步筛选出的所有克隆整合为一个全局网络通过聚类分析将网络划分为不同簇这些簇即为与目标表型相关的关联簇。后续分析与可视化在网络图中标记聚类编号、单独分析感兴趣的特定簇、绘制不同分组的着色方案等。二、安装并加载 NAIR 包首先安装并加载分析所需的核心包这是所有步骤的基础。install.packages(NAIR)library(NAIR)三、模拟演示数据为了清晰展示整个流程我们先构建一套模拟数据完全贴合真实研究的数据结构。set.seed(42)library(NAIR)data_dir- getwd()dir_input_samples- file.path(data_dir,input_samples)dir.create(dir_input_samples, showWarningsFALSE)n_control- n_treatment-15n_samples- n_control n_treatment sample_size-30base_seqs- c(CASSGAYEQYF,CSVDLGKGNNEQFF,CASSIEGQLSTDTQYF,CASSEEGQLSTDTQYF,CASSPEGQLSTDTQYF,RASSLAGNTEAFF,CASSHRGTDTQYF,CASDAGVFQPQHF)pgen_c- matrix(rep(c(rep(1,5), rep(30,3)),timesn_control), nrown_control, byrowTRUE)pgen_t- matrix(rep(c(1,1, rep(1/3,3), rep(2,3)),timesn_treatment), nrown_treatment, byrowTRUE)pgen- rbind(pgen_c, pgen_t)simulateToyData(samplesn_samples, sample_sizesample_size, prefix_length1, prefix_charsc(,), prefix_probscbind(rep(1, n_samples), rep(0, n_samples)), affixesbase_seqs, affix_probspgen, num_edits0, output_dirdir_input_samples, no_returnTRUE)group_labels- c(rep(control, n_control), rep(treatment, n_treatment))input_files- file.path(dir_input_samples,paste0(Sample,1:n_samples,.rds))length(input_files)四、步骤 1寻找关联序列第一步核心筛选两组间分布差异显著的受体序列使用findAssociatedSeqs()函数完成。根据二分类变量将研究对象分为两组使用费希尔精确检验筛选出在两组间频率存在统计学显著差异的 TCR/BCR 序列。associated_seqs- findAssociatedSeqs(file_listinput_files, input_typerds, group_idsgroup_labels, seq_colCloneSeq, min_seq_lengthNULL, drop_matchesNULL, min_sample_membershipNULL, pval_cutoff0.1)结果如下在后续的处理步骤中只需要关注并使用 ReceptorSeq 这一列的数据五、步骤 2查找关联克隆基于关联序列找到所有相似的克隆构建序列邻域数据集dir_nbds- file.path(data_dir,assoc_seq_nbds)findAssociatedClones(file_listinput_files, input_typerds, group_idsgroup_labels, seq_colCloneSeq, assoc_seqsassociated_seqs$ReceptorSeq, min_seq_lengthNULL, drop_matchesNULL, output_dirdir_nbds)结果如下one_nbd- readRDS(list.files(dir_nbds, full.namesTRUE)[[1]])head(one_nbd)六、步骤 3构建关联簇的全局网络整合所有相似克隆构建全局网络并划分关联簇这是核心分析步骤。nbd_files- list.files(dir_nbds, full.namesTRUE)all_clusters- buildAssociatedClusterNetwork(file_listnbd_files, seq_colCloneSeq, size_nodes_by1.5, print_plotsTRUE)names(all_clusters)head(all_clusters$node_data)head(all_clusters$cluster_data)七、步骤 4附加分析与可视化对网络结果进行精细化分析提升结果的实用性和可读性。all_clusters- addPlots(all_clusters, color_nodes_byAssocSeq, color_titleNeighborhood Sequence, size_nodes_by1.5, print_plotsTRUE)all_clusters- labelClusters(all_clusters, size10)all_clusters$plots[[1]]buildNet(dataall_clusters$node_data[all_clusters$node_data$cluster_id2,], seq_colCloneSeq, color_nodes_byc(CloneSeq,SampleID), color_schemec(plasma,turbo), size_nodes_by3, plot_titleCluster 2, print_plotsTRUE)八、结果保存将所有分析结果保存方便后续论文写作与数据复用。saveRDS(all_clusters,final_cluster_network.rds)write.csv(all_clusters$cluster_data,cluster_statistics.csv, row.namesFALSE)write.csv(all_clusters$node_data,node_information.csv, row.namesFALSE)注意事项步骤参数名称作用建议关注点Step 1group_ids定义样本分组必须准确错一位结果全错。Step 1pval_cutoff设定显著性门槛根据数据量调整多重检验时可能需要更严格。Step 2nbd_radius定义“相似”范围设为 0 只找完全相同的序列设为 1 找突变体。Step 3cluster_fun选择聚类算法默认算法通常可用若聚类效果不好可尝试更换。Step 3color_nodes_by可视化着色调试时可尝试不同值如SampleID以排查数据问题。