前言
人源性组织异种移植(patient-derivedxenografts , PDX)模型是一种将肿瘤患者的肿瘤组织移植至重症免疫缺陷型小鼠(NSG
)体内,并使肿瘤组织在小鼠体内生长形成第一代移植瘤(图 1
)。

待其生长到一定大小时,取出该移植瘤组织并在无菌操作条件下移植到新一批小鼠体内,形成第二代移植瘤。如此重复操作形成移植瘤第三代、第四代等。
此种模型尽可能保留了亲代肿瘤的生长微环境,利于更好的表现亲代肿瘤性状,并且维持了肿瘤的异质性。
但同时也存在两个主要的问题,一是,从该模型中提取出的 DNA
片段不仅包含人类的基因,也存在一定比例的小鼠片段。另外一个问题就是该模型缺少配对的正常样本。
今天主要是想解决第一个问题:如何从 PDX
模型中去除小鼠的 reads
。
工具评估
目前,已有很多文章利用各种不同的工具来去除 PDX
模型中的小鼠 reads
。其中,用的比较多的工具有(表 1
):

2020
年 Yvonne A Evrard 等人通过模拟 WES
和 RNA-Seq
数据集来比较其中五个工具消除小鼠 reads
的功效。
其模拟方式为,在人类样本的测序 reads
数据中,掺入不同比例的小鼠基因组 reads
。
结果显示,所有工具在 WES
和 RNA-Seq
测试数据中准确率均高达 99%
(图 2
)。

其中 XenofilterR
的召回率最低(在 WES
和 RNA-seq
中,召回率分别为 96.60%
和 89.63%
)
BBSplit
的整体性能最好,即在没有任何召回损失的情况下具有最高的精度(在 WES
和 RNA-seq
数据中的准确率分别为为 99.87%
和 99.64%
)。
另外我们利用作者提供的数据展示了在不同 SE(单端)
阈值下各个工具的真阳率和假阳率(图 3
)。

从左图中我们可以看出 Bamcmp
和 Xenome
两个工具在不同的 SE
和 PE(双端)
阈值下的真阳性率都达到 99%
以上。
但是,从右图中可以看出 Bamcmp
在不同的 SE/PE
阈值下的假阳性不稳定,有时候甚至高达 0.2%
,而 Xenome
相对来说比较稳定,在不同情况下均低于 0.05%
。
综合以上结果,我们认为 Xenome
是相对比较好的一个用来去除小鼠 reads
的工具。
Xenome 简介
Xenome
是Thomas Conway1 等人在 2012
年提出来的,该工具从开发到现在每年都有被引用(图 4
),其中包含很多高分的文章(表 2
)。


Xenome
使用宿主参考序列和移植物种参考序列,在比对时的所有可能的 k-mers
是否具有以下特征来表征它们所属的类别:
- 只匹配移植物(
graft
),即非host
- 只匹配宿主(
host
),即非graft
- 匹配两个物种
- 都不匹配
- 部分
k-mers
在宿主与移植之间存在单碱基替换的差异
给定一条 read
或 配对 reads
,xenome
将计算其 k-mers
属于上述类别中的哪一个,并将其分类为:graft
,host
,both
, neither
或 ambiguous
其中之一(图5)。

Xenome 的使用
Xenome
有两个不同的功能块,使用两个单独的命令来调用:index
和 classify
。
1. index
参数列表
index
-D [ --debug ] arg 启用特定的调试输出
-h [ --help ] 显示帮助信息
-l [ --log-file ] arg 指定输出信息文件
-T [ --num-threads ] arg 设置最大线程
--tmp-dir arg 中间文件输出目录 (默认为 /tmp)
-v [ --verbose ] 显示程序运行进度
-V [ --version ] 显示软件版本
-M [ --max-memory ] arg 设置最大内存(GB)
-P [ --prefix ] arg 设置索引前缀,可以带路径但是文件夹必须存在
-G [ --graft ] arg 移植物参考基因组 FASTA 文件
-H [ --host ] arg 宿主参考基因组 FASTA 文件
-K [ --kmer-size ] arg kmer 长度(默认为 25)
在对 reads
进行分类之前,必须根据移植物和宿主参考序列构建索引。参考基因组序列必须为 FASTA
格式及其压缩格式(gzip
)。
xenome index -M 24 -T 8 -P idx -H mouse.fa -G human.fa
我们构建的索引文件为
$ ls
idx-both.header idx-both.lhs-bits idx-graft.kmers.low-bits.lwr idx-host.kmers.low-bits.lwr
idx-both.kmers-d0 idx-both.rhs-bits idx-graft.kmers.low-bits.upr idx-host.kmers.low-bits.upr
idx-both.kmers-d1 idx-graft.header idx-host.header
idx-both.kmers.header idx-graft.kmers-d0 idx-host.kmers-d0
idx-both.kmers.high-bits idx-graft.kmers-d1 idx-host.kmers-d1
idx-both.kmers.low-bits.lwr idx-graft.kmers.header idx-host.kmers.header
idx-both.kmers.low-bits.upr idx-graft.kmers.high-bits idx-host.kmers.high-bits
可以看到,索引都是以我们指定的 idx
作为前缀
有了索引之后,我们就可以来对 reads
进行分类了。
2. classify
参数列表
classify
-D [ --debug ] arg 启用特定的调试输出
-h [ --help ] 显示帮助信息
-l [ --log-file ] arg 指定输出信息文件
-T [ --num-threads ] arg 设置最大线程
--tmp-dir arg 中间文件输出目录 (默认为 /tmp)
-v [ --verbose ] 显示程序运行进度
-V [ --version ] 显示软件版本
-M [ --max-memory ] arg 设置最大内存(GB)
-P [ --prefix ] arg 设置索引前缀,可以带路径但是文件夹必须存在
-I [ --fasta-in ] arg 输入 FASTA 文件
-i [ --fastq-in ] arg 输入 FASTQ 文件
--line-in arg 输入文件的每一行是一个序列
--dont-write-reads 不产生 reads 输出文件
--graft-name arg graft reads 的名称
--host-name arg host reads 的名称
--output-filename-prefix 输出文件前缀
--pairs 双端测序文件
--preserve-read-order 在输入文件中保持 reads 的顺序
我们可以输入一个待分类的样本,可以是 FASTA
、FASTQ
格式或对应的压缩格式(gzip
),还支持每行代表一个序列的文本文件
xenome classify -P idx -i in.fastq
运行完此步骤之后,会为每种 reads
生成一个单独的文件,输出文件可能会有这些:
ambiguous.fastq
both.fastq
graft.fastq
host.fastq
neither.fastq
输出的 reads
文件的格式是与输入文件的格式一致的。
也可以同时指定多个输入文件,但是所有相同格式的输入都将被写入同一个输出文件。例如
xenome classify -P idx -i inA.fastq -i inB.fastq -I inC.fasta
将会产生以下文件:
ambiguous.fasta
ambiguous.fastq
both.fasta
both.fastq
graft.fasta
graft.fastq
host.fasta
host.fastq
neither.fasta
neither.fastq
每个 FASTQ
文件都包含来自 inA.fastq
和 inB.fastq
两个的 reads
的混合结果。FASTA
文件包含来自 inC.fasta
的读取。
如果不想混合来自不同文件的输入 reads
的结果,只能分开运行了。可以通过设置不同的输出文件前缀来区分来自不同的样本的 reads
。例如
xenome classify -P idx -i inA.fastq --output-filename-prefix A
xenome classify -P idx -i inB.fastq --output-filename-prefix B
运行上面的命令将产生如下结果:
A_ambiguous.fastq
A_both.fastq
A_graft.fastq
A_host.fastq
A_neither.fastq
B_ambiguous.fastq
B_both.fastq
B_graft.fastq
B_host.fastq
B_neither.fastq
Xenome
还可以处理双端测序的输入文件,例如
xenome classify -P idx --pairs -i in_1.fastq -i in_2.fastq
这将会为每个种类的 reads
输出结果文件名添加配对的 _1
和 _2
后缀来区分
ambiguous_1.fastq
ambiguous_2.fastq
both_1.fastq
both_2.fastq
graft_1.fastq
graft_2.fastq
host_1.fastq
host_2.fastq
neither_1.fastq
neither_2.fastq
如果需要,可以指定其他名称来替换 host
和 graft
。例如
xenome classify -P idx -i in.fastq --graft-name human --host-name mouse
将会产生下面的结果
ambiguous.fastq
both.fastq
human.fastq
mouse.fastq
neither.fastq
classify
命令在分类完 reads
之后,还会将每种类型的 reads
的统计信息打印到屏幕上。
Statistics
B G H M count percent class
0 0 0 0 59 0.00561983 "neither"
0 0 0 1 0 0 "both"
0 0 1 0 1977 0.188312 "definitely mouse"
0 0 1 1 565 0.0538171 "probably mouse"
0 1 0 0 362260 34.5058 "definitely human"
0 1 0 1 279050 26.5799 "probably human"
0 1 1 0 385 0.0366718 "ambiguous"
0 1 1 1 856 0.0815352 "ambiguous"
1 0 0 0 138 0.0131447 "both"
1 0 0 1 6 0.000571509 "probably both"
1 0 1 0 256 0.0243844 "definitely mouse"
1 0 1 1 3812 0.363098 "probably mouse"
1 1 0 0 34360 3.27284 "definitely human"
1 1 0 1 359172 34.2116 "probably human"
1 1 1 0 241 0.0229556 "ambiguous"
1 1 1 1 6716 0.639709 "ambiguous"
Summary
count percent class
1034842 98.5702 human
6610 0.629612 mouse
144 0.0137162 both
59 0.00561983 neither
8198 0.780871 ambiguous
在 Statistics
部分的信息中,B(both)
、G(graft)
、H(host)
、M(marginal)
下面的 16
行表示这些分类的组合(4×4
),1
表示属于该类,0
表示不属于。
count
表示每种子分类的 reads
数目,以及后面的 percent
表示 reads
数目占比。最后的 class
表示这一子类所属的最后的分类。
而在 Summary
部分的信息中,将上面的数据进行了汇总。最后被输出的分类中,各分类的 reads
数目及其占比
网友评论