Samtools中文说明书

samtools-1.2中文使用手册,英文原文发布于2015年12月15日。 本翻译为2016年4月20日第一稿,如有建议或疑问请联系 roden.luo [AT] gmail.com。

samtools-1.3中文使用手册正在筹备翻译中,欢迎参与。

NAME – 名字

samtools – 序列比对/图谱(SAM)格式的工具箱

SYNOPSIS – 概要

samtools view -bt ref_list.txt -o aln.bam aln.sam.gz

samtools sort -T /tmp/aln.sorted -o aln.sorted.bam aln.bam

samtools index aln.sorted.bam

samtools idxstats aln.sorted.bam

samtools view aln.sorted.bam chr2:20,100,000-20,200,000

samtools merge out.bam in1.bam in2.bam in3.bam

samtools faidx ref.fasta

samtools fixmate in.namesorted.sam out.bam

samtools mpileup -C50 -gf ref.fasta -r chr3:1,000-2,000 in1.bam in2.bam

samtools tview aln.sorted.bam ref.fasta

samtools flags PAIRED,UNMAP,MUNMAP

samtools bam2fq input.bam > output.fastq

DESCRIPTION – 描述

Samtools是一个用来处理BAM格式(SAM的二进制格式,译者注)的比对文件的工具箱。它能够输入和输出SAM(序列比对/图谱)格式的文件,对其进行排序、合并、建立索引等处理,还可以快速获取任意区域的reads。

Samtools被设计成以数据流的形式工作。它把标准输入作为输入(stdin)文件 `-‘ ,把标准输出作为输出(stdout)文件 `-‘ 。因此多个命令可以通过Unix的管道技术结合起来。Samtools总是把警告和错误消息输出到标准错误输出(stderr)。

Samtools也能够打开一个远程FTP或HTTP服务器上的BAM(SAM不行)文件,但是这个BAM文件名要以 `ftp://’ 或 `http://’ 开头。Samtools会在当前工作目录下检查相应的索引文件,如果不存在的话,它会把它下载下来。Samtools不会获取整个比对文件,除非你要求它这么做。

COMMANDS AND OPTIONS – 命令和参数

view
samtools view [options] in.bam|in.sam|in.cram [region…]

如果没有指定参数或者区域,这条命令会以SAM格式(不含头文件)打印输入文件(SAM,BAM或CRAM格式)里的所有比对到标准输出。

你可以在输入文件的文件名后面指定一个或多个以空格分隔的区域来限制输出,这样只会输出落在指定区域内的比对。要指定区域,需要一个对坐标排过序的并且建立了索引的输入文件(BAM或CRAM格式)。

-b, -C, -1, -u, -h, -H, 和 -c 参数会改变默认的没有头文件的SAM输出格式。 -o -U 参数可以设置输出文件的名字。

-t-T 参数用来提供额外的参考数据,当输入的SAM没有@SQ头文件的时候,必须需要提供这两个中的一个参数。无论何时,只要是输出CRAM格式,就必须提供 -T 参数。

-L, -r, -R, -q, -l, -m, -f, 和 -F 参数用来过滤比对,只有那些满足特定标准的比对会被输出。

-x, -B, 和 -s 参数用来修饰每个比对中的数据。

最后 -@ 参数可用来为压缩分配额外的线程,而 -? 参数可以得到一个很长的帮助信息。

REGIONS – 区域:
区域可以用如下方法制定:RNAME[:STARTPOS[-ENDPOS]] ,即:染色体名[:起始位点[-终止位点]],([ ] 中的内容表示为可选内容,可以指定,也可以不指定。译者注),并且,所有的坐标系统都是以1标记第一个碱基的(1-based)。

要非常注意的是:如果给定了多个区域,有些比对可能会被输出多次,因为它们和多个区域都匹配。

指定区域的例子:

`chr1′
把所有比对到参考序列中名为`chr1’(也就是头文件里标明的 @SQ SN:chr1)的比对全部输出。(chr一般为染色体的缩写,译者注)
`chr2:1000000′
chr2上从第1,000,000碱基开始的序列到这条染色体的结尾的区域。
`chr3:1000-2000′
chr3上从第1,000个碱基到第2,000个碱基之间的共1001bp的区域(包含两个端点)。

OPTIONS – 参数:

-b
以BAM格式输出。
-C
以CRAM格式输出(要求有 -T 参数)。
-1
启用快速BAM压缩(隐含 -b)。
-u
输出未压缩的BAM。这个参数省下了压缩/解压缩的时间,因此更适合在运用管道技术把另一个samtools命令结合在一起时使用。
-h
在输出中包含头文件。
-H
只输出头文件。
-c
与输出比对不同,只对它们计数,并且输出总数。所有的过滤参数,比如 -f, -F, 和 -q, 都可以被考虑进来。
-?
输出长篇帮助文档并且立即退出。
-o FILE
输出到 FILE [stdout] ([ ]中表示默认值,这里表示如果使用了-o参数,但没有提供文件名,输出到标准输出。译者注)。
-U FILE
把那些没有被各种过滤参数所选中的比对,输出到 FILE里面。 当这个参数被使用是,所有的比对(如果指定了区域,则是所有和指定区域相交的比对)要么被写进输出文件,要么被写进这个文件,但绝不会同时被写进两个文件。
-t FILE
一个以制表符(tab)分隔的文件 FILE。 每一行必须含有参考序列的名字,放在第一列,和这个参考序列的长度,放在第二列,每一行代表一个不同的参考序列。第二列后面的任何字段都会被忽略。这个文件同时也定义了在排序时的参考序列的顺序。如果你运行`samtools faidx <ref.fa>’,那么它输出的索引文件 <ref.fa>.fai 可以被用作这里的 FILE
-T FILE
一个FASTA格式的参考序列文件 FILE,可以是被 bgzip 压缩过的,并且最好是被 samtools faidx建立过索引的。 如果索引文件不存在,我们会为你生成一个。
-L FILE
只输出那些和输入的BEDFILE重合的比对 [null](默认为空)。
-r STR
只输出 STR 这个read group里面的比对 [null]。
-R FILE
输出文件 FILE 里面列出来的read groups里的比对 [null]。
-q INT
当比对的MAPQ小于 INT 时,忽略这个比对 [0]。
-l STR
只输出 STR 这个文库(library)里面的比对 [null]。
-m INT
Only output alignments with number of CIGAR bases consuming query sequence ≥ INT [0]
-f INT
Only output alignments with all bits set in INT present in the FLAG field. INT can be specified in hex by beginning with `0x’ (i.e. /^0x[0-9A-F]+/) or in octal by beginning with `0′ (i.e. /^0[0-7]+/) [0].
-F INT
Do not output alignments with any bits set in INT present in the FLAG field. INT can be specified in hex by beginning with `0x’ (i.e. /^0x[0-9A-F]+/) or in octal by beginning with `0′ (i.e. /^0[0-7]+/) [0].
-x STR
Read tag to exclude from output (repeatable) [null]
-B
Collapse the backward CIGAR operation.
-s FLOAT
Integer part is used to seed the random number generator [0]. Part after the decimal point sets the fraction of templates/pairs to subsample [no subsampling].
-@ INT
进行BAM压缩操作时,除了主线程之外,额外分配的线程数 [0]。
-S
这个参数会被忽略,它只是为了和旧版本的samtools相兼容。之前,如果输入文件是SAM格式的话,必须添加这个参数,但是现在,软件会侦测输入的前几个字符,自动确定正确的格式。
tview
samtools tview [-p chr:pos] [-s STR] [-d display] <in.sorted.bam> [ref.fasta]

文字版的reads和参考序列的比对情况的查看器(基于 ncurses library )。在这个查看器中,按下 `?’ 来寻求帮助,按下 `g’ 可以从某个区域开始查看比对,这个区域用如下格式来表示:`chr10:10,000,000’,或者,当继续查看相同的参考序列时,可以使用 `=10,000,000’。

Options:

-d display
以Html格式(H)、Curses格式(C)或文本格式(T)输出。
-p chr:pos
直接到达这个位置。
-s STR
只显示 STR 这个样本或read group的比对。
mpileup
samtools mpileup [-EBugp] [-C capQcoef] [-r reg] [-f in.fa] [-l list] [-Q minBaseQ] [-q minMapQ] in.bam [in2.bam []]

对一个或多个BAM文件,生成VCF、BCF或者pileup(堆积文件)。比对记录会按照头文件中@RG行里面样本标识符(SM)来分组。如果样本标识符不存在,那么每一个输入文件都被视作一个独立的样本。

在(没有使用 -u -g 参数的)pileup格式中,每一行代表基因组上的一个位置,它由染色体名字,1-based坐标(该染色体的第一个碱基标为1),参考序列上的碱基,覆盖这个位点的reads数目,read上的碱基,碱基的质量和比对的质量构成。下列信息:匹配、不匹配、插入删除、正反向链、比对质量、是否是某read的起始或终止碱基,全部都编码在read上的碱基这里面了。在这一列中,一个点代表和参考序列正向链相同的一个匹配,一个逗号代表和反向链相同的一个匹配。一个 ‘>’ 或 ‘<‘ 代表a reference skip(抱歉,译者还不确定含义,不知该如何翻译),`ACGTN’代表正向链上的一个mismatch(不匹配),`acgtn’代表反向链上的一个mismatch。这样的一个样式,`\\+[0-9]+[ACGTNacgtn]+’,代表了在参考序列上这个位置和下个位置之间的一个insertion(插入)。Insertion的长度由样式中的数字给出,它后面是插入的序列。同样的,这个样式,`-[0-9]+[ACGTNacgtn]+’,代表一个deletion(删除)。在之后的行中,被删除的碱基会用 `*’ 来代表。同样在这一列中,一个 `^’ 符号表示是某read的起始点。 `^’的ASCII码减去33给出了比对质量。一个 `$’ 表示是某read的终止点。

Input Options – 输入参数:

-6, –illumina1.3+
假设质量是用Illumina 1.3+编码的话。
-A, –count-orphans
在识别变异时,不要跳过反常的read。
-b, –bam-list FILE
输入的BAM文件的地址的列表,一个文件一行。 [null]
-B, –no-BAQ
Disable probabilistic realignment for the computation of base alignment quality (BAQ). BAQ is the Phred-scaled probability of a read base being misaligned. Applying this option greatly helps to reduce false SNPs caused by misalignments.
-C, –adjust-MQ INT
Coefficient for downgrading mapping quality for reads containing excessive mismatches. Given a read with a phred-scaled probability q of being generated from the mapped position, the new mapping quality is about sqrt((INT-q)/INT)*INT. A zero value disables this functionality; if enabled, the recommended value for BWA is 50. [0]
-d, –max-depth INT
在一个位置上,对每个BAM输入文件,最多读取 INT 个reads。 [250]
-E, –redo-BAQ
在运行时重新计算BAQ,忽略存在的BQ标签。
-f, –fasta-ref FILE
faidx建立了索引的FASTA格式的参考序列文件,这个文件也可以是被bgzip压缩过的。 [null]
-G, –exclude-RG FILE
排除列在文件FILE里面的readgroups里面的reads。(每一个@RG-ID占一行)
-l, –positions FILE
BED或者是列了位置坐标的文件,这个文件含有一列区间或位点,这些地方是生产pileup或BCF的位置。如果是BED文件,坐标系统是0-based half-open(第一个碱基是0,区间是半开的)的。[null]
-q, -min-MQ INT
最小的比对质量,某个比对的质量超过该值时才会被使用。[0]
-Q, –min-BQ INT
最小的碱基质量,某个碱基的质量超过该值时才会被使用。[13]
-r, –region STR
只产生这个区域的pileup。需要建立了索引的BAM文件。如果和 -l 同时使用的话,会考虑两个要求的交集。STR[all sites]
-R, –ignore-RG
忽略RG标签,把一个BAM文件中所有的reads都视为一个样本。
–rf, –incl-flags STR|INT
需要的flag的标签:不在这里的mask bits(flag的值)的reads会被忽略 [null]
–ff, –excl-flags STR|INT
过滤flags:忽略有这些mask bits标记的reads [UNMAP,SECONDARY,QCFAIL,DUP]
-x, –ignore-overlaps
取消read-pair(双端测序的两个reads)的重叠的检查。

Output Options – 输出参数:

-o, –output FILE
把pileup或者VCF/BCF输出到FILE,而不是默认的标准输出里面。

(这个短参数同时被 –open-prob–output 使用。如果-o的参数含有任何非数字的字符,而不是由 + 或 – 符号开头,它会被视作是–output。通常文件的扩展名会考虑到这一点,但是如果要写入到一个完全由数字组成的文件名,使用 -o ./123–output 123 。)

-g, –BCF
计算基因型的概率,并输出到binary call format(BCF,二进制识别格式)。在v1.0版本的samtools中,它是BCF2,和BCF1格式是不兼容的,而以前的版本(0.1.x)输出的是BCF1。
-v, –VCF
计算基因型的概率,并输出到variant call format(VCF,变异识别格式)。输出是bgzip压缩后的VCF,除非设定了-u参数。

Output Options for mpileup format (without -g or -v) – mpileup格式的输出参数(没有 -g 或 -v):

-O, –output-BP
输出reads里面碱基的位置。
-s, –output-MQ
输出mapping的质量。

Output Options for VCF/BCF format (with -g or -v) – VCF/BCF格式的输出参数(有 -g 或 -v):

-D
输出每个样本的read depth(深度)[DEPRECATED – use -t DP instead](不再宜用,使用-t DP来替代它)
-S
输出每个样本的Phred标准的的链的bias(偏差)的P-value(不再宜用,使用-t SP来替代它)
-t, –output-tags LIST
输出逗号分隔的 FORMAT 和 INFO 标签的列表(大小写不敏感): DP (高质量碱基的数目,FORMAT), DV (高质量的非参考序列的碱基数,FORMAT), DPR (支持每个观察到的allele(等位基因)的高质量的碱基数,FORMAT), INFO/DPR (支持每个观察到的allele(等位基因)的高质量的碱基数,INFO), DP4 (高质量的 ref-forward, ref-reverse, alt-forward and alt-reverse (正向-参考序列,反向-参考序列,正向-突变序列,反向-突变序列)的碱基数目,FORMAT), SP (Phred标准的的链的bias(偏差)的P-value,FORMAT) [null]
-u, –uncompressed
输出未被压缩的VCF/BCF,在使用unix管道(pipe)时推荐这个参数。
-V
输出每个样本的非参考序列的reads数 (不再宜用,使用-t DV来替代它)

Options for SNP/INDEL Genotype Likelihood Computation (for -g or -v): 对SNP/INDEL基因型的概率计算的参数 (for -g or -v):

-e, –ext-prob INT
Phred标准的gap延伸的测序错误概率。降低INT值会产生更长的indels。 [20]
-F, –gap-frac FLOAT
最小的有gap的reads的比例。 [0.002]
-h, –tandem-qual INT
对同聚物错误建模的系数。考虑一个长度为 l 的同聚物而言,大小为 s 的indel的测序错误是如下建模的: INT * s / l. [100]
-I, –skip-indels
不进行INDEL的识别。
-L, –max-idepth INT
当每个样本的平均深度大于 INT 时,略过INDEL的识别。 [250]
-m, –min-ireads INT
识别候选indel时,最小的存在gap的reads数目 INT。 [1]
-o, –open-prob INT
由测序错误引入的gap的Phred-标准的概率。减少 INT 值会识别更多的indel。 [40]

(这个短参数同时被 –open-prob–output 使用。当 -o 的参数是可选的 + 或 – 号,跟随着数字0-9的话,它会被视作 –open-prob。)

-p, –per-sample-mF
Apply -m and -F thresholds per sample to increase sensitivity of calling. By default both options are applied to reads pooled from all samples.
-P, –platforms STR
逗号分隔的一列仪器平台(由@RG-PL决定的),候选indel会从这些reads中获取。我们建议从低indel错误率的测序平台,比如ILLUMINA,中去收集候选indel。 [all]
reheader
samtools reheader <in.header.sam> <in.bam>

in.header.sam 里面的头文件替换 in.bam 里的。这个命令比通过BAM→SAM→BAM转换来替换头文件要快很多。

cat
samtools cat [-h header.sam] [-o out.bam] <in1.bam> <in2.bam> [ … ]

串连 BAM 文件。每一个输入的BAM里面的 sequence dictionary 必须相同,虽然这个命令并不检查这一点。这个命令使用了和 reheader 类似的小技巧来实现了快速的BAM串连。

sort
samtools sort [-l level] [-m maxMem] [-o out.bam] [-O format] [-n] -T out.prefix [-@ threads] [in.bam]

对序列进行排序。默认通过最左边的坐标排序;当使用 -n 时,通过read的名字排序。 一个相应的 @HD-SO 排序顺序标签会被添加在头文件里面,或者如果必要的话会更新已经存在的标签。

排好序后默认输出到标准输出,如果使用了 -o 的话,就输出到指定的文件里面 (out.bam) 。当整个的序列数据不能放入内存(可以通过 -m 参数来控制)的时候,这个命令也会产生一些临时文件 out.prefix.%d.bam

Options:

-l INT
为最终的输出文件设置想要的压缩程度,从0(不压缩)或1(最快但是压缩得最少)到9(最大程度压缩但是写得最慢),和 gzip(1) 的压缩程度设置相似。

如果 -l 没有被使用,会使用默认的压缩程度。

-m INT
每个线程的最大内存,以 bytes 为单位设定或者添加一个 K, M, 或 G 后缀。 [768 MiB]
-n
根据read的名字(也就是 QNAME 那一列)来排序,而不是染色体坐标。
-o FILE
最后排好序后输出到 FILE 中,而不是标准输出。
-O FORMAT
最终输出 sam, bam, 或 cram

默认地,samtools 会基于 -o 文件的扩展名尝试选择一个格式;如果是到标准输出或者格式不能被推测出, -O 必须要被指定。

-T PREFIX
把临时文件写到 PREFIX.nnnn.bam. 里面。这个参数是必须的。
-@ INT
设置排序和压缩的线程数,该操作默认是单线程的。

为了和之前的脚本兼容,samtools sort 也支持以前的不太灵活的方式去指定临时的和最终的输出文件名:

samtools sort [-nof] [-m maxMem] in.bam out.prefix

排好序的BAM会被输出到 out.prefix.bam中,(或者由下面提到的 -o-f 决定),而且,任何临时文件都会被写进out.prefix.%d.bam

-o
把最后比对的结果输出到标准输出。
-f
使用 out.prefix 作为输出的全路径,并且不要添加 .bam 后缀。
-l, -m, -n, -@
以上面提到的相同的含义被接收。

最终这个会被删除的,您应该改去使用新的更灵活的调用方法。

merge
samtools merge [-nur1f] [-h inh.sam] [-R reg] [-b <list>] <out.bam> <in1.bam> <in2.bam> [<in3.bam> … <inN.bam>]

合并多个排好序的比对文件,产生一个排好序的输出文件,这个文件含有所有的输入记录,并且保留了他们原来的顺序。

如果 -h 被指定了的话,输入文件里的@SQ头文件将会被合并到指定的头中,否则的话,他们会被合并成由输入的头文件组成的复合的头中。如果在合并@SQ行的过程中,这些行体现了输入文件排好序的坐标,而在序列当中又出现了一个矛盾(比如说,input1.bam 有一个@SQ是 a,b,c 而input2.bam是 b,a,c),那么输出的结果文件需要被重新按照坐标序列排序。

除非指定了 -c-p 标志,在合并 @RG 和 @PG 记录到输出的头文件的时候,任何和现有 IDs 重复的 IDs 将会连接一个后缀把它们和其他头文件中相似的记录区分开来,并且read记录也会被更新来反映这一点。

OPTIONS:

-1
使用 zlib 压缩等级1来压缩输出文件。
-b FILE
输入 BAM 文件的列表,每行一个文件。
-f
如果输出文件存在的话,强制覆盖它。
-h FILE
FILE 的`@’头复制到 out.bam 中,如果不指定该参数的话,会复制 out.bam 的头。( FILE 实际是 SAM 格式的,但是它里面可能存在的任何比对记录都会被忽略。)
-n
使输入的比对序列按照read的名字来排序,而不是染色体坐标。
-R STR
在由 STR 指定的特定区域中合并文件。 [null]
-r
给每个比对添加一个 RG 标签,标签的值是通过文件名来推测的。
-u
输出未被压缩的 BAM 。
-c
把 RG 标签和 colliding IDs 结合,而不是添加一个后缀去区分它们。
-p
把 PG 标签和 colliding IDs 结合,而不是添加一个后缀去区分它们。
index
samtools index [-bc] [-m INT] aln.bam|aln.cram

为按坐标排好序的 BAM 或 CRAM 文件,用以快速随机访问。下列情况是需要这个索引的:用 region 参数限制了 samtools view , 和类似的针对特定感兴趣区域的命令。

对于一个 CRAM 文件, aln.cram ,名为 aln.cram.crai 的索引文件将会被创建。 对于一个 BAM 文件, aln.bam , 名为 aln.bam.baialn.bam.csi 的索引文件中的一个将会被创建,这由选择的索引格式决定。

Options:

-b
创建一个 BAI 索引,这是目前没用指定格式参数时的默认值。
-c
创建一个 CSI 索引。默认情况下,索引的最小间隔大小是 2^14 ,这和 BAI 使用的的固定值是一样的。
-m INT
创建一个 CSI 索引,使用 2^INT 作为最小间隔大小。
idxstats
samtools idxstats <aln.bam>

获取并且打印索引文件的统计信息。输出文件是制表符分隔的,每一行含有参考序列名,序列长度,比对上去的read数和没有比对上去的read数。

faidx
samtools faidx <ref.fasta> [region1 […]]

对FASTA格式的参考序列建立索引,或者从已建立索引的参考序列中获取子序列。 如果没有指定区间, faidx 会为这个文件在硬盘上创建索引文件 <ref.fasta>.fai 。如果指定了区间,相应的子序列会被获取并以FASTA格式打印到标准输出。输入文件可以是以 BGZF 格式的压缩文件。

fixmate
samtools fixmate [-rpc] [-O format] in.nameSrt.bam out.bam

从一个按照名字排序后的比对文件中,添加mate的坐标, ISIZE ,和mate相关的flag。

OPTIONS:

-r
删除次要的和没有比对上的reads。
-p
不使用 FR 匹配检查。
-c
添加模板 cigar ct 标签。
-O FORMAT
Write the final output as sam, bam, or cram.

默认地, samtools 会尝试基于输出文件的扩展名选择一个格式;如果是输出到标准输出或者格式不能被推出,就必须要指定 -O 参数。

rmdup
samtools rmdup [-sS] <input.srt.bam> <out.bam>

去除可能的由PCR造成的重复序列:如果多个 read pair 有相同的坐标,只保留比对质量最高的那一对。在双端模式下,这个命令用于FR方向并且要求正确设置 ISIZE 。它不处理不配对的 reads (比如两端比对到不同的染色体上了或者孤reads(pair中只有一个read比对到基因组了))。

OPTIONS:

-s
去除重复的单端测序reads。默认地,这个命令只对双端测序reads工作。
-S
处理双端测序reads和单端测序reads。
calmd
samtools calmd [-EeubSr] [-C capQcoef] <aln.bam> <ref.fasta>

产生 MD 标签。如果 MD 标签已经存在,并且新产生的MD标签和已有的不一样的话,这个命令会发出一个警告。默认输出成 SAM 。

OPTIONS:

-A
当和 -r 一起使用时,这个选项会重写原始的碱基质量。
-e
如果某个碱基和它比对上的参考序列是一致的,就把它转换成 = 。现在的插入删除的识别软件并不支持 = 的碱基。
-u
输出没有压缩的 BAM 文件。
-b
输出压缩的 BAM 文件。
-S
输入文件是带头文件的 SAM 。
-C INT
用来对低比对质量的reads加帽的系数。更多细节请查看 pileup 命令。 [0]
-r
计算 BQ 标签(没有 -A) 或者对碱基质量加帽(有 -A)。
-E
扩展版的 BAQ 计算,这个参数削弱了特异性而增加了敏感性,虽然只有小的影响。
targetcut
samtools targetcut [-Q minBaseQ] [-i inPenalty] [-0 em0] [-1 em1] [-2 em2] [-f ref] <in.bam>

这个命令鉴别目标区域,它通过检查 read 深度的连续性,来计算目标区域的单倍体的一致序列,并为每个相应目标区域输出一个序列到 SAM 文件中。当指定了参数 -f 时,会使用 BAQ 。这个命令的设计,只是为了 cutting fosmid clones from fosmid pool sequencing [Ref. Kitzman et al. (2010)].

phase
samtools phase [-AF] [-k len] [-b prefix] [-q minLOD] [-Q minBaseQ] <in.bam>

识别并且 phase (分相位)杂合SNPs。

OPTIONS:

-A
不处理那些 phase (相位)不清晰的 reads 。 Drop reads with ambiguous phase.
-b STR
Prefix of BAM output. When this option is in use, phase-0 reads will be saved in file STR.0.bam and phase-1 reads in STR.1.bam. Phase unknown reads will be randomly allocated to one of the two files. Chimeric reads with switch errors will be saved in STR.chimeric.bam. [null]
-F
不要尝试修复嵌合型的 reads 。
-k INT
局部 phasing 的最大长度。 [13]
-q INT
用以识别杂合子的最小的 Phred 标准的 LOD 值。 [40]
-Q INT
用于识别杂合的最小的碱基质量。 [13]
flags
samtools flags INT|STR[,…]

文本式和数字式的标志法之间的转换。

FLAGS:

0x1 PAIRED .. 双端(多段)测序技术
0x2 PROPER_PAIR .. 每短序列都被 aligner 合适的比对上了
0x4 UNMAP .. 片段未比对成功
0x8 MUNMAP .. 模板中的下一个片段没有被比对上
0x10 REVERSE .. SEQ序列是反向互补的
0x20 MREVERSE .. SEQ序列的下一段是反向互补的
0x40 READ1 .. 模板中的第一个片段
0x80 READ2 .. 模板中的最后一个片段
0x100 SECONDARY .. 次要比对
0x200 QCFAIL .. 没有通过质量控制
0x400 DUP .. PCR或者光学的重复
0x800 SUPPLEMENTARY .. 增补的比对
bam2fq
samtools bam2fq [-nO] [-s <outSE.fq>] <in.bam>

把 bam 转换成 FASTQ 格式。

OPTIONS:

-n
默认情况下,根据 BAM_READ1 或 BAM_READ2 的标志,‘/1’ 或者 ‘/2’ 会被相应的添加在read名字的末尾。 使用 -n 会保留原有的read的名字。
-O
如果可行的话,同标准质量字符串相比,优先选择使用 OQ 标签里的质量值.
-s FILE
把单个的 reads 以 FASTQ 格式写入 FILE 中,而不是输出他们。
help, –help
列出samtools可用的命令,并显示他们的简要用法。 如果同时指定了某个命令,如 samtools help view ,那么这个命令的详细用法将会被展示出来。
–version
显示 samtools 的版本号和版权信息,同时也列出 samtools 所使用的重要的库。
–version-only
以机器可读的格式显示 samtools 的完整版本号。

REFERENCE SEQUENCES – 参考序列

对于读和写,CRAM格式都需要使用参考序列。

当读取一个 CRAM 文件的时候,会去查询 @SQ 头文件,以寻找参考序列的MD5sum (M5: 标签)和本地参考序列文件(UR: 标签)。注意,基于http://ftp:// 的网址是不可以在 UR: 字段使用的,但是本地的 fasta 文件名(不管有没有添加 file:// )是可以的。

当创建一个 CRAM 文件的时候,@SQ 头文件也会被读取然后识别参考序列,但是 M5: 和 UR: 标签可能不存在。 在这种情况下,可以使用 samtools view 的 -T-t 参数去分别指定 fasta 或 fasta.fai 文件名(提供的 .fasta.fai 文件同样需要有 .fasta 文件做支撑)。

获取参考序列的搜索顺序是:

使用由命令行参数(比如 -T)指定的任何文件。

通过 REF_CACHE 环境变量查找 MD5。

查询 REF_PATH 环境变量中每个元素的 MD5 。

查找列在 UR 头标签里的本地文件。

ENVIRONMENT VARIABLES – 环境变量

REF_PATH
由冒号分隔(在windows上是分号)的一列位置,用于去搜索由MD5sum指定的序列。它可以是 一列目录或者网址。注意,如果是网址的话,http:// 和 ftp:// 以及可能出现的端口号中的冒 号将不会被视为网址的一部分,而不会被当做 PATH 字段的分隔符。对于网址而言, %s 会被读入的 MD5 替换。

如果没有指定REF_PATH,那么将会使用默认值:http://www.ebi.ac.uk/ena/cram/md5/%s; 如果 REF_CACHE 也没有指定的话,那么将会被设置成 $XDG_CACHE_HOME/hts-ref/%2s/%2s/%s 。 如果 $XDG_CACHE_HOME 没有设置的话, 会使用$HOME/.cache (如果没有找到 home 文件夹的话, 会使用本地系统的临时文件夹)。

REF_CACHE
这可被定义为一个单一的文件夹,用作本地的序列缓存区。一旦下载了一个参考序列,它将会被储存在 由REF_CACHE指定的位置。当读取一个参考序列时,会先在这个文件夹下搜索,然后再去 REF_PATH 搜索。 为了避免同一个文件夹下存入了大量的文件,可能会使用 %nums and %s 标记去创建一个由 MD5sum 中 num 字符构成的路径。例如:/local/ref_cache/%2s/%2s/%s 这串字符 将会创建一个嵌套两层的文件夹,最内层的文件夹里面将会存入 md5sum 最后的28个字符。

REF_CACHE 会被先搜索,然后才会尝试通过 REF_PATH 搜索列表加载。 如果 REF_PATH 没有被设定,那么 REF_PATH 和 REF_CACHE 会被自动设置(参见上文)。 但是如果 REF_PATH 被设定了而 REF_CACHE 没有被设定,那么就不会使用本地缓存。

为了方便生成更多的 REF_CACHE 文件夹下的内容,我们在Samtools软件中提供了一个 脚本,misc/seq_ref_populate.pl。它会为一个 fasta 文件或一个文件夹下所有的 fasta 文件生成 MD5sum 命名的文件。

EXAMPLES – 示例

@SQ 行存在于头文件中时,把 SAM 转化为 BAM 格式:

samtools view -bS aln.sam > aln.bam

如果 @SQ 行不存在:

samtools faidx ref.fa
samtools view -bt ref.fa.fai aln.sam > aln.bam

ref.fa.fai 是由 faidx 命令自动生成的。

使用本地的参考序列,把 BAM 文件转换成 CRAM 文件。

samtools view -C -T ref.fa aln.bam > aln.cram

在合并排序后的比对序列的时候,添加 RG 标签:

perl -e 'print "@RG\\tID:ga\\tSM:hs\\tLB:ga\\tPL:Illumina\\n@RG\\tID:454\\tSM:hs\\tLB:454\\tPL:454\\n"' > rg.txt
samtools merge -rh rg.txt merged.bam ga.bam 454.bam

RG 标签的值是由包含这个read的文件名决定的。在这个例子中,在 merged.bam 里面, 来源于 ga.bam 的reads会被标记成 RG:Z:ga ,而来源于 454.bam 的reads则会被 标记成 RG:Z:454

识别 SNP 和短 INDEL (插入删除):

samtools mpileup -uf ref.fa aln.bam | bcftools call -mv > var.raw.vcf
bcftools filter -s LowQual -e '%QUAL<20 || DP>100' var.raw.vcf  > var.flt.vcf

bcftools filter 命令会标记低质量的位点,和read深度超过一个限度的位点, 这个限度应该被调整为大约两倍平均测序深度(更大的read深度通常意味着富含虚假信息的问题区域)。 对于含有过量mismatch的reads而言,它们mapping的质量如果被高估了的话,分析员可以考虑 给 mpileup 添加 -C50 。应用这个参数通常对 BWA-short 有所 帮助,对别的比对软件可能没有帮助。

个体是由 @RG header行的 SM 标签来确定的。不同个体可以放到一个比对文件中; 一个个体也可以被分到多个文件中。参数 -P 指明候选indel应该只从 @RG-PL 标签为 ILLUMINA 的read groups中收集。从容易出现indel的测序技术测出来的reads中收集候选 indel可能会影响indel识别的性能。

为一个二倍体个体产生保守序列

samtools mpileup -uf ref.fa aln.bam | bcftools call -c | vcfutils.pl vcf2fq > cns.fq

为一个个体解单倍体型(Phase one individual):

samtools calmd -AEur aln.bam ref.fa | samtools phase -b prefix - > phase.out

命令 calmd 用来减少INDELs附近的假杂合。

Dump BAQ applied alignment for other SNP callers:

samtools calmd -bAr aln.bam > aln.baq.bam

该命令同时添加并矫正 NMMD 标签。calmd 命令也有 -C 参数, 同 pileupmpileup 里面的是一样的。如果有帮助,可以使用它。

LIMITATIONS – 限制

在 bam_import.c, bam_endian.h, bam.c 和 bam_aux.c 中,单词没有对齐。

Samtools 对双端测序的 rmdup 命令对非配对的reads不适用。(例如:孤reads或者两条map到不同染 色体上的双端测序的reads).如果要考虑这个的话,请使用 Picard 的 MarkDuplicates ,虽然有一点慢, 但它能够正确地处理这些情况。

AUTHOR – 作者

桑格研究所的 Heng Li 写了 C 版本的 samtools 。Broad研究院的 Bob Handsaker 实现了 BGZF 库。 John Marshall 和 Petr Danecek 为源码做出了贡献,并且,千人基因组计划中的许多人为 SAM 格式标准 做出了贡献。

SEE ALSO – 另请参阅

bcftools(1), sam(5)

Samtools 网站: <http://samtools.sourceforge.net>
Samtools 最新源码: <https://github.com/samtools/samtools>
SAM/BAM,CRAM,VCF/BCF 的文件格式标准: <http://samtools.github.io/hts-specs>
HTSlib 网站: <https://github.com/samtools/htslib>
Bcftools 网站: <http://samtools.github.io/bcftools>

samtools常用命令详解

samtools常用命令详解

samtools的说明文档:http://samtools.sourceforge.net/samtools.shtml
samtools是一个用于操作sam和bam文件的工具合集。包含有许多命令。以下是常用命令的介绍

1. view

view命令的主要功能是:将sam文件转换成bam文件;然后对bam文件进行各种操作,比如数据的排序(不属于本命令的功能)和提取(这些操作是对bam文件进行的,因而当输入为sam文件的时候,不能进行该操作);最后将排序或提取得到的数据输出为bam或sam(默认的)格式。

bam文件优点:bam文件为二进制文件,占用的磁盘空间比sam文本文件小;利用bam二进制文件的运算速度快。

view命令中,对sam文件头部的输入(-t或-T)和输出(-h)是单独的一些参数来控制的。

Usage: samtools view [options] <in.bam>|<in.sam> [region1 [...]]
默认情况下不加 region,则是输出所有的 region.

Options: -b       output BAM
                  默认下输出是 SAM 格式文件,该参数设置输出 BAM 格式
         -h       print header for the SAM output
                  默认下输出的 sam 格式文件不带 header,该参数设定输出sam文件时带 header 信息
         -H       print header only (no alignments)
         -S       input is SAM
                  默认下输入是 BAM 文件,若是输入是 SAM 文件,则最好加该参数,否则有时候会报错。
         -u       uncompressed BAM output (force -b)
                  该参数的使用需要有-b参数,能节约时间,但是需要更多磁盘空间。
         -c       Instead of printing the alignments, only count them and print the 
                  total number. All filter options, such as ‘-f’, ‘-F’ and ‘-q’ , 
                  are taken into account.
         -1       fast compression (force -b)
         -x       output FLAG in HEX (samtools-C specific)
         -X       output FLAG in string (samtools-C specific)
         -c       print only the count of matching records
         -L FILE  output alignments overlapping the input BED FILE [null]
         -t FILE  list of reference names and lengths (force -S) [null]
                  使用一个list文件来作为header的输入
         -T FILE  reference sequence file (force -S) [null]
                  使用序列fasta文件作为header的输入
         -o FILE  output file name [stdout]
         -R FILE  list of read groups to be outputted [null]
         -f INT   required flag, 0 for unset [0]
         -F INT   filtering flag, 0 for unset [0] 
                  Skip alignments with bits present in INT [0]
                  数字4代表该序列没有比对到参考序列上
                  数字8代表该序列的mate序列没有比对到参考序列上
         -q INT   minimum mapping quality [0]
         -l STR   only output reads in library STR [null]
         -r STR   only output reads in read group STR [null]
         -s FLOAT fraction of templates to subsample; integer part as seed [-1]
         -?       longer help

例子:

将sam文件转换成bam文件
$ samtools view -bS abc.sam > abc.bam
$ samtools view -b -S abc.sam -o abc.bam

提取比对到参考序列上的比对结果
$ samtools view -bF 4 abc.bam > abc.F.bam

提取paired reads中两条reads都比对到参考序列上的比对结果,只需要把两个4+8的值12作为过滤参数即可
$ samtools view -bF 12 abc.bam > abc.F12.bam

提取没有比对到参考序列上的比对结果
$ samtools view -bf 4 abc.bam > abc.f.bam

提取bam文件中比对到caffold1上的比对结果,并保存到sam文件格式
$ samtools view abc.bam scaffold1 > scaffold1.sam

提取scaffold1上能比对到30k到100k区域的比对结果
$ samtools view abc.bam scaffold1:30000-100000 $gt; scaffold1_30k-100k.sam

根据fasta文件,将 header 加入到 sam 或 bam 文件中
$ samtools view -T genome.fasta -h scaffold1.sam > scaffold1.h.sam

2. sort

sort对bam文件进行排序。

Usage: samtools sort [-n] [-m <maxMem>] <in.bam> <out.prefix>  
-m 参数默认下是 500,000,000 即500M(不支持K,M,G等缩写)。对于处理大数据时,如果内存够用,则设置大点的值,以节约时间。
-n 设定排序方式按short reads的ID排序。默认下是按序列在fasta文件中的顺序(即header)和序列从左往右的位点排序。

例子:

$ samtools sort abc.bam abc.sort
$ samtools view abc.sort.bam | less -S

3.merge

将2个或2个以上的已经sort了的bam文件融合成一个bam文件。融合后的文件不需要则是已经sort过了的。

Usage:   samtools merge [-nr] [-h inh.sam] <out.bam> <in1.bam> <in2.bam>[...]

Options: -n       sort by read names
         -r       attach RG tag (inferred from file names)
         -u       uncompressed BAM output
         -f       overwrite the output BAM if exist
         -1       compress level 1
         -R STR   merge file in the specified region STR [all]
         -h FILE  copy the header in FILE to <out.bam> [in1.bam]

Note: Samtools' merge does not reconstruct the @RG dictionary in the header. Users
      must provide the correct header with -h, or uses Picard which properly maintains
      the header dictionary in merging.

4.index

必须对bam文件进行默认情况下的排序后,才能进行index。否则会报错。

建立索引后将产生后缀为.bai的文件,用于快速的随机处理。很多情况下需要有bai文件的存在,特别是显示序列比对情况下。比如samtool的tview命令就需要;gbrowse2显示reads的比对图形的时候也需要。

Usage: samtools index <in.bam> [out.index]

例子:

以下两种命令结果一样
$ samtools index abc.sort.bam
$ samtools index abc.sort.bam abc.sort.bam.bai

5. faidx

对fasta文件建立索引,生成的索引文件以.fai后缀结尾。该命令也能依据索引文件快速提取fasta文件中的某一条(子)序列

Usage: samtools faidx <in.bam> [ [...]]

对基因组文件建立索引
$ samtools faidx genome.fasta
生成了索引文件genome.fasta.fai,是一个文本文件,分成了5列。第一列是子序列的名称;
第二列是子序列的长度;个人认为“第三列是序列所在的位置”,因为该数字从上往下逐渐变大,
最后的数字是genome.fasta文件的大小;第4和5列不知是啥意思。于是通过此文件,可以定
位子序列在fasta文件在磁盘上的存放位置,直接快速调出子序列。

由于有索引文件,可以使用以下命令很快从基因组中提取到fasta格式的子序列
$ samtools faidx genome.fasta scffold_10 > scaffold_10.fasta

6. tview

tview能直观的显示出reads比对基因组的情况,和基因组浏览器有点类似。

Usage: samtools tview <aln.bam> [ref.fasta]

当给出参考基因组的时候,会在第一排显示参考基因组的序列,否则,第一排全用N表示。
按下 g ,则提示输入要到达基因组的某一个位点。例子“scaffold_10:1000"表示到达第
10号scaffold的第1000个碱基位点处。
使用H(左)J(上)K(下)L(右)移动显示界面。大写字母移动快,小写字母移动慢。
使用空格建向左快速移动(和 L 类似),使用Backspace键向左快速移动(和 H 类似)。
Ctrl+H 向左移动1kb碱基距离; Ctrl+L 向右移动1kb碱基距离
可以用颜色标注比对质量,碱基质量,核苷酸等。30~40的碱基质量或比对质量使用白色表示;
20~30黄色;10~20绿色;0~10蓝色。
使用点号'.'切换显示碱基和点号;使用r切换显示read name等
还有很多其它的使用说明,具体按 ? 键来查看。

7. flagstat

给出BAM文件的比对结果

Usage: samtools flagstat <in.bam>

$ samtools flagstat example.bam
11945742 + 0 in total (QC-passed reads + QC-failed reads)
#总共的reads数
0 + 0 duplicates
7536364 + 0 mapped (63.09%:-nan%)
#总体上reads的匹配率
11945742 + 0 paired in sequencing
#有多少reads是属于paired reads
5972871 + 0 read1
#reads1中的reads数
5972871 + 0 read2
#reads2中的reads数
6412042 + 0 properly paired (53.68%:-nan%)
#完美匹配的reads数:比对到同一条参考序列,并且两条reads之间的距离符合设置的阈值
6899708 + 0 with itself and mate mapped
#paired reads中两条都比对到参考序列上的reads数
636656 + 0 singletons (5.33%:-nan%)
#单独一条匹配到参考序列上的reads数,和上一个相加,则是总的匹配上的reads数。
469868 + 0 with mate mapped to a different chr
#paired reads中两条分别比对到两条不同的参考序列的reads数
243047 + 0 with mate mapped to a different chr (mapQ>=5)

#同上一个,只是其中比对质量>=5的reads的数量

7. depth

得到每个碱基位点的测序深度,并输出到标准输出。

Usage: bam2depth [-r reg] [-q baseQthres] [-Q mapQthres] [-b in.bed] <in1.bam> [...]

8. 其它有用的命令

reheader 替换bam文件的头

$ samtools reheader <in.header.sam> <in.bam>

cat 连接多个bam文件,适用于非sorted的bam文件

$ samtools cat [-h header.sam] [-o out.bam] <in1.bam> <in2.bam> [ ... ]

idxstats 统计一个表格,4列,分别为”序列名,序列长度,比对上的reads数,unmapped reads number”。第4列应该是paired reads中有一端能匹配到该scaffold上,而另外一端不匹配到任何scaffolds上的reads数。

$ samtools idxstats <aln.bam>

9. 将bam文件转换为fastq文件

有时候,我们需要提取出比对到一段参考序列的reads,进行小范围的分析,以利于debug等。这时需要将bam或sam文件转换为fastq格式。
该网站提供了一个bam转换为fastq的程序:http://www.hudsonalpha.org/gsl/information/software/bam2fastq

$ wget http://www.hudsonalpha.org/gsl/static/software/bam2fastq-1.1.0.tgz
$ tar zxf bam2fastq-1.1.0.tgz
$ cd bam2fastq-1.1.0
$ make
$ ./bam2fastq <in.bam>

10. mpileup

samtools还有个非常重要的命令mpileup,以前为pileup。该命令用于生成bcf文件,再使用bcftools进行SNP和Indel的分析。bcftools是samtool中附带的软件,在samtools的安装文件夹中可以找到。

最常用的参数有2: -f 来输入有索引文件的fasta参考序列; -g 输出到bcf格式。用法和最简单的例子如下

Usage: samtools mpileup [-EBug] [-C capQcoef] [-r reg] [-f in.fa] [-l list] [-M capMapQ] [-Q minBaseQ] [-q minMapQ] in.bam [in2.bam [...]]

$ samtools mpileup -f genome.fasta abc.bam > abc.txt
$ samtools mpileup -gSDf genome.fasta abc.bam > abc.bcf
$ samtools mpileup -guSDf genome.fasta abc.bam | \
           bcftools view -cvNg - > abc.vcf

mpileup不使用-u或-g参数时,则不生成二进制的bcf文件,而生成一个文本文件(输出到标准输出)。该文本文件统计了参考序列中每个碱基位点的比对情况;该文件每一行代表了参考序列中某一个碱基位点的比对结果。比如:

scaffold_1      2841    A       11      ,,,...,....     BHIGDGIJ?FF
scaffold_1      2842    C       12      ,$,,...,....^I. CFGEGEGGCFF+
scaffold_1      2843    G       11      ,,...,.....     FDDDDCD?DD+
scaffold_1      2844    G       11      ,,...,.....     FA?AAAA<AA+
scaffold_1      2845    G       11      ,,...,.....     F656666166*
scaffold_1      2846    A       11      ,,...,.....     (1.1111)11*
scaffold_1      2847    A       11      ,,+9acggtgaag.+9ACGGTGAAT.+9ACGGTGAAG.+9ACGGTGAAG,+9acggtgaag.+9ACGGTGAAG.+9ACGGTGAAG.+9ACGGTGAAG.+9ACGGTGAAG.+9ACGGTGAAG       %.+....-..)
scaffold_1      2848    N       11      agGGGgGGGGG     !!$!!!!!!!!
scaffold_1      2849    A       11      c$,...,.....    !0000000000
scaffold_1      2850    A       10      ,...,.....      353333333

mpileup生成的结果包含6行:参考序列名;位置;参考碱基;比对上的reads数;比对情况;比对上的碱基的质量。其中第5列比较复杂,解释如下:

1 ‘.’代表与参考序列正链匹配。
2 ‘,’代表与参考序列负链匹配。
3 ‘ATCGN’代表在正链上的不匹配。
4 ‘atcgn’代表在负链上的不匹配。
5 ‘*’代表模糊碱基
6 ‘^’代表匹配的碱基是一个read的开始;’^’后面紧跟的ascii码减去33代表比对质量;这两个符号修饰的是后面的碱基,其后紧跟的碱基(.,ATCGatcgNn)代表该read的第一个碱基。
7 ‘$’代表一个read的结束,该符号修饰的是其前面的碱基。
8 正则式’\+[0-9]+[ACGTNacgtn]+’代表在该位点后插入的碱基;比如上例中在scaffold_1的2847后插入了9个长度的碱基acggtgaag。表明此处极可能是indel。
9 正则式’-[0-9]+[ACGTNacgtn]+’代表在该位点后缺失的碱基;

pileup具体的参数如下:

输入参数
-6       Assume the quality is in the Illumina 1.3+ encoding. -A Do not skip anomalous read pairs in variant calling. 
-B       Disable probabilistic realignment for the computation of base alignment quality (BAQ). BAQ is the Phred-scaled probability of a read base being misaligned. Applying this option greatly helps to reduce false SNPs caused by misalignments. 
-b FILE  List of input BAM files, one file per line [null]
-C INT   Coefficient for downgrading mapping quality for reads containing excessive mismatches. Given a read with a phred-scaled probability q of being generated from the mapped position, the new mapping quality is about sqrt((INT-q)/INT)*INT. A zero value disables this functionality; if enabled, the recommended value for BWA is 50. [0] 
-d INT   At a position, read maximally INT reads per input BAM. [250] 
-E       Extended BAQ computation. This option helps sensitivity especially for MNPs, but may hurt specificity a little bit. 
-f FILE  The faidx-indexed reference file in the FASTA format. The file can be optionally compressed by razip. [null] 
-l FILE  BED or position list file containing a list of regions or sites where pileup or BCF should be generated [null] 
-M INT       cap mapping quality at INT [60]
-q INT 	Minimum mapping quality for an alignment to be used [0] 
-Q INT 	Minimum base quality for a base to be considered [13]
-r STR 	Only generate pileup in region STR [all sites] 

输出参数
-D 	Output per-sample read depth (require -g/-u)
-g 	Compute genotype likelihoods and output them in the binary call format (BCF). 
-S 	Output per-sample Phred-scaled strand bias P-value (require -g/-u) 
-u 	Similar to -g except that the output is uncompressed BCF, which is preferred for piping. 

Options for Genotype Likelihood Computation (for -g or -u):
-e INT 	Phred-scaled gap extension sequencing error probability. Reducing INT leads to longer indels. [20] 
-h INT 	Coefficient for modeling homopolymer errors. Given an l-long homopolymer run, the sequencing error of an indel of size s is modeled as INT*s/l. [100] 
-I 	Do not perform INDEL calling 
-L INT 	Skip INDEL calling if the average per-sample depth is above INT. [250] 
-o INT 	Phred-scaled gap open sequencing error probability. Reducing INT leads to more indel calls. [40] 
-P STR 	Comma dilimited list of platforms (determined by @RG-PL) from which indel candidates are obtained. It is recommended to collect indel candidates from sequencing technologies that have low indel error rate such as ILLUMINA. [all]

11. 使用bcftools

bcftools和samtools类似,用于处理vcf(variant call format)文件和bcf(binary call format)文件。前者为文本文件,后者为其二进制文件。

bcftools使用简单,最主要的命令是view命令,其次还有index和cat等命令。index和cat命令和samtools中类似。此处主讲使用view命令来进行SNP和Indel calling。该命令的使用方法和例子为:

$ bcftools view [-AbFGNQSucgv] [-D seqDict] [-l listLoci] [-s listSample] 
          [-i gapSNPratio] [-t mutRate] [-p varThres] [-P prior] 
          [-1 nGroup1] [-d minFrac] [-U nPerm] [-X permThres] 
          [-T trioType] in.bcf [region]

$ bcftools view -cvNg abc.bcf > snp_indel.vcf

生成的结果文件为vcf格式,有10列,分别是:1 参考序列名;2 varianti所在的left-most位置;3 variant的ID(默认未设置,用’.’表示);4 参考序列的allele;5 variant的allele(有多个alleles,则用’,’分隔);6 variant/reference QUALity;7 FILTers applied;8 variant的信息,使用分号隔开;9 FORMAT of the genotype fields, separated by colon (optional); 10 SAMPLE genotypes and per-sample information (optional)。
例如:

scaffold_1      2847    .       A       AACGGTGAAG      194     .       INDEL;DP=11;VDB=0.0401;AF1=1;AC1=2;DP4=0,0,8,3;MQ=35;FQ=-67.5   GT:PL:GQ        1/1:235,33,0:63
scaffold_1      3908    .       G       A       111     .       DP=13;VDB=0.0085;AF1=1;AC1=2;DP4=0,0,5,7;MQ=42;FQ=-63   GT:PL:GQ        1/1:144,36,0:69
scaffold_1      4500    .       A       G       31.5    .       DP=8;VDB=0.0034;AF1=1;AC1=2;DP4=0,0,1,3;MQ=42;FQ=-39    GT:PL:GQ        1/1:64,12,0:21
scaffold_1      4581    .       TGGNGG  TGG     145     .       INDEL;DP=8;VDB=0.0308;AF1=1;AC1=2;DP4=0,0,0,8;MQ=42;FQ=-58.5    GT:PL:GQ        1/1:186,24,0:45
scaffold_1      4644    .       G       A       195     .       DP=21;VDB=0.0198;AF1=1;AC1=2;DP4=0,0,10,10;MQ=42;FQ=-87 GT:PL:GQ        1/1:228,60,0:99
scaffold_1      4827    .       NACAAAGA        NA      4.42    .       INDEL;DP=1;AF1=1;AC1=2;DP4=0,0,1,0;MQ=40;FQ=-37.5       GT:PL:GQ        0/1:40,3,0:3
scaffold_1      4854    .       A       G       48      .       DP=6;VDB=0.0085;AF1=1;AC1=2;DP4=0,0,2,1;MQ=41;FQ=-36    GT:PL:GQ        1/1:80,9,0:16
scaffold_1      5120    .       A       G       85      .       DP=8;VDB=0.0355;AF1=1;AC1=2;DP4=0,0,5,3;MQ=42;FQ=-51    GT:PL:GQ        1/1:118,24,0:45

第8列中显示了对variants的信息描述,比较重要,其中的 Tag 的描述如下:

Tag	Format	Description
AF1	double	Max-likelihood estimate of the site allele frequency (AF) of the first ALT allele
DP	int	Raw read depth (without quality filtering)
DP4	int[4]	# high-quality reference forward bases, ref reverse, alternate for and alt rev bases
FQ	int	Consensus quality. Positive: sample genotypes different; negative: otherwise
MQ	int	Root-Mean-Square mapping quality of covering reads
PC2	int[2]	Phred probability of AF in group1 samples being larger (,smaller) than in group2
PCHI2	double	Posterior weighted chi^2 P-value between group1 and group2 samples
PV4	double[4]	P-value for strand bias, baseQ bias, mapQ bias and tail distance bias
QCHI2	int	Phred-scaled PCHI2
RP	int	# permutations yielding a smaller PCHI2
CLR	int	Phred log ratio of genotype likelihoods with and without the trio/pair constraint
UGT	string	Most probable genotype configuration without the trio constraint
CGT	string	Most probable configuration with the trio constraint

bcftools view 的具体参数如下:

Input/Output Options:
-A 	Retain all possible alternate alleles at variant sites. By default, the view command discards unlikely alleles.
-b 	Output in the BCF format. The default is VCF.
-D FILE Sequence dictionary (list of chromosome names) for VCF->BCF conversion [null]
-F 	Indicate PL is generated by r921 or before (ordering is different).
-G 	Suppress all individual genotype information.
-l FILE List of sites at which information are outputted [all sites]
-N 	Skip sites where the REF field is not A/C/G/T
-Q 	Output the QCALL likelihood format
-s FILE List of samples to use. The first column in the input gives the sample names and the second gives the ploidy, which can only be 1 or 2. When the 2nd column is absent, the sample ploidy is assumed to be 2. In the output, the ordering of samples will be identical to the one in FILE. [null]
-S 	The input is VCF instead of BCF.
-u 	Uncompressed BCF output (force -b). 

Consensus/Variant Calling Options:
-c 	Call variants using Bayesian inference. This option automatically invokes option -e.
-d FLOAT When -v is in use, skip loci where the fraction of samples covered by reads is below FLOAT. [0]
        当有多个sample用于variants calling时,比如多个转录组数据或多个重测序
        数据需要比对到参考基因组上,设置该值,表明至少有该<float 0~1>比例的
        samples在该位点都有覆盖才计算入variant.所以对于只有一个sample的情况
        下,该值设置在0~1之间没有意义,大于1则得不到任何结果。
-e 	Perform max-likelihood inference only, including estimating the site allele frequency, testing Hardy-Weinberg equlibrium and testing associations with LRT.
-g 	Call per-sample genotypes at variant sites (force -c)
-i FLOAT Ratio of INDEL-to-SNP mutation rate [0.15]
-p FLOAT A site is considered to be a variant if P(ref|D)
-t FLOAT Scaled muttion rate for variant calling [0.001]
-T STR 	Enable pair/trio calling. For trio calling, option -s is usually needed to be applied to configure the trio members and their ordering. In the file supplied to the option -s, the first sample must be the child, the second the father and the third the mother. The valid values of STR are ‘pair’, ‘trioauto’, ‘trioxd’ and ‘trioxs’, where ‘pair’ calls differences between two input samples, and ‘trioxd’ (‘trioxs’) specifies that the input is from the X chromosome non-PAR regions and the child is a female (male). [null]
-v 	Output variant sites only (force -c) 

Contrast Calling and Association Test Options:
-1 INT 	Number of group-1 samples. This option is used for dividing the samples into two groups for contrast SNP calling or association test. When this option is in use, the following VCF INFO will be outputted: PC2, PCHI2 and QCHI2. [0]
-U INT 	Number of permutations for association test (effective only with -1) [0]
-X FLOAT Only perform permutations for P(chi^2)

使用bcftools得到variant calling结果后。需要对结果再次进行过滤。主要依据比对结果中第8列信息。其中的 DP4 一行尤为重要,提供了4个数据:1 比对结果和正链一致的reads数、2 比对结果和负链一致的reads数、3 比对结果在正链的variant上的reads数、4 比对结果在负链的variant上的reads数。可以设定 (value3 + value4)大于某一阈值,才算是variant。比如:

$ perl -ne 'print $_ if /DP4=(\d+),(\d+),(\d+),(\d+)/ && ($3+$4)>=10 && ($3+$4)/($1+$2+$3+$4)>=0.8' snp_indel.vcf > snp_indel.final.vcf

12. samtools rmdup

NGS上机测序前需要进行PCR一步,使一个模板扩增出一簇,从而在上机测序的时候表现出为1个点,即一个reads。若一个模板扩增出了多簇,结果得到了多个reads,这些reads的坐标(coordinates)是相近的。在进行了reads比对后需要将这些由PCR duplicates获得的reads去掉,并只保留最高比对质量的read。使用rmdup命令即可完成.

Usage:  samtools rmdup [-sS]  
-s 对single-end reads。默认情况下,只对paired-end reads
-S 将Paired-end reads作为single-end reads处理。

$ samtools input.sorted.bam output.bam

Deep Learning System Improves Breast Cancer Detection

Researchers from Beth Israel Deaconess Medical Center (BIDMC) and Harvard Medical School have developed a deep learning approach to read and interpret pathology images.

Trained on Tesla K80 GPUs with the cuDNN-accelerated Caffe deep learning framework, their system achieved 92 percent accuracy at identifying breast cancer in images of lymph nodes which earned them the top prize in two separate categories at the annual International Symposium of Biomedical Imaging (ISBI) challenge. The team also published a paper detailing more of their work.

For the slide-based classification task, human pathologists were accurate 96 percent of the time.

DL Breast Cancer Detection Image
The framework used for breast cancer detection.

Andrew Beck from BIDMC said what’s truly exciting is that 99.5 percent accuracy can be achieved when the pathologists’ analysis and results from the deep learning system are used together. He added, “Our results in the ISBI competition show that what the computer is doing is genuinely intelligent and that the combination of human and computer interpretations will result in more precise and more clinically valuable diagnoses to guide treatment decisions.”

Awesome Machine Learning

Table of Contents

APL

General-Purpose Machine Learning

  • naive-apl – Naive Bayesian Classifier implementation in APL

C

General-Purpose Machine Learning

  • Recommender – A C library for product recommendations/suggestions using collaborative filtering (CF).
  • Darknet – Darknet is an open source neural network framework written in C and CUDA. It is fast, easy to install, and supports CPU and GPU computation.

Computer Vision

  • CCV – C-based/Cached/Core Computer Vision Library, A Modern Computer Vision Library
  • VLFeat – VLFeat is an open and portable library of computer vision algorithms, which has Matlab toolbox

Speech Recognition

  • HTK -The Hidden Markov Model Toolkit (HTK) is a portable toolkit for building and manipulating hidden Markov models.

C++

Computer Vision

  • OpenCV – OpenCV has C++, C, Python, Java and MATLAB interfaces and supports Windows, Linux, Android and Mac OS.
  • DLib – DLib has C++ and Python interfaces for face detection and training general object detectors.
  • EBLearn – Eblearn is an object-oriented C++ library that implements various machine learning models
  • VIGRA – VIGRA is a generic cross-platform C++ computer vision and machine learning library for volumes of arbitrary dimensionality with Python bindings.

General-Purpose Machine Learning

  • mlpack – A scalable C++ machine learning library
  • DLib – A suite of ML tools designed to be easy to imbed in other applications
  • encog-cpp
  • shark
  • Vowpal Wabbit (VW) – A fast out-of-core learning system.
  • sofia-ml – Suite of fast incremental algorithms.
  • Shogun – The Shogun Machine Learning Toolbox
  • Caffe – A deep learning framework developed with cleanliness, readability, and speed in mind. [DEEP LEARNING]
  • CXXNET – Yet another deep learning framework with less than 1000 lines core code [DEEP LEARNING]
  • XGBoost – A parallelized optimized general purpose gradient boosting library.
  • CUDA – This is a fast C++/CUDA implementation of convolutional [DEEP LEARNING]
  • Stan – A probabilistic programming language implementing full Bayesian statistical inference with Hamiltonian Monte Carlo sampling
  • BanditLib – A simple Multi-armed Bandit library.
  • Timbl – A software package/C++ library implementing several memory-based learning algorithms, among which IB1-IG, an implementation of k-nearest neighbor classification, and IGTree, a decision-tree approximation of IB1-IG. Commonly used for NLP.
  • Disrtibuted Machine learning Tool Kit (DMTK) – A distributed machine learning (parameter server) framework by Microsoft. Enables training models on large data sets across multiple machines. Current tools bundled with it include: LightLDA and Distributed (Multisense) Word Embedding.
  • igraph – General purpose graph library
  • Warp-CTC – A fast parallel implementation of Connectionist Temporal Classification (CTC), on both CPU and GPU.
  • CNTK – The Computational Network Toolkit (CNTK) by Microsoft Research, is a unified deep-learning toolkit that describes neural networks as a series of computational steps via a directed graph.
  • DeepDetect – A machine learning API and server written in C++11. It makes state of the art machine learning easy to work with and integrate into existing applications.
  • Fido – A highly-modular C++ machine learning library for embedded electronics and robotics.
  • DSSTNE – A software library created by Amazon for training and deploying deep neural networks using GPUs which emphasizes speed and scale over experimental flexibility.
  • Intel(R) DAAL – A high performance software library developed by Intel and optimized for Intel’s architectures. Library provides algorithmic building blocks for all stages of data analytics and allows to process data in batch, online and distributed modes.

Natural Language Processing

  • MIT Information Extraction Toolkit – C, C++, and Python tools for named entity recognition and relation extraction
  • CRF++ – Open source implementation of Conditional Random Fields (CRFs) for segmenting/labeling sequential data & other Natural Language Processing tasks.
  • CRFsuite – CRFsuite is an implementation of Conditional Random Fields (CRFs) for labeling sequential data.
  • BLLIP Parser – BLLIP Natural Language Parser (also known as the Charniak-Johnson parser)
  • colibri-core – C++ library, command line tools, and Python binding for extracting and working with basic linguistic constructions such as n-grams and skipgrams in a quick and memory-efficient way.
  • ucto – Unicode-aware regular-expression based tokenizer for various languages. Tool and C++ library. Supports FoLiA format.
  • libfolia – C++ library for the FoLiA format
  • frog – Memory-based NLP suite developed for Dutch: PoS tagger, lemmatiser, dependency parser, NER, shallow parser, morphological analyzer.
  • MeTAMeTA : ModErn Text Analysis is a C++ Data Sciences Toolkit that facilitates mining big text data.

Speech Recognition

  • Kaldi – Kaldi is a toolkit for speech recognition written in C++ and licensed under the Apache License v2.0. Kaldi is intended for use by speech recognition researchers.

Sequence Analysis

  • ToPS – This is an objected-oriented framework that facilitates the integration of probabilistic models for sequences over a user defined alphabet.

Gesture Detection

  • grt – The Gesture Recognition Toolkit (GRT) is a cross-platform, open-source, C++ machine learning library designed for real-time gesture recognition.

Common Lisp

General-Purpose Machine Learning

  • mgl – Neural networks (boltzmann machines, feed-forward and recurrent nets), Gaussian Processes
  • mgl-gpr – Evolutionary algorithms
  • cl-libsvm – Wrapper for the libsvm support vector machine library

Clojure

Natural Language Processing

  • Clojure-openNLP – Natural Language Processing in Clojure (opennlp)
  • Infections-clj – Rails-like inflection library for Clojure and ClojureScript

General-Purpose Machine Learning

  • Touchstone – Clojure A/B testing library
  • Clojush – The Push programming language and the PushGP genetic programming system implemented in Clojure
  • Infer – Inference and machine learning in clojure
  • Clj-ML – A machine learning library for Clojure built on top of Weka and friends
  • Encog – Clojure wrapper for Encog (v3) (Machine-Learning framework that specializes in neural-nets)
  • Fungp – A genetic programming library for Clojure
  • Statistiker – Basic Machine Learning algorithms in Clojure.
  • clortex – General Machine Learning library using Numenta’s Cortical Learning Algorithm
  • comportex – Functionally composable Machine Learning library using Numenta’s Cortical Learning Algorithm

Data Analysis / Data Visualization

  • Incanter – Incanter is a Clojure-based, R-like platform for statistical computing and graphics.
  • PigPen – Map-Reduce for Clojure.
  • Envision – Clojure Data Visualisation library, based on Statistiker and D3

Elixir

General-Purpose Machine Learning

  • Simple Bayes – A Simple Bayes / Naive Bayes implementation in Elixir.

Natural Language Processing

  • Stemmer – An English (Porter2) stemming implementation in Elixir.

Erlang

General-Purpose Machine Learning

  • Disco – Map Reduce in Erlang

Go

Natural Language Processing

  • go-porterstemmer – A native Go clean room implementation of the Porter Stemming algorithm.
  • paicehusk – Golang implementation of the Paice/Husk Stemming Algorithm.
  • snowball – Snowball Stemmer for Go.
  • go-ngram – In-memory n-gram index with compression.

General-Purpose Machine Learning

  • gago – Multi-population, flexible, parallel genetic algorithm.
  • Go Learn – Machine Learning for Go
  • go-pr – Pattern recognition package in Go lang.
  • go-ml – Linear / Logistic regression, Neural Networks, Collaborative Filtering and Gaussian Multivariate Distribution
  • bayesian – Naive Bayesian Classification for Golang.
  • go-galib – Genetic Algorithms library written in Go / golang
  • Cloudforest – Ensembles of decision trees in go/golang.
  • gobrain – Neural Networks written in go
  • GoNN – GoNN is an implementation of Neural Network in Go Language, which includes BPNN, RBF, PCN
  • MXNet – Lightweight, Portable, Flexible Distributed/Mobile Deep Learning with Dynamic, Mutation-aware Dataflow Dep Scheduler; for Python, R, Julia, Go, Javascript and more.

Data Analysis / Data Visualization

  • go-graph – Graph library for Go/golang language.
  • SVGo – The Go Language library for SVG generation
  • RF – Random forests implementation in Go

Haskell

General-Purpose Machine Learning

  • haskell-ml – Haskell implementations of various ML algorithms.
  • HLearn – a suite of libraries for interpreting machine learning models according to their algebraic structure.
  • hnn – Haskell Neural Network library.
  • hopfield-networks – Hopfield Networks for unsupervised learning in Haskell.
  • caffegraph – A DSL for deep neural networks
  • LambdaNet – Configurable Neural Networks in Haskell

Java

Natural Language Processing

  • Cortical.io – Retina: an API performing complex NLP operations (disambiguation, classification, streaming text filtering, etc…) as quickly and intuitively as the brain.
  • CoreNLP – Stanford CoreNLP provides a set of natural language analysis tools which can take raw English language text input and give the base forms of words
  • Stanford Parser – A natural language parser is a program that works out the grammatical structure of sentences
  • Stanford POS Tagger – A Part-Of-Speech Tagger (POS Tagger
  • Stanford Name Entity Recognizer – Stanford NER is a Java implementation of a Named Entity Recognizer.
  • Stanford Word Segmenter – Tokenization of raw text is a standard pre-processing step for many NLP tasks.
  • Tregex, Tsurgeon and Semgrex – Tregex is a utility for matching patterns in trees, based on tree relationships and regular expression matches on nodes (the name is short for “tree regular expressions”).
  • Stanford Phrasal: A Phrase-Based Translation System
  • Stanford English Tokenizer – Stanford Phrasal is a state-of-the-art statistical phrase-based machine translation system, written in Java.
  • Stanford Tokens Regex – A tokenizer divides text into a sequence of tokens, which roughly correspond to “words”
  • Stanford Temporal Tagger – SUTime is a library for recognizing and normalizing time expressions.
  • Stanford SPIED – Learning entities from unlabeled text starting with seed sets using patterns in an iterative fashion
  • Stanford Topic Modeling Toolbox – Topic modeling tools to social scientists and others who wish to perform analysis on datasets
  • Twitter Text Java – A Java implementation of Twitter’s text processing library
  • MALLET – A Java-based package for statistical natural language processing, document classification, clustering, topic modeling, information extraction, and other machine learning applications to text.
  • OpenNLP – a machine learning based toolkit for the processing of natural language text.
  • LingPipe – A tool kit for processing text using computational linguistics.
  • ClearTK – ClearTK provides a framework for developing statistical natural language processing (NLP) components in Java and is built on top of Apache UIMA.
  • Apache cTAKES – Apache clinical Text Analysis and Knowledge Extraction System (cTAKES) is an open-source natural language processing system for information extraction from electronic medical record clinical free-text.
  • ClearNLP – The ClearNLP project provides software and resources for natural language processing. The project started at the Center for Computational Language and EducAtion Research, and is currently developed by the Center for Language and Information Research at Emory University. This project is under the Apache 2 license.
  • CogcompNLP – This project collects a number of core libraries for Natural Language Processing (NLP) developed in the University of Illinois’ Cognitive Computation Group, for example illinois-core-utilities which provides a set of NLP-friendly data structures and a number of NLP-related utilities that support writing NLP applications, running experiments, etc, illinois-edison a library for feature extraction from illinois-core-utilities data structures and many other packages.

General-Purpose Machine Learning

  • aerosolve – A machine learning library by Airbnb designed from the ground up to be human friendly.
  • Datumbox – Machine Learning framework for rapid development of Machine Learning and Statistical applications
  • ELKI – Java toolkit for data mining. (unsupervised: clustering, outlier detection etc.)
  • Encog – An advanced neural network and machine learning framework. Encog contains classes to create a wide variety of networks, as well as support classes to normalize and process data for these neural networks. Encog trains using multithreaded resilient propagation. Encog can also make use of a GPU to further speed processing time. A GUI based workbench is also provided to help model and train neural networks.
  • FlinkML in Apache Flink – Distributed machine learning library in Flink
  • H2O – ML engine that supports distributed learning on Hadoop, Spark or your laptop via APIs in R, Python, Scala, REST/JSON.
  • htm.java – General Machine Learning library using Numenta’s Cortical Learning Algorithm
  • java-deeplearning – Distributed Deep Learning Platform for Java, Clojure,Scala
  • Mahout – Distributed machine learning
  • Meka – An open source implementation of methods for multi-label classification and evaluation (extension to Weka).
  • MLlib in Apache Spark – Distributed machine learning library in Spark
  • Neuroph – Neuroph is lightweight Java neural network framework
  • ORYX – Lambda Architecture Framework using Apache Spark and Apache Kafka with a specialization for real-time large-scale machine learning.
  • Samoa SAMOA is a framework that includes distributed machine learning for data streams with an interface to plug-in different stream processing platforms.
  • RankLib – RankLib is a library of learning to rank algorithms
  • rapaio – statistics, data mining and machine learning toolbox in Java
  • RapidMiner – RapidMiner integration into Java code
  • Stanford Classifier – A classifier is a machine learning tool that will take data items and place them into one of k classes.
  • SmileMiner – Statistical Machine Intelligence & Learning Engine
  • SystemML – flexible, scalable machine learning (ML) language.
  • WalnutiQ – object oriented model of the human brain
  • Weka – Weka is a collection of machine learning algorithms for data mining tasks
  • LBJava – Learning Based Java is a modeling language for the rapid development of software systems, offers a convenient, declarative syntax for classifier and constraint definition directly in terms of the objects in the programmer’s application.

Speech Recognition

  • CMU Sphinx – Open Source Toolkit For Speech Recognition purely based on Java speech recognition library.

Data Analysis / Data Visualization

  • Flink – Open source platform for distributed stream and batch data processing.
  • Hadoop – Hadoop/HDFS
  • Spark – Spark is a fast and general engine for large-scale data processing.
  • Storm – Storm is a distributed realtime computation system.
  • Impala – Real-time Query for Hadoop
  • DataMelt – Mathematics software for numeric computation, statistics, symbolic calculations, data analysis and data visualization.
  • Dr. Michael Thomas Flanagan’s Java Scientific Library

Deep Learning

  • Deeplearning4j – Scalable deep learning for industry with parallel GPUs

Javascript

Natural Language Processing

  • Twitter-text – A JavaScript implementation of Twitter’s text processing library
  • NLP.js – NLP utilities in javascript and coffeescript
  • natural – General natural language facilities for node
  • Knwl.js – A Natural Language Processor in JS
  • Retext – Extensible system for analyzing and manipulating natural language
  • TextProcessing – Sentiment analysis, stemming and lemmatization, part-of-speech tagging and chunking, phrase extraction and named entity recognition.
  • NLP Compromise – Natural Language processing in the browser

Data Analysis / Data Visualization

  • D3.js
  • High Charts
  • NVD3.js
  • dc.js
  • chartjs
  • dimple
  • amCharts
  • D3xter – Straight forward plotting built on D3
  • statkit – Statistics kit for JavaScript
  • datakit – A lightweight framework for data analysis in JavaScript
  • science.js – Scientific and statistical computing in JavaScript.
  • Z3d – Easily make interactive 3d plots built on Three.js
  • Sigma.js – JavaScript library dedicated to graph drawing.
  • C3.js– customizable library based on D3.js for easy chart drawing.
  • Datamaps– Customizable SVG map/geo visualizations using D3.js.
  • ZingChart– library written on Vanilla JS for big data visualization.
  • cheminfo – Platform for data visualization and analysis, using the visualizer project.

General-Purpose Machine Learning

  • Convnet.js – ConvNetJS is a Javascript library for training Deep Learning models[DEEP LEARNING]
  • Clusterfck – Agglomerative hierarchical clustering implemented in Javascript for Node.js and the browser
  • Clustering.js – Clustering algorithms implemented in Javascript for Node.js and the browser
  • Decision Trees – NodeJS Implementation of Decision Tree using ID3 Algorithm
  • DN2A – Digital Neural Networks Architecture
  • figue – K-means, fuzzy c-means and agglomerative clustering
  • Node-fann – FANN (Fast Artificial Neural Network Library) bindings for Node.js
  • Kmeans.js – Simple Javascript implementation of the k-means algorithm, for node.js and the browser
  • LDA.js – LDA topic modeling for node.js
  • Learning.js – Javascript implementation of logistic regression/c4.5 decision tree
  • Machine Learning – Machine learning library for Node.js
  • mil-tokyo – List of several machine learning libraries
  • Node-SVM – Support Vector Machine for nodejs
  • Brain – Neural networks in JavaScript [Deprecated]
  • Bayesian-Bandit – Bayesian bandit implementation for Node and the browser.
  • Synaptic – Architecture-free neural network library for node.js and the browser
  • kNear – JavaScript implementation of the k nearest neighbors algorithm for supervised learning
  • NeuralN – C++ Neural Network library for Node.js. It has advantage on large dataset and multi-threaded training.
  • kalman – Kalman filter for Javascript.
  • shaman – node.js library with support for both simple and multiple linear regression.
  • ml.js – Machine learning and numerical analysis tools for Node.js and the Browser!
  • Pavlov.js – Reinforcement learning using Markov Decision Processes
  • MXNet – Lightweight, Portable, Flexible Distributed/Mobile Deep Learning with Dynamic, Mutation-aware Dataflow Dep Scheduler; for Python, R, Julia, Go, Javascript and more.

Misc

  • sylvester – Vector and Matrix math for JavaScript.
  • simple-statistics – A JavaScript implementation of descriptive, regression, and inference statistics. Implemented in literate JavaScript with no dependencies, designed to work in all modern browsers (including IE) as well as in node.js.
  • regression-js – A javascript library containing a collection of least squares fitting methods for finding a trend in a set of data.
  • Lyric – Linear Regression library.
  • GreatCircle – Library for calculating great circle distance.

Julia

General-Purpose Machine Learning

  • MachineLearning – Julia Machine Learning library
  • MLBase – A set of functions to support the development of machine learning algorithms
  • PGM – A Julia framework for probabilistic graphical models.
  • DA – Julia package for Regularized Discriminant Analysis
  • Regression – Algorithms for regression analysis (e.g. linear regression and logistic regression)
  • Local Regression – Local regression, so smooooth!
  • Naive Bayes – Simple Naive Bayes implementation in Julia
  • Mixed Models – A Julia package for fitting (statistical) mixed-effects models
  • Simple MCMC – basic mcmc sampler implemented in Julia
  • Distance – Julia module for Distance evaluation
  • Decision Tree – Decision Tree Classifier and Regressor
  • Neural – A neural network in Julia
  • MCMC – MCMC tools for Julia
  • Mamba – Markov chain Monte Carlo (MCMC) for Bayesian analysis in Julia
  • GLM – Generalized linear models in Julia
  • Online Learning
  • GLMNet – Julia wrapper for fitting Lasso/ElasticNet GLM models using glmnet
  • Clustering – Basic functions for clustering data: k-means, dp-means, etc.
  • SVM – SVM’s for Julia
  • Kernal Density – Kernel density estimators for julia
  • Dimensionality Reduction – Methods for dimensionality reduction
  • NMF – A Julia package for non-negative matrix factorization
  • ANN – Julia artificial neural networks
  • Mocha – Deep Learning framework for Julia inspired by Caffe
  • XGBoost – eXtreme Gradient Boosting Package in Julia
  • ManifoldLearning – A Julia package for manifold learning and nonlinear dimensionality reduction
  • MXNet – Lightweight, Portable, Flexible Distributed/Mobile Deep Learning with Dynamic, Mutation-aware Dataflow Dep Scheduler; for Python, R, Julia, Go, Javascript and more.
  • Merlin – Flexible Deep Learning Framework in Julia
  • ROCAnalysis – Receiver Operating Characteristics and functions for evaluation probabilistic binary classifiers
  • GaussianMixtures – Large scale Gaussian Mixture Models
  • ScikitLearn – Julia implementation of the scikit-learn API

Natural Language Processing

Data Analysis / Data Visualization

  • Graph Layout – Graph layout algorithms in pure Julia
  • Data Frames Meta – Metaprogramming tools for DataFrames
  • Julia Data – library for working with tabular data in Julia
  • Data Read – Read files from Stata, SAS, and SPSS
  • Hypothesis Tests – Hypothesis tests for Julia
  • Gadfly – Crafty statistical graphics for Julia.
  • Stats – Statistical tests for Julia
  • RDataSets – Julia package for loading many of the data sets available in R
  • DataFrames – library for working with tabular data in Julia
  • Distributions – A Julia package for probability distributions and associated functions.
  • Data Arrays – Data structures that allow missing values
  • Time Series – Time series toolkit for Julia
  • Sampling – Basic sampling algorithms for Julia

Misc Stuff / Presentations

  • DSP – Digital Signal Processing (filtering, periodograms, spectrograms, window functions).
  • JuliaCon Presentations – Presentations for JuliaCon
  • SignalProcessing – Signal Processing tools for Julia
  • Images – An image library for Julia

Lua

General-Purpose Machine Learning

  • Torch7
    • cephes – Cephes mathematical functions library, wrapped for Torch. Provides and wraps the 180+ special mathematical functions from the Cephes mathematical library, developed by Stephen L. Moshier. It is used, among many other places, at the heart of SciPy.
    • autograd – Autograd automatically differentiates native Torch code. Inspired by the original Python version.
    • graph – Graph package for Torch
    • randomkit – Numpy’s randomkit, wrapped for Torch
    • signal – A signal processing toolbox for Torch-7. FFT, DCT, Hilbert, cepstrums, stft
    • nn – Neural Network package for Torch
    • torchnet – framework for torch which provides a set of abstractions aiming at encouraging code re-use as well as encouraging modular programming
    • nngraph – This package provides graphical computation for nn library in Torch7.
    • nnx – A completely unstable and experimental package that extends Torch’s builtin nn library
    • rnn – A Recurrent Neural Network library that extends Torch’s nn. RNNs, LSTMs, GRUs, BRNNs, BLSTMs, etc.
    • dpnn – Many useful features that aren’t part of the main nn package.
    • dp – A deep learning library designed for streamlining research and development using the Torch7 distribution. It emphasizes flexibility through the elegant use of object-oriented design patterns.
    • optim – An optimization library for Torch. SGD, Adagrad, Conjugate-Gradient, LBFGS, RProp and more.
    • unsup – A package for unsupervised learning in Torch. Provides modules that are compatible with nn (LinearPsd, ConvPsd, AutoEncoder, …), and self-contained algorithms (k-means, PCA).
    • manifold – A package to manipulate manifolds
    • svm – Torch-SVM library
    • lbfgs – FFI Wrapper for liblbfgs
    • vowpalwabbit – An old vowpalwabbit interface to torch.
    • OpenGM – OpenGM is a C++ library for graphical modeling, and inference. The Lua bindings provide a simple way of describing graphs, from Lua, and then optimizing them with OpenGM.
    • sphagetti – Spaghetti (sparse linear) module for torch7 by @MichaelMathieu
    • LuaSHKit – A lua wrapper around the Locality sensitive hashing library SHKit
    • kernel smoothing – KNN, kernel-weighted average, local linear regression smoothers
    • cutorch – Torch CUDA Implementation
    • cunn – Torch CUDA Neural Network Implementation
    • imgraph – An image/graph library for Torch. This package provides routines to construct graphs on images, segment them, build trees out of them, and convert them back to images.
    • videograph – A video/graph library for Torch. This package provides routines to construct graphs on videos, segment them, build trees out of them, and convert them back to videos.
    • saliency – code and tools around integral images. A library for finding interest points based on fast integral histograms.
    • stitch – allows us to use hugin to stitch images and apply same stitching to a video sequence
    • sfm – A bundle adjustment/structure from motion package
    • fex – A package for feature extraction in Torch. Provides SIFT and dSIFT modules.
    • OverFeat – A state-of-the-art generic dense feature extractor
  • Numeric Lua
  • Lunatic Python
  • SciLua
  • Lua – Numerical Algorithms
  • Lunum

Demos and Scripts

  • Core torch7 demos repository.
    • linear-regression, logistic-regression
    • face detector (training and detection as separate demos)
    • mst-based-segmenter
    • train-a-digit-classifier
    • train-autoencoder
    • optical flow demo
    • train-on-housenumbers
    • train-on-cifar
    • tracking with deep nets
    • kinect demo
    • filter-bank visualization
    • saliency-networks
  • Training a Convnet for the Galaxy-Zoo Kaggle challenge(CUDA demo)
  • Music Tagging – Music Tagging scripts for torch7
  • torch-datasets – Scripts to load several popular datasets including:
    • BSR 500
    • CIFAR-10
    • COIL
    • Street View House Numbers
    • MNIST
    • NORB
  • Atari2600 – Scripts to generate a dataset with static frames from the Arcade Learning Environment

Matlab

Computer Vision

  • Contourlets – MATLAB source code that implements the contourlet transform and its utility functions.
  • Shearlets – MATLAB code for shearlet transform
  • Curvelets – The Curvelet transform is a higher dimensional generalization of the Wavelet transform designed to represent images at different scales and different angles.
  • Bandlets – MATLAB code for bandlet transform
  • mexopencv – Collection and a development kit of MATLAB mex functions for OpenCV library

Natural Language Processing

  • NLP – An NLP library for Matlab

General-Purpose Machine Learning

Data Analysis / Data Visualization

  • matlab_gbl – MatlabBGL is a Matlab package for working with graphs.
  • gamic – Efficient pure-Matlab implementations of graph algorithms to complement MatlabBGL’s mex functions.

.NET

Computer Vision

  • OpenCVDotNet – A wrapper for the OpenCV project to be used with .NET applications.
  • Emgu CV – Cross platform wrapper of OpenCV which can be compiled in Mono to e run on Windows, Linus, Mac OS X, iOS, and Android.
  • AForge.NET – Open source C# framework for developers and researchers in the fields of Computer Vision and Artificial Intelligence. Development has now shifted to GitHub.
  • Accord.NET – Together with AForge.NET, this library can provide image processing and computer vision algorithms to Windows, Windows RT and Windows Phone. Some components are also available for Java and Android.

Natural Language Processing

  • Stanford.NLP for .NET – A full port of Stanford NLP packages to .NET and also available precompiled as a NuGet package.

General-Purpose Machine Learning

  • Accord-Framework -The Accord.NET Framework is a complete framework for building machine learning, computer vision, computer audition, signal processing and statistical applications.
  • Accord.MachineLearning – Support Vector Machines, Decision Trees, Naive Bayesian models, K-means, Gaussian Mixture models and general algorithms such as Ransac, Cross-validation and Grid-Search for machine-learning applications. This package is part of the Accord.NET Framework.
  • DiffSharp – An automatic differentiation (AD) library providing exact and efficient derivatives (gradients, Hessians, Jacobians, directional derivatives, and matrix-free Hessian- and Jacobian-vector products) for machine learning and optimization applications. Operations can be nested to any level, meaning that you can compute exact higher-order derivatives and differentiate functions that are internally making use of differentiation, for applications such as hyperparameter optimization.
  • Vulpes – Deep belief and deep learning implementation written in F# and leverages CUDA GPU execution with Alea.cuBase.
  • Encog – An advanced neural network and machine learning framework. Encog contains classes to create a wide variety of networks, as well as support classes to normalize and process data for these neural networks. Encog trains using multithreaded resilient propagation. Encog can also make use of a GPU to further speed processing time. A GUI based workbench is also provided to help model and train neural networks.
  • Neural Network Designer – DBMS management system and designer for neural networks. The designer application is developed using WPF, and is a user interface which allows you to design your neural network, query the network, create and configure chat bots that are capable of asking questions and learning from your feed back. The chat bots can even scrape the internet for information to return in their output as well as to use for learning.

Data Analysis / Data Visualization

  • numl – numl is a machine learning library intended to ease the use of using standard modeling techniques for both prediction and clustering.
  • Math.NET Numerics – Numerical foundation of the Math.NET project, aiming to provide methods and algorithms for numerical computations in science, engineering and every day use. Supports .Net 4.0, .Net 3.5 and Mono on Windows, Linux and Mac; Silverlight 5, WindowsPhone/SL 8, WindowsPhone 8.1 and Windows 8 with PCL Portable Profiles 47 and 344; Android/iOS with Xamarin.
  • Sho – Sho is an interactive environment for data analysis and scientific computing that lets you seamlessly connect scripts (in IronPython) with compiled code (in .NET) to enable fast and flexible prototyping. The environment includes powerful and efficient libraries for linear algebra as well as data visualization that can be used from any .NET language, as well as a feature-rich interactive shell for rapid development.

Objective C

General-Purpose Machine Learning

  • YCML – A Machine Learning framework for Objective-C and Swift (OS X / iOS).
  • MLPNeuralNet – Fast multilayer perceptron neural network library for iOS and Mac OS X. MLPNeuralNet predicts new examples by trained neural network. It is built on top of the Apple’s Accelerate Framework, using vectorized operations and hardware acceleration if available.
  • MAChineLearning – An Objective-C multilayer perceptron library, with full support for training through backpropagation. Implemented using vDSP and vecLib, it’s 20 times faster than its Java equivalent. Includes sample code for use from Swift.
  • BPN-NeuralNetwork – It implemented 3 layers neural network ( Input Layer, Hidden Layer and Output Layer ) and it named Back Propagation Neural Network (BPN). This network can be used in products recommendation, user behavior analysis, data mining and data analysis.
  • Multi-Perceptron-NeuralNetwork – it implemented multi-perceptrons neural network (ニューラルネットワーク) based on Back Propagation Neural Network (BPN) and designed unlimited-hidden-layers.
  • KRHebbian-Algorithm – It is a non-supervisor and self-learning algorithm (adjust the weights) in neural network of Machine Learning.
  • KRKmeans-Algorithm – It implemented K-Means the clustering and classification algorithm. It could be used in data mining and image compression.
  • KRFuzzyCMeans-Algorithm – It implemented Fuzzy C-Means (FCM) the fuzzy clustering / classification algorithm on Machine Learning. It could be used in data mining and image compression.

OCaml

General-Purpose Machine Learning

  • Oml – A general statistics and machine learning library.
  • GPR – Efficient Gaussian Process Regression in OCaml.
  • Libra-Tk – Algorithms for learning and inference with discrete probabilistic models.

PHP

Natural Language Processing

  • jieba-php – Chinese Words Segmentation Utilities.

General-Purpose Machine Learning

  • PredictionBuilder – A library for machine learning that builds predictions using a linear regression.

Python

Computer Vision

  • Scikit-Image – A collection of algorithms for image processing in Python.
  • SimpleCV – An open source computer vision framework that gives access to several high-powered computer vision libraries, such as OpenCV. Written on Python and runs on Mac, Windows, and Ubuntu Linux.
  • Vigranumpy – Python bindings for the VIGRA C++ computer vision library.
  • OpenFace – Free and open source face recognition with deep neural networks.
  • PCV – Open source Python module for computer vision

Natural Language Processing

  • NLTK – A leading platform for building Python programs to work with human language data.
  • Pattern – A web mining module for the Python programming language. It has tools for natural language processing, machine learning, among others.
  • Quepy – A python framework to transform natural language questions to queries in a database query language
  • TextBlob – Providing a consistent API for diving into common natural language processing (NLP) tasks. Stands on the giant shoulders of NLTK and Pattern, and plays nicely with both.
  • YAlign – A sentence aligner, a friendly tool for extracting parallel sentences from comparable corpora.
  • jieba – Chinese Words Segmentation Utilities.
  • SnowNLP – A library for processing Chinese text.
  • spammy – A library for email Spam filtering built on top of nltk
  • loso – Another Chinese segmentation library.
  • genius – A Chinese segment base on Conditional Random Field.
  • KoNLPy – A Python package for Korean natural language processing.
  • nut – Natural language Understanding Toolkit
  • Rosetta – Text processing tools and wrappers (e.g. Vowpal Wabbit)
  • BLLIP Parser – Python bindings for the BLLIP Natural Language Parser (also known as the Charniak-Johnson parser)
  • PyNLPl – Python Natural Language Processing Library. General purpose NLP library for Python. Also contains some specific modules for parsing common NLP formats, most notably for FoLiA, but also ARPA language models, Moses phrasetables, GIZA++ alignments.
  • python-ucto – Python binding to ucto (a unicode-aware rule-based tokenizer for various languages)
  • python-frog – Python binding to Frog, an NLP suite for Dutch. (pos tagging, lemmatisation, dependency parsing, NER)
  • python-zpar – Python bindings for ZPar, a statistical part-of-speech-tagger, constiuency parser, and dependency parser for English.
  • colibri-core – Python binding to C++ library for extracting and working with with basic linguistic constructions such as n-grams and skipgrams in a quick and memory-efficient way.
  • spaCy – Industrial strength NLP with Python and Cython.
  • PyStanfordDependencies – Python interface for converting Penn Treebank trees to Stanford Dependencies.
  • Distance – Levenshtein and Hamming distance computation
  • Fuzzy Wuzzy – Fuzzy String Matching in Python
  • jellyfish – a python library for doing approximate and phonetic matching of strings.
  • editdistance – fast implementation of edit distance
  • textacy – higher-level NLP built on Spacy

General-Purpose Machine Learning

  • machine learning – automated build consisting of a web-interface, and set of programmatic-interface API, for support vector machines. Corresponding dataset(s) are stored into a SQL database, then generated model(s) used for prediction(s), are stored into a NoSQL datastore.
  • XGBoost – Python bindings for eXtreme Gradient Boosting (Tree) Library
  • Bayesian Methods for Hackers – Book/iPython notebooks on Probabilistic Programming in Python
  • Featureforge A set of tools for creating and testing machine learning features, with a scikit-learn compatible API
  • MLlib in Apache Spark – Distributed machine learning library in Spark
  • scikit-learn – A Python module for machine learning built on top of SciPy.
  • metric-learn – A Python module for metric learning.
  • SimpleAI Python implementation of many of the artificial intelligence algorithms described on the book “Artificial Intelligence, a Modern Approach”. It focuses on providing an easy to use, well documented and tested library.
  • astroML – Machine Learning and Data Mining for Astronomy.
  • graphlab-create – A library with various machine learning models (regression, clustering, recommender systems, graph analytics, etc.) implemented on top of a disk-backed DataFrame.
  • BigML – A library that contacts external servers.
  • pattern – Web mining module for Python.
  • NuPIC – Numenta Platform for Intelligent Computing.
  • Pylearn2 – A Machine Learning library based on Theano.
  • keras – Modular neural network library based on Theano.
  • Lasagne – Lightweight library to build and train neural networks in Theano.
  • hebel – GPU-Accelerated Deep Learning Library in Python.
  • Chainer – Flexible neural network framework
  • gensim – Topic Modelling for Humans.
  • topik – Topic modelling toolkit
  • PyBrain – Another Python Machine Learning Library.
  • Brainstorm – Fast, flexible and fun neural networks. This is the successor of PyBrain.
  • Crab – A flexible, fast recommender engine.
  • python-recsys – A Python library for implementing a Recommender System.
  • thinking bayes – Book on Bayesian Analysis
  • Restricted Boltzmann Machines -Restricted Boltzmann Machines in Python. [DEEP LEARNING]
  • Bolt – Bolt Online Learning Toolbox
  • CoverTree – Python implementation of cover trees, near-drop-in replacement for scipy.spatial.kdtree
  • nilearn – Machine learning for NeuroImaging in Python
  • imbalanced-learn – Python module to perform under sampling and over sampling with various techniques.
  • Shogun – The Shogun Machine Learning Toolbox
  • Pyevolve – Genetic algorithm framework.
  • Caffe – A deep learning framework developed with cleanliness, readability, and speed in mind.
  • breze – Theano based library for deep and recurrent neural networks
  • pyhsmm – library for approximate unsupervised inference in Bayesian Hidden Markov Models (HMMs) and explicit-duration Hidden semi-Markov Models (HSMMs), focusing on the Bayesian Nonparametric extensions, the HDP-HMM and HDP-HSMM, mostly with weak-limit approximations.
  • mrjob – A library to let Python program run on Hadoop.
  • SKLL – A wrapper around scikit-learn that makes it simpler to conduct experiments.
  • neurolabhttps://github.com/zueve/neurolab
  • Spearmint – Spearmint is a package to perform Bayesian optimization according to the algorithms outlined in the paper: Practical Bayesian Optimization of Machine Learning Algorithms. Jasper Snoek, Hugo Larochelle and Ryan P. Adams. Advances in Neural Information Processing Systems, 2012.
  • Pebl – Python Environment for Bayesian Learning
  • Theano – Optimizing GPU-meta-programming code generating array oriented optimizing math compiler in Python
  • TensorFlow – Open source software library for numerical computation using data flow graphs
  • yahmm – Hidden Markov Models for Python, implemented in Cython for speed and efficiency.
  • python-timbl – A Python extension module wrapping the full TiMBL C++ programming interface. Timbl is an elaborate k-Nearest Neighbours machine learning toolkit.
  • deap – Evolutionary algorithm framework.
  • pydeep – Deep Learning In Python
  • mlxtend – A library consisting of useful tools for data science and machine learning tasks.
  • neon – Nervana’s high-performance Python-based Deep Learning framework [DEEP LEARNING]
  • Optunity – A library dedicated to automated hyperparameter optimization with a simple, lightweight API to facilitate drop-in replacement of grid search.
  • Neural Networks and Deep Learning – Code samples for my book “Neural Networks and Deep Learning” [DEEP LEARNING]
  • Annoy – Approximate nearest neighbours implementation
  • skflow – Simplified interface for TensorFlow, mimicking Scikit Learn.
  • TPOT – Tool that automatically creates and optimizes machine learning pipelines using genetic programming. Consider it your personal data science assistant, automating a tedious part of machine learning.
  • pgmpy A python library for working with Probabilistic Graphical Models.
  • DIGITS – The Deep Learning GPU Training System (DIGITS) is a web application for training deep learning models.
  • Orange – Open source data visualization and data analysis for novices and experts.
  • MXNet – Lightweight, Portable, Flexible Distributed/Mobile Deep Learning with Dynamic, Mutation-aware Dataflow Dep Scheduler; for Python, R, Julia, Go, Javascript and more.
  • milk – Machine learning toolkit focused on supervised classification.
  • TFLearn – Deep learning library featuring a higher-level API for TensorFlow.
  • REP – an IPython-based environment for conducting data-driven research in a consistent and reproducible way. REP is not trying to substitute scikit-learn, but extends it and provides better user experience.

Data Analysis / Data Visualization

  • SciPy – A Python-based ecosystem of open-source software for mathematics, science, and engineering.
  • NumPy – A fundamental package for scientific computing with Python.
  • Numba – Python JIT (just in time) complier to LLVM aimed at scientific Python by the developers of Cython and NumPy.
  • NetworkX – A high-productivity software for complex networks.
  • igraph – binding to igraph library – General purpose graph library
  • Pandas – A library providing high-performance, easy-to-use data structures and data analysis tools.
  • Open Mining – Business Intelligence (BI) in Python (Pandas web interface)
  • PyMC – Markov Chain Monte Carlo sampling toolkit.
  • zipline – A Pythonic algorithmic trading library.
  • PyDy – Short for Python Dynamics, used to assist with workflow in the modeling of dynamic motion based around NumPy, SciPy, IPython, and matplotlib.
  • SymPy – A Python library for symbolic mathematics.
  • statsmodels – Statistical modeling and econometrics in Python.
  • astropy – A community Python library for Astronomy.
  • matplotlib – A Python 2D plotting library.
  • bokeh – Interactive Web Plotting for Python.
  • plotly – Collaborative web plotting for Python and matplotlib.
  • vincent – A Python to Vega translator.
  • d3py – A plotting library for Python, based on D3.js.
  • ggplot – Same API as ggplot2 for R.
  • ggfortify – Unified interface to ggplot2 popular R packages.
  • Kartograph.py – Rendering beautiful SVG maps in Python.
  • pygal – A Python SVG Charts Creator.
  • PyQtGraph – A pure-python graphics and GUI library built on PyQt4 / PySide and NumPy.
  • pycascading
  • Petrel – Tools for writing, submitting, debugging, and monitoring Storm topologies in pure Python.
  • Blaze – NumPy and Pandas interface to Big Data.
  • emcee – The Python ensemble sampling toolkit for affine-invariant MCMC.
  • windML – A Python Framework for Wind Energy Analysis and Prediction
  • vispy – GPU-based high-performance interactive OpenGL 2D/3D data visualization library
  • cerebro2 A web-based visualization and debugging platform for NuPIC.
  • NuPIC Studio An all-in-one NuPIC Hierarchical Temporal Memory visualization and debugging super-tool!
  • SparklingPandas Pandas on PySpark (POPS)
  • Seaborn – A python visualization library based on matplotlib
  • bqplot – An API for plotting in Jupyter (IPython)
  • pastalog – Simple, realtime visualization of neural network training performance.
  • caravel – A data exploration platform designed to be visual, intuitive, and interactive.
  • Dora – Tools for exploratory data analysis in Python.
  • Ruffus – Computation Pipeline library for python.
  • SOMPY – Self Organizing Map written in Python (Uses neural networks for data analysis).
  • HDBScan – implementation of the hdbscan algorithm in Python – used for clustering

Misc Scripts / iPython Notebooks / Codebases

Neural networks

  • Neural networks – NeuralTalk is a Python+numpy project for learning Multimodal Recurrent Neural Networks that describe images with sentences.

Kaggle Competition Source Code

Ruby

Natural Language Processing

  • Treat – Text REtrieval and Annotation Toolkit, definitely the most comprehensive toolkit I’ve encountered so far for Ruby
  • Ruby Linguistics – Linguistics is a framework for building linguistic utilities for Ruby objects in any language. It includes a generic language-independent front end, a module for mapping language codes into language names, and a module which contains various English-language utilities.
  • Stemmer – Expose libstemmer_c to Ruby
  • Ruby Wordnet – This library is a Ruby interface to WordNet
  • Raspel – raspell is an interface binding for ruby
  • UEA Stemmer – Ruby port of UEALite Stemmer – a conservative stemmer for search and indexing
  • Twitter-text-rb – A library that does auto linking and extraction of usernames, lists and hashtags in tweets

General-Purpose Machine Learning

Data Analysis / Data Visualization

  • rsruby – Ruby – R bridge
  • data-visualization-ruby – Source code and supporting content for my Ruby Manor presentation on Data Visualisation with Ruby
  • ruby-plot – gnuplot wrapper for ruby, especially for plotting roc curves into svg files
  • plot-rb – A plotting library in Ruby built on top of Vega and D3.
  • scruffy – A beautiful graphing toolkit for Ruby
  • SciRuby
  • Glean – A data management tool for humans
  • Bioruby
  • Arel

Misc

Rust

General-Purpose Machine Learning

  • deeplearn-rs – deeplearn-rs provides simple networks that use matrix multiplication, addition, and ReLU under the MIT license.
  • rustlearn – a machine learning framework featuring logistic regression, support vector machines, decision trees and random forests.
  • rusty-machine – a pure-rust machine learning library.
  • leaf – open source framework for machine intelligence, sharing concepts from TensorFlow and Caffe. Available under the MIT license. [Deprecated]
  • RustNN – RustNN is a feedforward neural network library.

R

General-Purpose Machine Learning

  • ahaz – ahaz: Regularization for semiparametric additive hazards regression
  • arules – arules: Mining Association Rules and Frequent Itemsets
  • bigrf – bigrf: Big Random Forests: Classification and Regression Forests for Large Data Sets
  • bigRR – bigRR: Generalized Ridge Regression (with special advantage for p >> n cases)
  • bmrm – bmrm: Bundle Methods for Regularized Risk Minimization Package
  • Boruta – Boruta: A wrapper algorithm for all-relevant feature selection
  • bst – bst: Gradient Boosting
  • C50 – C50: C5.0 Decision Trees and Rule-Based Models
  • caret – Classification and Regression Training: Unified interface to ~150 ML algorithms in R.
  • caretEnsemble – caretEnsemble: Framework for fitting multiple caret models as well as creating ensembles of such models.
  • Clever Algorithms For Machine Learning
  • CORElearn – CORElearn: Classification, regression, feature evaluation and ordinal evaluation
  • CoxBoost – CoxBoost: Cox models by likelihood based boosting for a single survival endpoint or competing risks
  • Cubist – Cubist: Rule- and Instance-Based Regression Modeling
  • e1071 – e1071: Misc Functions of the Department of Statistics (e1071), TU Wien
  • earth – earth: Multivariate Adaptive Regression Spline Models
  • elasticnet – elasticnet: Elastic-Net for Sparse Estimation and Sparse PCA
  • ElemStatLearn – ElemStatLearn: Data sets, functions and examples from the book: “The Elements of Statistical Learning, Data Mining, Inference, and Prediction” by Trevor Hastie, Robert Tibshirani and Jerome Friedman Prediction” by Trevor Hastie, Robert Tibshirani and Jerome Friedman
  • evtree – evtree: Evolutionary Learning of Globally Optimal Trees
  • forecast – forecast: Timeseries forecasting using ARIMA, ETS, STLM, TBATS, and neural network models
  • forecastHybrid – forecastHybrid: Automatic ensemble and cross validation of ARIMA, ETS, STLM, TBATS, and neural network models from the “forecast” package
  • fpc – fpc: Flexible procedures for clustering
  • frbs – frbs: Fuzzy Rule-based Systems for Classification and Regression Tasks
  • GAMBoost – GAMBoost: Generalized linear and additive models by likelihood based boosting
  • gamboostLSS – gamboostLSS: Boosting Methods for GAMLSS
  • gbm – gbm: Generalized Boosted Regression Models
  • glmnet – glmnet: Lasso and elastic-net regularized generalized linear models
  • glmpath – glmpath: L1 Regularization Path for Generalized Linear Models and Cox Proportional Hazards Model
  • GMMBoost – GMMBoost: Likelihood-based Boosting for Generalized mixed models
  • grplasso – grplasso: Fitting user specified models with Group Lasso penalty
  • grpreg – grpreg: Regularization paths for regression models with grouped covariates
  • h2o – A framework for fast, parallel, and distributed machine learning algorithms at scale — Deeplearning, Random forests, GBM, KMeans, PCA, GLM
  • hda – hda: Heteroscedastic Discriminant Analysis
  • Introduction to Statistical Learning
  • ipred – ipred: Improved Predictors
  • kernlab – kernlab: Kernel-based Machine Learning Lab
  • klaR – klaR: Classification and visualization
  • lars – lars: Least Angle Regression, Lasso and Forward Stagewise
  • lasso2 – lasso2: L1 constrained estimation aka ‘lasso’
  • LiblineaR – LiblineaR: Linear Predictive Models Based On The Liblinear C/C++ Library
  • LogicReg – LogicReg: Logic Regression
  • Machine Learning For Hackers
  • maptree – maptree: Mapping, pruning, and graphing tree models
  • mboost – mboost: Model-Based Boosting
  • medley – medley: Blending regression models, using a greedy stepwise approach
  • mlr – mlr: Machine Learning in R
  • mvpart – mvpart: Multivariate partitioning
  • ncvreg – ncvreg: Regularization paths for SCAD- and MCP-penalized regression models
  • nnet – nnet: Feed-forward Neural Networks and Multinomial Log-Linear Models
  • oblique.tree – oblique.tree: Oblique Trees for Classification Data
  • pamr – pamr: Pam: prediction analysis for microarrays
  • party – party: A Laboratory for Recursive Partytioning
  • partykit – partykit: A Toolkit for Recursive Partytioning
  • penalized – penalized: L1 (lasso and fused lasso) and L2 (ridge) penalized estimation in GLMs and in the Cox model
  • penalizedLDA – penalizedLDA: Penalized classification using Fisher’s linear discriminant
  • penalizedSVM – penalizedSVM: Feature Selection SVM using penalty functions
  • quantregForest – quantregForest: Quantile Regression Forests
  • randomForest – randomForest: Breiman and Cutler’s random forests for classification and regression
  • randomForestSRC – randomForestSRC: Random Forests for Survival, Regression and Classification (RF-SRC)
  • rattle – rattle: Graphical user interface for data mining in R
  • rda – rda: Shrunken Centroids Regularized Discriminant Analysis
  • rdetools – rdetools: Relevant Dimension Estimation (RDE) in Feature Spaces
  • REEMtree – REEMtree: Regression Trees with Random Effects for Longitudinal (Panel) Data
  • relaxo – relaxo: Relaxed Lasso
  • rgenoud – rgenoud: R version of GENetic Optimization Using Derivatives
  • rgp – rgp: R genetic programming framework
  • Rmalschains – Rmalschains: Continuous Optimization using Memetic Algorithms with Local Search Chains (MA-LS-Chains) in R
  • rminer – rminer: Simpler use of data mining methods (e.g. NN and SVM) in classification and regression
  • ROCR – ROCR: Visualizing the performance of scoring classifiers
  • RoughSets – RoughSets: Data Analysis Using Rough Set and Fuzzy Rough Set Theories
  • rpart – rpart: Recursive Partitioning and Regression Trees
  • RPMM – RPMM: Recursively Partitioned Mixture Model
  • RSNNS – RSNNS: Neural Networks in R using the Stuttgart Neural Network Simulator (SNNS)
  • RWeka – RWeka: R/Weka interface
  • RXshrink – RXshrink: Maximum Likelihood Shrinkage via Generalized Ridge or Least Angle Regression
  • sda – sda: Shrinkage Discriminant Analysis and CAT Score Variable Selection
  • SDDA – SDDA: Stepwise Diagonal Discriminant Analysis
  • SuperLearner and subsemble – Multi-algorithm ensemble learning packages.
  • svmpath – svmpath: svmpath: the SVM Path algorithm
  • tgp – tgp: Bayesian treed Gaussian process models
  • tree – tree: Classification and regression trees
  • varSelRF – varSelRF: Variable selection using random forests
  • XGBoost.R – R binding for eXtreme Gradient Boosting (Tree) Library
  • Optunity – A library dedicated to automated hyperparameter optimization with a simple, lightweight API to facilitate drop-in replacement of grid search. Optunity is written in Python but interfaces seamlessly to R.
  • igraph – binding to igraph library – General purpose graph library
  • MXNet – Lightweight, Portable, Flexible Distributed/Mobile Deep Learning with Dynamic, Mutation-aware Dataflow Dep Scheduler; for Python, R, Julia, Go, Javascript and more.

Data Analysis / Data Visualization

  • ggplot2 – A data visualization package based on the grammar of graphics.

SAS

General-Purpose Machine Learning

  • Enterprise Miner – Data mining and machine learning that creates deployable models using a GUI or code.
  • Factory Miner – Automatically creates deployable machine learning models across numerous market or customer segments using a GUI.

Data Analysis / Data Visualization

  • SAS/STAT – For conducting advanced statistical analysis.
  • University Edition – FREE! Includes all SAS packages necessary for data analysis and visualization, and includes online SAS courses.

High Performance Machine Learning

Natural Language Processing

Demos and Scripts

  • ML_Tables – Concise cheat sheets containing machine learning best practices.
  • enlighten-apply – Example code and materials that illustrate applications of SAS machine learning techniques.
  • enlighten-integration – Example code and materials that illustrate techniques for integrating SAS with other analytics technologies in Java, PMML, Python and R.
  • enlighten-deep – Example code and materials that illustrate using neural networks with several hidden layers in SAS.
  • dm-flow – Library of SAS Enterprise Miner process flow diagrams to help you learn by example about specific data mining topics.

Scala

Natural Language Processing

  • ScalaNLP – ScalaNLP is a suite of machine learning and numerical computing libraries.
  • Breeze – Breeze is a numerical processing library for Scala.
  • Chalk – Chalk is a natural language processing library.
  • FACTORIE – FACTORIE is a toolkit for deployable probabilistic modeling, implemented as a software library in Scala. It provides its users with a succinct language for creating relational factor graphs, estimating parameters and performing inference.

Data Analysis / Data Visualization

  • MLlib in Apache Spark – Distributed machine learning library in Spark
  • Scalding – A Scala API for Cascading
  • Summing Bird – Streaming MapReduce with Scalding and Storm
  • Algebird – Abstract Algebra for Scala
  • xerial – Data management utilities for Scala
  • simmer – Reduce your data. A unix filter for algebird-powered aggregation.
  • PredictionIO – PredictionIO, a machine learning server for software developers and data engineers.
  • BIDMat – CPU and GPU-accelerated matrix library intended to support large-scale exploratory data analysis.
  • Wolfe Declarative Machine Learning
  • Flink – Open source platform for distributed stream and batch data processing.
  • Spark Notebook – Interactive and Reactive Data Science using Scala and Spark.

General-Purpose Machine Learning

  • Conjecture – Scalable Machine Learning in Scalding
  • brushfire – Distributed decision tree ensemble learning in Scala
  • ganitha – scalding powered machine learning
  • adam – A genomics processing engine and specialized file format built using Apache Avro, Apache Spark and Parquet. Apache 2 licensed.
  • bioscala – Bioinformatics for the Scala programming language
  • BIDMach – CPU and GPU-accelerated Machine Learning Library.
  • Figaro – a Scala library for constructing probabilistic models.
  • H2O Sparkling Water – H2O and Spark interoperability.
  • FlinkML in Apache Flink – Distributed machine learning library in Flink
  • DynaML – Scala Library/REPL for Machine Learning Research
  • Saul – Flexible Declarative Learning-Based Programming.

Swift

General-Purpose Machine Learning

  • Swift AI – Highly optimized artificial intelligence and machine learning library written in Swift.
  • BrainCore – The iOS and OS X neural network framework
  • swix – A bare bones library that includes a general matrix language and wraps some OpenCV for iOS development.
  • DeepLearningKit an Open Source Deep Learning Framework for Apple’s iOS, OS X and tvOS. It currently allows using deep convolutional neural network models trained in Caffe on Apple operating systems.
  • AIToolbox – A toolbox framework of AI modules written in Swift: Graphs/Trees, Linear Regression, Support Vector Machines, Neural Networks, PCA, KMeans, Genetic Algorithms, MDP, Mixture of Gaussians.
  • MLKit – A simple Machine Learning Framework written in Swift. Currently features Simple Linear Regression, Polynomial Regression, and Ridge Regression.

TensorFlow

General-Purpose Machine Learning

Credits

互联网上的基因检测靠谱么?

WeGene这家深圳企业成立不到一年就推出了基因测序服务,200+项检测结果,价格是1299元。高大上的基因测序服务真的走入寻常百姓家?还是你也像我一样,对互联网基因测序睁大了惊讶和疑惑的眼睛?

随着个体化医疗和临床癌症基因组研究的发展,不断有研究结果表明,癌症基因组或其他个体化医疗诊断能达到很好的临床效果。利用网络营销策略可以提高人们对个体化医疗和基因检测的认识,以及扩大基因检测服务的销售面。

但并非所有网络基因检测服务都能起到好的效果。近期《Journal of National Cancer Institute》刊登的一项研究表明,当网络上出现越来越多的检测服务时,随之而来的是更多风险。在网上,基因检测的销售价格范围从99美元到 13000美元不等,部分网站提供目录,网友可以直接在网上下单订购检测产品,获得检测以及基因咨询服务,绕开传统的医生服务而直接获得基因相关解读。

“我认为出现这种现象是由于一方面患者对基因检测服务有需求,另一方面是基因组学技术和靶向治疗所带来的巨大益处。”这项研究的首席研究员 Stacy Gray说,“病人经常拿着打印的临床化验单或者基因检测结果来咨询。因此我们要谨慎对待网上的检测服务。” Gray 和她的同事Katherine Janeway都是达纳法博癌症中心的临床医生。Gray补充说:“在癌症研究领域越来越多地使用基因组学技术治疗疾病,看起来非常有吸引力。”

为了更好地了解网上的癌症个体化检测、诊断结果以及它们是否能用于临床。Gray,Janeway和同事通过互联网搜索和文献查找,综合选取55家提供个人癌症医疗检测服务的网站,其中包括商业公司、学术中心、科研机构,如23andMe,NeoGenomics,Illunima临床服务实验室等。

这些公司和机构在网上提供包括体细胞突变、遗传突变的分析和解释服务,以及其他个体化医疗服务。55家网站中:32家(58%)提供体细胞突变检测或分析服务,11家(20%)提供生殖细胞检测;44%的网站提供个性化癌症护理服务,15%的网站提供检测结果解读服务。这些网站最常提供的癌症检测包括乳腺癌、结肠癌、肺癌等。

研究人员邀请了相关专家组成专家小组,根据(美国疾控中心基因组应用实践和评价预防工作组)制定的标准来判断这些网站提供的检测服务是否合格。如果该专家小组90%的成员一致认为某项检测、诊断服务不合格,那么该服务即确定为不合格。

“我们不像其他的报道那样只关注这些检测是否有科学依据,”Gray说,“我们更注重这些网上检测服务是否具有临床应用价值,请专家组去评估这些检测是否合格。”虽然一些网站详细描述其提供的基因检测服务以及他们使用的检测技术,但专家组发现大部分网站提供的个体化癌症诊断或治疗项目中至少有一项没有临床应用价值。

从整体来看,有些检测确实有临床价值,也应该被用于患者,而有些检测被研究人员认为没有临床价值。例如,许多网站提供的检测中,KRAS和EGFR 突变的检测就是具有明显价值的一类。而全外显子测序和化疗敏感性检测并没有明确的临床价值。全外显子测序是一个很有前景的技术,但是现在还不能证明全外显子测序能够用于癌症的靶向治疗。就化疗敏感性检测而言,美国临床肿瘤协会表示这些检测不具有临床价值,这并不是因为它们不是指导性检测,而是它们违反了检测指导原则,但它们仍然作为癌症个体化治疗检测在网上销售。

此外,研究人员还发现绝大多数检测服务,没有临床应用的证据。当然,临床价值的评判标准是在不断变化的,虽然这些检测不能很好地应用于临床治疗,但有证据表明这些检测对病人的预后有重要影响。

2013年,美国食品药品管理局(FDA)就叫停了23andMe公司的检测服务,理由是该公司尚未获得提供此项服务的许可证。不准确的检测结果可能危害公民健康,引发不必要的手术。虽然研究人员没有评估这类网站销售的索赔有效性,但是有人发现网上基因检测服务的索赔支持很少。因此提供准确的基因检测以及解读服务,显得尤为重要。

在网络上出售基因检测服务,也许只是一种新的营销手段。但政策制定者需要考虑更新监管制度来充分保护公众健康,促进医学创新。

Gray表示,随着网上检测的调查的完成,研究人员正在对网络上的基因组检测和个体化医疗服务进行进一步分类。

肿瘤功能基因的研究套路

这是一篇关于怎么开启科研之旅的小文,写给刚进入实验室还没有头绪的小伙伴。

–by 老谈

导读:芯片筛到了一个分子、老板拍脑袋想到了一个分子、师兄/师姐给我留了一个分子、文献中看到了一个亮点分子、数据库中有个分子也不错······那么问题来了,接下来该怎么办呢?

1、可行性分析

首先要看这个分子是不是具有研究潜力,是不是跟肿瘤的发生发展有关。最简单的方法,一是查文献报道,二是在数据库中查找,看这个基因是不是在肿瘤中有差异表达。

2、排他性查询

首先要看一下这个分子是不是已经被报道过,如果没有报道过,那么恭喜你,你已经通过了第一关。如果已经有报道,要分析,都报道了什么,找出没有报道的点。比如这个分子被报道影响乳腺癌增殖,那你可以考虑其他肿瘤的增殖方向或者其他表型如迁移、耐药等。

3、准备研究工具

要研究一个基因的功能,最常用的方法就是改变这个基因在胞内的表达,看一下细胞表型是否收到变化,常见是敲减、过表达、突变,都可以通过构建相应的载体(也可以购买商业化的克隆),转染目标细胞,实现相应的基因编辑。

4、确认研究表型

这一步,你需要确定这个基因对肿瘤的什么功能有影响。功能表型研究有很多,常见如增殖、转移、耐药,还有难度高一点的血管形成,能量代谢balabala。以增殖为例:通过转染siRNA或能产生siRNA的载体,用CCK8、MTT等方法检测细胞的增殖速度是否发生了变化。

如果有,恭喜你可以进入下一关;如果没有,请试一下转移、耐药等方向,或者,换一个分子!

5、增加实验证据

单单一个CCK8或是MTT实验,不足以说明这个基因对肿瘤增殖的影响,还需要补充一些实验,常见的是细胞周期、细胞凋亡,通常还要检测一些增殖相关的标记分子,如Ki67、p-Akt、PCNA。通常需要做2个以上细胞株。

到这里,如果获得的数据都是有效的,要发个1分的小SCI基本不成问题了。加上临床样本的检测,2分也不是难事。当然我相信大家的追求不会止于此,咱们都是追求CNS级别的人(至少幻想过CNS级别的)!那就继续!

6、体内模型

体内体外是完全不同的两个环境,要追求质量,动物模型的实验是必须的。肿瘤研究最常用是裸鼠、小鼠模型,伟大的研究者们运用强大的基因编辑技术,在这些普通的模型上建立了具有特定表型的转基因动物模型(如MMTV-PyMT转基因小鼠,可自发性产生乳腺癌;更多信息老谈最近要推出的:肿瘤中常用的动物模型)。

7、分子作用机制研究

首先要找到与表型挂钩的下游分子,比如增殖相关Akt、p53、MAPK等信号通路,请期待老谈的再下期的大作(最近被小伙伴们表扬的都不好意思谦虚了,哈哈):信号通路与表型。

怎么找?

保(穷)守(逼)一点,就是经典的几个通路,一个一个试;奔(土)放(豪)一点的,直接上基因/蛋白芯片进行通路筛选。

接着要找到这个分子对这个信号通路调节的方式,如直接调控的分子(酵母双杂、免疫沉淀可以筛选有蛋白相互结合作用的分子,ChIP、RIP可以筛选与蛋白相互结合的DNA、RNA)。

8、临床意义

最后,在大量临床样本中验证目标分子的表达(这个,也可以在第一步就做了。再PS一下,样本量越大越有意义,差异约显著价值越高)。还要(最好)检测一下目标分子调节的下游分子在临床组织中是不是也受到了目标分子的调控。都做到最后这一步了,成功指日可待!你还怕辛苦么?!

别看6、7、8点说起来轻松,做起来可是烧钱更烧脑的事情。当然你要是一直关注解螺旋,想必事半功倍,没那么辛苦哦!

Ribose-seq: 鉴定RNA片段插入基因组DNA序列事件

核糖核苷酸是RNA的基本单位,它们会在DNA复制和修复过程中嵌入基因组DNA,进而影响基因组的稳定性。然而,迄今为止人们还无法鉴定和定位这些插入DNA的核糖核苷酸。

为此,乔治亚理工学院和科罗拉多大学的科学家们开发了一种新测序技术Ribose-seq。该技术可以鉴定和分析插入基因组DNA的核糖核苷酸,适用于包括人类在内的多种生物。这一成果发表在一月二十六日的Nature Methods杂志上。

研究人员利用这一技术在酿酒酵母的细胞核和线粒体DNA中,绘制了核糖核苷酸的完全图谱,鉴定了核糖核苷酸插入的“热点”区域。研究显示,核糖核苷酸嵌入很普遍但并不是随机发生的。

“核糖核苷酸是DNA中丰度最高的非标准核苷酸,但迄今为止人们还无法确定它们的位置和类别,”乔治亚理工学院的副教授Francesca Storici说,他与科罗拉多大学的助理教授Jay Hesselberth共同领导了这项研究。“核糖核苷酸插入会改变DNA的结构和功能。”

核糖核苷酸里的羟基(-OH)能使DNA发生扭曲,形成敏感性位点。值得注意的是,-OH和碱性溶液之间的反应,会让DNA更容易被切割。Ribose-seq就是利用这一反应来检测核糖核苷酸插入事件的。

研究人员先在核糖核苷酸处切割DNA,然后在此基础上构建DNA文库,文库中的DNA序列包含核糖核苷酸插入位点及其上游序列。随后,他们对文库进行高通量测序,将测序读取与参考基因组进行比对,最终获得rNMP插入事件的基因组图谱。

“Ribose-seq能够特异性直接捕捉嵌入DNA的核糖核苷酸,”Storici指出。“这一技术适用于任何基因组DNA(从细胞核基因组、质粒DNA到线粒体DNA),不需要进行标准化。Ribose-seq还可以在DNA遭遇环境压力发生断裂和脱碱基时分析rNMP。”

核糖核苷酸里的羟基是ribose-seq的关键,“-OH是核糖核苷酸特有的”文章的第一作者Kyung Duk Koh说。

研究人员在酿酒酵母中对这一方法进行了验证。“不论是核糖核苷酸的插入位点,还是核糖核苷酸的组成都存在偏好,”Koh说。“我们找到了核糖核苷酸插入基因组的一些热点。”人们可以在此基础上鉴定不稳定的基因组区域,理解它们对DNA性能和活性的影响。

下一步,研究人员将把Ribose-seq用于其它DNA,“这一技术可以用于任何生物的任何细胞类型,只要能提取出基因组DNA,”Koh说。

除了DNA修复和复制以外,药物、环境压力和其它因子造成的损伤也会使核糖核苷酸插入DNA。而Ribose-seq可以帮助人们研究这些过程产生的影响。

“Ribose-seq能让我们更好的理解核糖核苷酸对DNA结构和功能的影响,”Storici说,“鉴定特征性的核糖核苷酸插入,可以找到人类疾病的新生物学指标,比如癌症和退行性疾病。”

参考文献:

Ribose-seq: global mapping of ribonucleotides embedded in genomic DNA

Biotechniques:如何降低下一代测序1%的碱基错误识别?

为什么复杂疾病的全基因组关联研究都是失败的?

下一代测序带来的误差,使得我们很难检测到罕见变异,而这些罕见变异在癌症等疾病中发挥着重要的作用。

在Biotechniques最近的一篇新闻中,Janelle Weaver报道了科学家们在描绘这些误差以及开发策略提高精度方面所取得的进步。

美国国家心脏、肺和血液学研究所(NHLBI)的“Exome Sequencing Project”(外显子组测序项目)的研究人员在对2400个人的外显子组进行测序和分析之后推断:大多数单核苷酸变异是罕见的,在样本群体中的发生率小于0.5%。

这一发现解释了为什么全基因组关联研究(GWAS,常见遗传变异与特定疾病表型相关性)——对于复杂疾病通常是失败的。

Jan Vijg

阿 尔伯特·爱因斯坦医学院(Albert Einstein College of Medicine)的Jan Vijg主要研究”基因组损伤和衰老”之间的关系。他说:“越是罕见的基因突变越发重要,尽管我们不倾向于在常见变异中寻找特定疾病的风险变异,然而很显 然当所有的罕见变异加在一起就会引发了许多疾病表型,因此我们需要研究它们。”

尽管下一代DNA测序对疾病相关突变的检测和个性化医学发展,具有很大的潜力,但是我们检测罕见变异的能力,因样本制备、测序和分析步骤过程中引入的误差而受到限制。所以这导致了有大约1%的碱基是错误识别的。

虽然这种误差率对于某些应用是可以接受的,但是它已经成为癌症研究人员的一个主要障碍。所以现在,研究人员正在开发新的技术,以准确地识别基因组大海中的罕见变异。

目前的方法主要有三点。

NO.1 双重测序——降低误差率

在 华盛顿大学,Larry Loeb是一个研究“罕见遗传变异与癌症”的研究人员。但是由于以前的测序方法不够准确,他的实验室只能研究频率超过10%的突变。他说:“我们需要一种 更准确的方法,可以研究那些可能不会出现在所有肿瘤细胞中的变异——它们可能是亚克隆或随机的。”

Loeb lab的部分成员:Lawrence Loeb, Scott Kennedy

Michael Schmitt, and Jesse Salk

(来源:University of Washington)

Loeb 和他的研究团队描述了这样一种方法,称为双重测序(Duplex Sequencing),相关研究结果发表在2012年的《PNAS》杂志。通过对DNA双链体的两条链进行独立标记和测序,这种方法实现的理论背景误差 率为,小于每十亿个核苷酸序列中有1个人为突变。因此,这种方法对于检测罕见DNA变异以及单分子计数具有很高的灵敏度,可精确地确定DNA或RNA拷贝 数的绝对值。

双重测序(Duplex Sequencing)

在 双重测序中,一段双螺旋DNA片段的两条链,被附加以一段随机的、互补的双链核苷酸序列。首先将一段单股的随机核苷酸序列引入一段接头链,然后用DNA聚 合酶产生一段互补的双链标签,进行延伸,使双链的标签序列被合并到标准的Illumina测序接头上。接着,将标签接头结扎到剪切的DNA上,然后对单独 标记的链,进行PCR扩增和配对末端测序。

通过比较双重测序两股链中每一段所获得的序列,Loeb及其同事能够将测序误差与真正的突变区别开来。由于一个DNA双链体的两股链是互补的,真正的突变位于两股链的同一位置。相反,PCR或测序误差仅在一条链上引发突变,因此可以被视为技术性误差。

Loeb说:“其他最好的方法,可在每一千个核苷酸中引起一个误差。如果你想测定存在于身体所有细胞中的遗传异常,这已经足够好了。但是,如果你想测定罕见变异,或者如果你想要一个肿瘤中的突变分布,或者如果你想测定病毒性种群,这个错误率就太高了。”

NO.2 添加金属螯合剂降低DNA氧化偏差——实现精确度

虽 然科学家们都非常清楚PCR和新一代测序过程中引入的误差,但是DNA提取和样本制备过程中产生的误差却很少受到关注。麻省理工学院布罗德研究所和哈佛大 学的Gad Getz带领的一个研究小组,2013年在《Nucleic Acids Research》发表的一项研究中解决了这个问题,该研究发现了样本制备过程中发生的人为突变的一个新来源。

根据这项 研究,位于超深覆盖目标捕获测序数据中低等位基因片段的C>A/G>T颠换偏差,是来自于包含提取过程反应污染物的样品在进行声剪切时的 DNA氧化。往剪切缓冲液中添加金属螯合剂,可降低这些氧化偏差,一种后处理过滤法能够筛选出氧化引起的测序数据误差。这些研究结果表明,实验室程序的变 化和信息工具的使用,可以帮助研究人员抑制人为偏差的影响。

加州大学旧金山分校的Nadav Ahituv,研究基因调控序列在人类生物学和疾病中的作用,他没有参与这项研究,但是他指出:“人们都知道,使用任何测序技术都有误差,所以我不认为这 有什么惊讶的。这项研究的长处在于,他们针对的是原因,并且提出了很好的计算工具来减少这个问题。”

根据卡罗林斯卡医学 院癌症系统生物学专家Jussi Taipale介绍,除了最近这些研究中描述的实验和信息学方法之外,还有其他潜在的方法可提高测序的准确度。他没有参与这些研究,但是他指出:“精确度 总是受到聚合酶错误率的限制,因为你必须使用它。如果我们能开发一种酶,具有较低的错误率,如果我们能处理突变的所有化学来源,那么这当然会提供更多的帮 助。”

NO.3 临床影响:双重测序可以揭示赋予耐药性的罕见突变

像Vijg这些致力 于罕见突变的研究人员,可能不需要等待太长时间就能实现这些方法。例如,双重测序可以适用于各种测序平台,含有双链标签序列的接头,可以代替标准的测序接 头,且不会明显改变Illumina测序仪样本制备的正常工作流程。Vijg说:“我们肯定能够在当前的工作流程中快速地实现它。”

也 许最重要的是,双重测序可以揭示赋予耐药性的罕见突变。Vijg说:“如果我们已经知道,在肿瘤中的某个地方,有一个特定的基因变异,能够使它们有机会逃 脱一种特定药物,那么我们就可以尝试另外一种药物。这可能会对治疗产生直接影响。”此外,单细胞测序的未来发展,可能会进一步帮助研究人员确定这些类型的 突变。

但是双重测序是否能够应用于许多类型的突变,仍有待确定。“实际上,他们主要将其应用于小突变——点突变。是否能在大的变化上做到这一点,如大的缺失、易位或拷贝数变异,我还不清楚。”

最 后,双重测序可能不会代替标准方法。其中一个原因是,对于全外显子组测序来说,这种方法过于昂贵。Loeb说:“它对于细胞的测序不均匀混合物或提问的生 物学问题,真的很有用,因为它们需要超级精确度。所以,从某种意义上说,双重测序可能会被限制在癌症研究、病毒群、古DNA取证之类的事情。”

Ahituv认为,各种测序方法将被并行使用。他说:“这两篇论文最重要的意义在于,如果我们想利用新一代测序技术来寻找罕见基因变异,我们就必须非常小心。”

苹果CEO库克出柜啦!基因决定的你造吗?

苹果CEO公开承认自己的同性恋。这消息终于解开了很多果粉心中的疑惑,原来这就是你们的iPhone6会弯的原因……
  
苹果CEO库克称为自己是同性恋而自豪。他还表示,如果听说苹果CEO是一名同性恋者能够抚慰其他一些同性恋者,牺牲我个人一点隐私也是值得的。怪不得iPhone的壁纸很奇怪。彩虹色5C 6屏保的菊花,越来越容易弯的iphone早就一直在暗示你们了。

 

那么,同性恋是不是由基因决定的呢?

  同性恋现象自古就有。但是,对同性恋的成因却众说纷纭,莫衷一是。人们试图从生物 学、心理学、社会环境等角度解释同性恋,然而到目前为止,还没有一个证据充分、说服力强的理论来给同性恋的成因下一个定论。现在一般认为,同性恋是先天和 后天因素共同作用的结果,其中,基因的重要性被越来越多的证据所支持。

发现同性恋基因的科学家本人也是同性恋

美国遗传学家DeanHamer首先确定了同性恋基因,根据同性恋亲兄弟的X染色体,他发现顶端的一段基因Xq28决定同性恋。
这篇论文发表在《Science》上后,Hamer成为争议人物,而当人们知道,发表这篇文章的作者本人就是同性恋时,质疑声就更大了。但之后又有几项研究支持了Hamer的结论,也在另外三条染色体上也发现了同性恋基因。

400名同性恋研究发现8号染色体存在同性恋基因

然而今年年初,美国西北大学的一项对400名同性恋DNA的大型研究发现,无法通过Xq28基因来准确地预测同性恋,同时发现第8号染色体上存在同性恋基因,但也同样无法精确预测。

 

果蝇的经过基因修饰就会变成同性恋

虽然分子生物学的研究既没有肯定也没有否定同性恋基因的存在,但来自动物界的观察倾向于认可,因为在动物界中同性恋的存在很普遍,而且对果蝇进行基因修饰后,会使得果蝇变成同性恋,为同性恋基因的存在提供了动物实验依据。

 

韩国科学家分分钟将雌老鼠变拉拉

韩国科学家在2010年报道,胚胎期去除雌性老鼠的一个特殊性基因——FucM,可使雌性老鼠变成拉拉——它们拒绝异性的求爱,并试图与同性交配。原来,FucM基因影响了雌激素水平,进而使大脑受到影响。

同性恋无法生小孩,那基因如何流传下来呢?

同性恋占人群的比例为5%到15%之间,如果真有同性恋基因存在的话,从进化上似乎很难 解释,因为同性恋不会有后代,这些基因不会流传下来,更不可能有这么大的比例。这种基因不利于人类繁衍,是应该被进化淘汰的。那么同性恋的潜在基因倾向究 竟为什么能延续下来?我们仍没有找到答案。不过演化学者提出几个非常有潜力的假说:

亲缘选择假说

科学家们推测,产生利他主义的基因帮助了有遗传关系的亲属,从而使后者的利他基因具有了遗传优势,利他主义便得以延续。同样的 道理也可能适用于同性恋:同性恋个体不用在其自身的繁殖上投入时间和精力,或许他们就能够帮助亲戚养育后代,而最终使这些孩子身上潜在的同性恋倾向基因在 演化中受益。
一项研究以南太平洋萨摩亚群岛的男同性恋者为对象进行了调查。萨摩亚是一个更加传统的社会,当地的男同性恋者被称为 “Fa’afafine”, 不生育后代,完全能被社会全体接受,尤其被他们的血亲家庭所接受。这些男同性恋者对侄(外甥)辈倾注了大量的精力——这些孩子与他们平均有 25% 的基因是相同的。

性别互补选择假说

也许在一个性别——比如男同性恋中损害生存适应性的基因,在女性身上具有增强适应性的作用。有专家认为这是一种“爱男基因”, 主要用途是让有这些基因的女性在性方面更早熟,因此能够生更多的孩子,从而具备进化优势。其代价是如果男性有了这些基因就会变成同性恋。这个理论有证据支 持,在意大利进行的研究发现同性恋男子的女性亲属生孩子的数量是其他妇女的1.3倍。这在选择上是一个巨大的优势,其代价是男性亲属是同性恋,相比之下, 获得的益处大于弊端,因此被进化筛选出来,一代一代地通过X染色体遗传下来。
同理,男性也应该有“爱女基因”,这种基因在男的身上是进化优势,会有更多的后代,但在女的身上就是女同性恋,也同样益处大于弊端,得以遗传下来。这种 “爱女基因”不可能通过性染色体遗传,而会在其他染色体上,因此女同性恋在数量上不如男同性恋,而且其中双性恋的比例较大。

社会声誉假说

有人类学证据表明,在工业化之前的社会,同性恋男性更有可能成为牧师或者祭司,他们的异性恋亲属也因此获得了较高的社会声誉,并因此占有繁殖优势,从而使得任何共有的同性恋倾向基因得到延续。这是一个非常有吸引力的想法,不过也缺乏实证支持。

群体选择假说

大部分生物学家都认为自然选择发生在个体及其基因的层面,而非发生于群体之中。但人类可能是一个例外;或许包含有同性恋个体的 群体比全部是异性恋个体的群体更好。最近,人类学家莎拉•赫迪(Sarah B. Hrdy)等人指出,在人类演化史的大部分时期,养育后代不都是父母的(更不是母亲的)专利,我们的祖先有很多拟母亲行为那些并非孩子双亲的人,尤其是其 他的血缘亲属,参与到了抚养后代的任务中。智人发展出这样一套体系是很有道理的,因为在所有的灵长目动物中,智人的新生儿是最无助的,需要成人投入的精力 也最多。如果种群中有足够多育儿帮手是同性恋者,整个群体都将从中极大地受益。
另一方面,就算人类祖先中的同性恋者并不一定要参与到合作抚养后代的任务中去,他们较少生育(或者干脆就不生),这本身就为其异性恋亲属节省了更多的资 源。还有研究者提出了其他群体层面上的模型,关注社交互动而不是资源利用:同性恋也许与更强的社交性和社会合作有关;它还可能阻止为争夺异性而产生的暴力 竞争。

平衡多态假说

或许同性恋这种遗传倾向与某种或者某几种特定的基因共同起作用时,会因为某种未知的原因 而产生补偿性的益处,比如著名的镰刀形红细胞贫血症(sickle-cell disease ※此处已更改),这种病的致病基因有助于预防疟疾。虽然目前还没有确定哪一段基因是决定性取向的,但我们仍旧不能排除这种平衡多态的可能性。

非适应性的副产物

同性恋行为可能既不是适应性的,也不是不适应的,它可能就是一种非适应性的行为。也就是 说,它也许并没有得到自然选择,而是作为某些优势性状的副产物被保留了下来。这样的优势性状可能是渴望形成配对关系、寻求感情或者生理上的满足,等等。那 么,为什么会存在这样的倾向,为什么人与人之间的亲密关系是愉悦的? 答案很有可能是,在演化进程中,长期的配对关系最有利于个体的成功繁殖。

存在即合理 同性恋基因不会丢失

同性恋的成因依然没有定论,但有两点可以肯定:第一,无论是动物还是人,其性行为的作用都不可能、也不应该是以繁殖为唯一目 的;第二,同性恋基因不会丢失,它已经走过了生物进化的漫漫长路,如果会被淘汰的话,它早就已经没了,不是吗?不必因为同性恋是少数派,就要对其“特别关 照”,存在即合理,在这个孤独的星球上,大家都是一样的。

苹果之父是乔布斯,苹果之娘就是库克啦

 

为了解释苹果6容易变弯,库克也是蛮拼的

循环肿瘤细胞如何实现辩血识癌

                                                                                导读

他眼看着他的兄弟死于癌症,无药可救。现在,世界最具权威的一名癌症专家宣称,到了执行方案B的时候了,已经找到了一种通用检查工具,可以在无症状病人的年度体检中发现其体内癌细胞的分子踪迹。

 

从血液中找到微量肿瘤DNA
    波特·福格斯坦(Bert Vogelstein)所需要的而又令人不安的答案就在血液样本中。

福格斯坦是世界上最富盛名的科学家之一。上世纪八十年代,他和约翰霍普金斯大学的同事发现了DNA是如何经历数十年发生一系列的变异而使细胞发生癌变,被认为是攻克了“癌症的阵地”。福格斯坦对于证实受损DNA是导致的癌症的元凶这一理论做出了重大贡献。

现在,你可以想象你可以通过血液看到这些变异――看到癌症。几乎所有类型的癌症都会向血液中释放DNA,福格斯坦在约翰霍普金斯大学的实验室发明了一种叫做“液体活检”的技术,可以找出癌症遗传物质。

这项技术可以通过仪器对血液样本中的DNA进行快速排序,使研究人员找出即使是极其微量的肿瘤DNA。霍普金斯大学的科学家们与来自巴尔的摩最大的肿瘤治疗中心的医生合作,对一千多份血液样本进行了研究。他们认为,液体活检可在疾病症状出现之前发现癌症。

这有一份特殊的血液样本,它来自福格斯坦的弟弟――比福格斯坦小一岁的整形外科医生。他 患有皮肤癌,而且癌细胞已经扩散。当时他对一种新型药物产生反应,但治疗使他全身肿胀,从X光或CT扫描中很难看出癌细胞是否消失。因此,福格斯坦采用了 这项新技术,如果血液中的肿瘤DNA消失,则他们可以庆祝一下了,如果它仍然存在,他可能要劝他的弟弟改用别的药物,做最后一搏。

“我们曾试过指导治疗。不管怎样,还有一线希望。”福格斯坦声音哽咽的说。他没有告诉我们后来发生了什么。

出生于巴尔的摩的巴力·福格斯坦(Barry Volgelstein)的讣告在2013年7月3日发布。

预防比治疗更有效

在 与癌症的斗争中,我们并没有取得胜利,福格斯坦弟弟的死揭示了原因何在。许多癌症在已经变得无法治愈时才得以发现。每年全世界的癌症药物花费达910亿美 元,但大多数药物对于治疗这些患者为时已晚。最新治疗方法所产生的治疗费用高得离谱,每月需花费1万美元,但常常只能延长生命几个星期。制药公司对晚期癌 症药物的研发和测试远多于其他类型的药物。
“不论是普通民众还是科学家,都执迷于这样一个观念:治愈晚期癌症。”福格斯坦表示, “这是社会上普通采用的方案A,我认为这不是解决办法”。还有其他的方法可以降低癌症的死亡率:涂防晒霜、不吸烟以及进行检查尽早发现癌症。对于福格斯坦 而言,这些预防措施代表“方案B”,这是因为人们对于预防癌症没有给予足够的重视和资金投入。

然而预防工作比任何药物都有效得多。在美国,结肠癌的死亡率为40%,低于1975年的死亡率,这种疾病多半是在结肠镜检查中发现的。同样的,黑色素瘤皮肤癌如果能在早期发现,是可以通过手术治疗的。福格斯坦表示,“我们认为应该把方案B变为方案A。”

循环肿瘤细胞使一切成为可能

新的血液检测方法会使这一切成为可能。霍普金斯大学的研究者们第一次宣称,他们已经找到一种通用检查工具,可以在无症状病人的年度体检中发现其体内癌细胞 的分子踪迹。“我想我们解决了早期检测这一问题。”维克特·威尔克斯库(Victor Velculescu)称,他是霍普金斯大学的研究人员,他的实验室与福格斯坦的实验室仅一楼之隔。
进行癌症常规检查在医学上将是一个挑战。其中的一个困难就是当检查出体内出现癌细胞 DNA时,内科医生可能并不清楚肿瘤到底在哪、危险性有多大,甚至不知道是否值得治疗。“我们必须谨慎对待”,马萨诸塞州总医院癌症中心的主管丹尼尔·哈 勃(Daniel Haber)表示。他认为,DNA血液检测“尚未成熟”,而且还需要大量研究证实其有用性。“还有许多棘手的问题需要解决”,他说。

尽管有人对此有所怀疑,这项技术还是吸引了越来越多的关注。托尼·迪科哈勃(Tony Dickherber)是美国国家癌症研究所创新分子分析技术项目组组长,他表示,通过检测血液来查找肿瘤DNA在三年前“只不过是边缘技术”。但现在从 美国加州到英国伦敦,许多实验室和公司都投入到血液检测技术的改进之中,并积极寻找支持这项技术的新数据。“人们开始相信福格斯坦是对的――这可能是癌症 早期诊断的最佳途径,”他说,“它可能比现有的其他检查技术功能更强大,它筛查的癌症范围之广令人难置信。”

来自霍普金斯大学和其他23家机构的医生们在二月发表了他们的研究成果。他们对患有15 种不同类型癌症的846名病人进行了研究。研究发现,在癌细胞已经扩散的晚期癌症患者中,血液中发现肿瘤DNA的患者比例超过80%,在癌细胞未扩散的早 期癌症患者中,这一比例约为47%。在所有晚期结肠癌患者的血液中都检测到肿瘤DNA。

霍普金斯大学的研究者们第一次宣称,他们已经找到了一种通用检查工具,可以在无症状病人的年度体检中发现其体内癌细胞的分子踪迹。

起初,检测结果可能并不尽如人意。检测结果会经常产生疏漏吗?根据威尔克斯库的说法,血 液检测的益处在于“极其准确”。如果检测出你的血液中确实出现肿瘤DNA,则说明你目前患有癌症。因此,与当前前列腺癌和乳腺癌的检测技术通常会出现假阳 性相比,DNA检测占有优势。“血液中出现循环DNA是正常的;但出现与肿瘤匹配的循环DNA就不正常了”,斯坦福大学外科肿瘤研究所所长斯特芬尼·杰夫 睿(Stefanie Jeffery)表示。

对于福格斯坦而言,血液检测意味着超过半数的癌症有可能在早期得以发现,并可能通过手术得到治愈。他表示,“如果有一种可以治愈一半癌症的药物,那你可以在纽约举行盛大游行了。”

循环肿瘤细胞的早期发现
  尼克森总统于1971签署了“对癌症宣战”法案,那时福格斯坦正在读医学院。由于药物没能使癌症死亡率下降,这使多年的研究毫无成果。现在我们知道了是什 么导致了癌症。福格斯坦与同事肯乃斯·肯斯勒(Kenneth Kinzler)在上世纪八十年代进行的研究证实了基因突变是导致癌症的元凶。科学家们已经发现了150多种致癌基因。虽然癌症的基因图谱非常复杂,但所 有的DNA突变都会导致一个结果:本应死亡的正常细胞持续分裂增生。这种细胞生长失衡就是癌症。

对于制药公司而言,这意味着要花费数十亿美元来开发出治疗晚期癌症的新药。但是对于福格斯坦而言,DNA突变导致癌症这一发现还意味着:在疾病得到诊断之前确定致病的变异是有可能的。在肿瘤学中有个共识:癌症发现越早,生存机会越大。

关于结肠癌,这种类型的癌症是福格斯坦研究最为深入的一种癌症。它起始于叫做APC基因 的单点突变。但是细胞该点的突变转化为具有扩散能力和杀伤能力的DNA突变平均需要30年。每年有大约60万人死于结肠癌。“他们几乎都是因为没有在肿瘤 存在的前27年没有发现患有癌症而死亡的”,福格斯坦说,“在这个过程中我们有足够长的时间进行治疗。”

问题是除了血液检测,没有其他简便的方法来找出这些突变。福格斯坦从上世纪九十年代开始 进行癌症早期检测的研究,他最初使用的是当时的传统方法,从尿液和粪便中查找肿瘤DNA。他认为预防和检查仍然未受到人们的重视,即使在现在,他也是研究 者中的“绝对少数派”。据他估算,药物的研制费用是预防检查费用的100倍。

这就解释了为什么尽管福格斯坦声名卓著却总是看起来一幅愤愤不平的样子。包括其他几位著 名学者在内的霍普金斯大学研究团队发布的新观点总是会驳倒一些主流科学观念。按照实验室的惯例,想要在这里工作的年轻科学家在首次介绍自己的研究工作时一 定要戴上Burger King皇冠。

路易斯·迪亚斯的构想
    实验室有关血液检测的工作在路易斯·迪亚斯(Luis Diaz)的带领下进行,他是一名肿瘤专家,是福格斯坦的得意门生。他在2005想到利用血液检测来查找癌症DNA,那时他正在研究是否可以利用噬肉菌摧 毁肿瘤。这项研究需要将人类癌症转移到老鼠身上,迪亚斯想起他需要一种在不杀死老鼠的情况下监视老鼠体内肿瘤的方法。他和他的同事决定采用血液检测的方 法。很快,他们发现人DNA水平随着治疗的成功或失败而大幅上升或下降。既然能够监测到老鼠体内的DNA水平,是不是也可以监测到人体内的DNA水平呢?

这种想法并不是第一次提出。早在1948年就有人提出在人类的静脉和动脉中存在游离循环DNA,它通常是死亡细胞产生的废物。但肿瘤也会向血液释放DNA。在死于癌症的人体内,这种来自肿瘤的DNA可高达87%,但通常数量极少,令人难以查觉。

当迪亚斯开始探究这个问题时,所有这些理论尚未成形,只是一种模糊的可能性。为了开发液 体活检技术,霍普金斯大学的科学家们必须首先发明一种将肿瘤DNA与大量正常DNA区分开的方法。血样来自迪亚斯当时正在治疗的巴尔的摩结肠癌病人,研究 者们最初只追踪四种癌症基因。他们发现,血液中的DNA在这些病人进行手术或药物治疗后快速消失,甚至在一天内毫无踪迹。对健康对照者的检测从未出现阳性 结果。“我们认识到这种检测可以提出并解答“我患有癌症吗?”这样的问题,”迪亚斯说。

霍普金斯大学的科学家们坚信,这种检测比现有医生所使用的任何一种工具都敏感得多――至 少对于癌细胞还太小以至无法用成像设备检查出来的癌症是这样的。福格斯坦做了这样的估算,肿瘤至少含有1千万个细胞、像大头针的头部那么大时就会释放出可 检测到的DNA。相比之下,肿瘤要100倍于这个尺寸,至少包含10亿个细胞才会在核磁共振检查中显现。

霍普金斯大学的医生已经开始利用DNA检测来确定病人在切除肿瘤后体内是否还留有恶性肿 瘤细胞。参与这项研究的还有皮特·吉布斯(Peter Gibbs),一名澳大利亚肿瘤专家,他们对250个在结肠癌早期接受过手术的病人的血液样本进行了分析。结果显示大多数病人得到治愈,但是30%的病人 结果显示未清除全部肿瘤,有复发的可能。问题是医生不知道哪些病人会出现复发。“外科医生会告诉他们,‘不用担心――肿瘤已经切除了’,”迪亚斯说,“这 让我很沮丧,因为我不得不告诉他们,‘我们真的不知道你是否痊愈’”。这些癌症幸存者觉得惴惴不安,不知道什么时候癌症会卷土重来,到时病情有可能变得更 为凶险。而且这种状态会持续数年。

病人可能会感到恐慌,但医生却不知道该怎么做。“对健康人群进行检查然后告诉他们‘哎呀,看,您身体里有肿瘤,但我们不知道它在哪里’――这么做是行不通的,”一个肿瘤医生这样说。

在手术六周后,澳大利亚的病人进行了肿瘤DNA的血液检查。研究者们表示,到目前为止, 他们已经正确无误地确认了约一半后来癌症复发的病人。福格斯坦表示,这些病人可在将来接受化疗,这可能会使至少三分之一的病人得到治愈。但是这种检查的局 限性也显而易见,仍然有一半癌症复发的病人未被检查出来。

迪亚斯表示,这可能是因为残留的癌细胞未释放出足够的DNA。“或许这已经达到生物极 限,”他说。但是,癌症DNA会随着时间的推移升高到可检测的水平,对病人做定期检查可将其查找出来。尽管霍普金斯大学的检测技术还处于实验阶段,路易 斯·迪亚斯表示他有足够的信心告诉一些患者他们仍未痊愈,而告诉其他的患者他们很可能已经痊愈了。“六到八周以后,我们就可以告诉他们是否得到治愈,”他 说,“这太令人高兴了。”

目标:成为常规癌症检查手段

福格斯坦表示,他的终极目标是使血液检测成为常规癌症检查手段。霍普金斯大学的研究者们对于这个目标的实现表示乐观。他们利用血液样本中的DNA对人类的 整个基因组进行排序,而不是仅仅追踪几个关键癌症基因。这样他们可以计算出遗传物质发生错位或混乱的频率。大量重排DNA的出现是一种分子性副作用,只有 在癌细胞染色体上才会发生这种情况――这是出现癌症的信号。但是测定出一个完整的基因序列花费昂贵。“如果一个人患有癌症,他不介意花费5000美元做基 因测试。但他不会在年度体检中花费1000美元去做这个测试,”福格斯坦说,“我们的目标是将这项检测的费用降低到可在常规检查中使用。”
这需要时间。DNA测序成本已经大幅下降,但是达到100美元这个常规检查可接受的低价 格可能需要10年才能实现。同时,霍普金斯大学对易有患癌症的人进行了多项研究,以确定能否在健康人群中发现早期癌症。其中的一项研究涉及到800名具有 患癌风险的人。在这些特殊病例中,病人的胰腺上长有囊肿,这些囊肿有的会转化成癌症,有的则不会。

胰腺癌是一种最适于通过血液检测进行早期检查的癌症。它并不是很常见的癌症,但却是美国 第四大致命癌症,目前治愈率只有4%。如果能在扩散前得到早期发现,生存率可提高到大约25%。(56岁的苹果公司创始人斯蒂夫·乔布斯死于另外一种类型 的叫做神经内分泌瘤的胰腺癌)。

但是让每个人都能做上DNA检测则是一个巨大飞跃。麻省总医院的肿瘤专家哈勃认为这项技 术在目前可能能够告诉医生病人是否患有癌症。但是不同于成像扫描或活检,它无法明确指出癌症到底在哪个部位。病人会感到恐慌,但医生却不知道该怎么做。 “对健康人群进行检查然后告诉他们‘哎呀,看,您身体里有肿瘤,但我们不知道它在哪里’――这么做是行不通的,”哈勃说。

药物在预测癌症方面效果较差是有例可寻的。例如PSA(前列腺特异抗原)检测,是检测一 种与前列腺癌相关的蛋白质。这种检测时常会出现假阳性结果,而且在它确实检测出来的肿瘤中,一部分肿瘤生长极为缓慢,根本无需治疗。数百万人由于癌症最终 对他们没什么影响而终止了治疗。

据估算,每47名接受前列腺切除手术的病人中只有一人未死于癌症。达特茅斯学院的研究者 们进行的一项研究显示,乳房X线透视也会导致过度诊断和过度治疗。大约25%已经确诊并治疗的乳腺癌是不会引起任何症状的。“你对每一个人都进行检查,然 后由于疾病不会发展或者这人死于其他原因而终止治疗,”达特茅斯学院的健康经济学家琼纳森·斯肯纳(Jonathan Skinner)说,“早期检查所带来的负面影响可能非常大。”

但是霍普金斯大学的威尔克斯库认为癌症DNA普查会成为现实。“如果你不能有所作为,那 你是想一直无知下去,”他说,“我无法想象,了解癌症会对病人毫无帮助。或许我们不会对于每一条信息都做出强烈反应,或许我们不采取任何行动,但是由于检 测简便易行,很容易做到定期检测,然后我们会告诉患者‘让我们看它发展得如何了’。”

到目前为止,尚没有公司考虑对看似健康的病人做大范围的癌症检查。目前,只有迪亚斯和威 尔克斯库新创立的诊断检测公司Personal Genome Diagnostics和其他几家公司,如Boreal Genomics和Guardant Health提供液体活检服务,但是仅面对癌症晚期患者。对于这些患者而言,血液检测可揭示治疗是否有效,如果无效则需尝试采用其他疗法。这项技术的另一 个有价值的应用是追踪那些导致肿瘤产生的特异性DNA突变。由于许多新型癌症药物具有“靶向性”――阻断特异性分子变化过程――只有预计药物会对患者的肿 瘤产生作用时才会对患者施用这些药物。医生已经能够通过组织活检对肿瘤进行DNA检测。但是非侵入性的血液检测更简便也更安全,可以更频繁地对患者进行检 查。由于癌症DNA不断发生变异,血液检测可以帮助患者适时更换药物。

对于Guardant的总裁何尔米·艾特克(Helmy Eltoukhy)来说,液体活检用途广泛,是个“棒极了的想法”。出于商业上和医学上的原因,他的公司目前只针对患有癌症的病人提供服务。但他表示,早 期筛查已在公司的未来规划中。“很显然,它就是圣杯,”他说,“想想它的这些用途,这就是我们一直努力的方向。”

我问过65岁的福格斯坦和44岁的威尔克斯库,他们是否对自己进行过血液检测。他们都给 出了否定的回答。但总的来说,美国人有40%的人可能会患上癌症,而且这种可能性会随着年龄增长而增大。如果研究者们未对这项检测技术进行过研究,公众似 乎也不会急于去做血液检测。如果广泛开展癌症检测,将其作为公共健康措施,则整个医学界必须参与其中,这无疑将耗费大量的时间。

福格斯坦并不认为这些能轻易能够实现。不管怎样,我们仍然需要新型药物治疗已经患上癌症 的人们。但他仍坚信,击败晚期癌症最好的办法就是防患于未然。当我对他弟弟的去世表示同情时,福格斯坦摆了摆双手。“这就是我做这项研究的原因,”他说, “一百年以后,当极少有人因癌症死亡时,绝大部分原因是癌症被早期发现,而不是我们能够治好肿瘤遍布的躯体。”