目录
介绍
代码
复现
介绍
CloneTrack一种新的数学和免疫学方法,利用治疗前后外周血样本的T细胞受体(TCR) Vβ测序来鉴定治疗扩展的高强度T细胞克隆。
论文使用一种新的数学策略来跟踪T细胞克隆(CloneTrack)和功能分析,发现疫苗扩增的T细胞占所有血液T细胞的10%, 使用CloneTrack,在8名应答者中的8名和8名无应答者中的1名中检测到疫苗诱导的克隆扩增。
论文使用了P校正< 0.001的显著性阈值,其中P值使用Bonferroni校正进行调整来解释大量被筛选的T细胞克隆。
为了识别治疗扩展的T细胞克隆,论文使用了一种适应性Fisher精确检验,并使用双尾适应性Fisher精确检验(scipy.stats.fisher_exact实现)计算扩展T细胞克隆的P值,用于任意两个样本之间的T细胞克隆增加两倍的T细胞克隆。
定义倍数变化<2()的克隆的P值为1。然后使用Bonferroni校正对这些P值进行调整:
,其中
表示两个样本的并集中唯一克隆的个数。
代码
http:// https://github.com/zsethna/CloneTrack
file_name | function | num_code |
CloneTrack.py | 主体 | 126 |
TCellRepertoire.py | T细胞库 | 304 |
plotting.py | 画图 | 646 |
tcr_errors.py | 报错 | 90 |
tcr_seq_and_clone_definition.py | tcr序列与克隆定义 | 493 |
tcr_utils.py | 辅助函数和工具函数 | 544 |
复现
构建数据:(部分截图)
第一列TCR的count数 第二列TCR序列
文件二(after)将文件一(before)中两种TCR序列调高模拟T细胞克隆扩增
CASSQGRRGELFF 430 ->1230
CASSVDPDRYLYGYTF 201 -> 901
构建clonetrack代码:
变量 | 作用 |
file_path | 存储文件地址(文件必须包含TCR与count两列) |
seq_column | TCR所在文件的列数 |
value_column | count所在文件的列数 |
sum_counter | 库中TCR count 总数 |
dict_ | 存储TCR与count对应关系 字典 key:TCR value:count |
seq_list | 列表,存储库中出现过的TCR序列 |
函数 | 作用 |
create_dict | 将TCR库装载到dict_中 |
collect_seq | 统计库中出现过的TCR序列 |
python">class One_Sample:def __init__(self, file_path: str, seq_column: int, value_column: int):self.file_path = file_pathself.seq_column = seq_columnself.value_column = value_columnself.sum_counter = 0self.dict_ = self.create_dict()self.seq_list = self.collect_seq()def create_dict(self):dict_ = {}data = pd.read_csv(self.file_path, header=None, sep='\t')for seq, value in zip(data.iloc[:, self.seq_column].tolist(), data.iloc[:, self.value_column].tolist()):if dict_.get(seq) is None:dict_[seq] = valueelse:dict_[seq] += valueself.sum_counter += valuereturn dict_def collect_seq(self):seq_list = []for key in self.dict_:seq_list.append(key)return seq_list
变量 | 作用 |
file_path_b | 存储before信息的文件路径 |
file_path_a | 存储after信息的文件路径 |
fc | 确定克隆扩展的倍数变化,论文中为2 |
seq_column | TCR所在文件的列数 |
value_column | count所在文件的列数 |
seq_list | 列表,存储after与before出现过的TCR序列 |
sample_a | after的所有信息 |
sample_b | before的所有信息 |
matrix | 数据框,行为after与before出现过的TCR序列, 列为after与before两个库,将sample_a与sample_b 中TCR与count对应关系合并在一个表中 |
函数 | 作用 |
collect_seq | 统计after与before库中出现过的TCR序列 |
create_matrix | 合并sample_a与sample_b中TCR与count对应关系 |
find_clonetrack | k:确定克隆扩展的显著P阈值,论文中为0.001 使用Fisher精确检验,Bonferroni校正, 在倍数变化大于fc的TCR序列中寻找显著扩增。 |
python">class Two_Sample:def __init__(self, file_path_b: str, file_path_a: str, fc:int,seq_column: int, value_column: int):self.file_path_b = file_path_bself.file_path_a = file_path_aself.fc = fcself.seq_column = seq_columnself.value_column = value_columnself.seq_list = []self.sample_a = One_Sample(file_path=self.file_path_a,seq_column=self.seq_column, value_column=self.value_column)self.sample_b = One_Sample(file_path=self.file_path_b,seq_column=self.seq_column, value_column=self.value_column)self.collect_seq()self.matrix = pd.DataFrame(columns=['b', 'a'], index=self.seq_list, data=0)self.create_matrix()def collect_seq(self):self.seq_list.append(self.sample_a.seq_list)self.seq_list.append(self.sample_b.seq_list)self.seq_list = list(set([element for sublist in self.seq_list for element in sublist]))def create_matrix(self):for seq, value in self.sample_b.dict_.items():self.matrix.loc[seq, 'b'] = valuefor seq, value in self.sample_a.dict_.items():self.matrix.loc[seq, 'a'] = valuedef find_clonetrack(self,k):result = {}for seq in tqdm.tqdm(self.matrix.index,total=len(self.matrix.index)):rb, ra = self.matrix.loc[seq, 'b'], self.matrix.loc[seq, 'a']if ra/self.sample_a.sum_counter >= self.fc*rb/self.sample_b.sum_counter:p = np.clip(fisher_exact(np.array([[rb, self.sample_a.sum_counter - rb],[ra, self.sample_b.sum_counter - ra]]))[1] * len(self.seq_list), 0,1)result[seq] = pelse:result[seq] = 1for seq, value in result.items():if value <= k:print('seq:',seq, '\tp:',value)
对代码进行测试:
python">test = Two_Sample(file_path_b=r"D:\csdn\clonetrack\test1.txt",file_path_a=r"D:\csdn\clonetrack\test2.txt",fc=2,seq_column=1, value_column=0)
test.find_clonetrack(1e-3)
结果:
成功寻找到模拟T细胞克隆扩增的两条TCR。
python">seq: CASSQGRRGELFF p: 8.667190017586962e-87
seq: CASSVDPDRYLYGYTF p: 4.409099942894614e-103