解析ABSOLUTE软件

简介ABSOLUTE

ABSOLUTE是Broad研究所开发的一款癌症CNV分析软件,实质是一个R包,可以定量细胞的绝对拷贝数、肿瘤纯度与倍性,如果提供突变数据,还能探究克隆与亚克隆等。关于这个软件的文献发表在NBT计算生物学上,该文献是我目前所知CNV绝对定量最经典的一篇,里面包含繁多的数学模型(反正我是没太看懂)。不过核心思考我等还是可以理解的:ABSOLUTE主要通过3个子模型——SCNA(CNV数据),已预先设计好的癌症核型以及体细胞突变频率(MAF文件)进行计分,然后进行整合,最高分者为最优模型。但作者也指出最优模型并不是最好的,所以人工评审结果是有必要的

ABSOLUTE的简单框架

  • 样本混合物中Cancer细胞比例:\alpha (假设单染色体组monogenomic,即有同源SCNAs)

  • 样本混合物中Normal细胞比例:1-\alpha (染色体倍性为2)

  • 基因组某位点:x

  • Cancer细胞中该位点(整型)拷贝数表示为:q(x)

  • Cancer细胞平均倍性为:\tau,定义为整个基因组上q(x)的平均值

样本混合物中位点x的平均绝对拷贝数为:

\alpha q(x) + 2(1-\alpha) \rightarrow Cancer细胞比例*位点拷贝数+正常细胞比例*位点拷贝数2

样本混合物中平均倍性D为:

\alpha \tau + 2(1-\alpha) \rightarrow Cancer细胞比例 * Cancer倍性 + 正常细胞比例 * 正常细胞倍性2

上述两个值以单倍体基因组为单位

因此,位点x的相对拷贝数R为:

R(x) = (\alpha q(x) + 2(1-\alpha)) / D = (\alpha / D) q(x) + (2(1-\alpha) / D)

\rightarrow 平均绝对拷贝数 / 平均倍性

因为q(x)取整数值,因此R(x)必然是离散值。最小值为(2(1-\alpha)/D),发生在纯合性缺失位点,对应正常细胞的DNA比例。

Notably, if a cancer sample is not strictly clonal, copy-number alteration occurring in substantial subclonal fraction will appear as outliers from this pattern.

ABSOLUTE的详细文档

我大概是从1年前开始了解ABSOLUTE这个软件,但是一直没搞懂怎么用,或者是说为什么作者要设计3个主函数。一开始我看下下面的示例代码,我处于懵逼状态

DoAbsolute <- function(scan, sif) {
  registerDoSEQ()
  library(ABSOLUTE)
  plate.name <- "DRAWS"
  genome <- "hg18"
  platform <- "SNP_250K_STY"
  primary.disease <- sif[scan, "PRIMARY_DISEASE"]
  sample.name <- sif[scan, "SAMPLE_NAME"]
  sigma.p <- 0
  max.sigma.h <- 0.02
  min.ploidy <- 0.95
  max.ploidy <- 10
  max.as.seg.count <- 1500
  max.non.clonal <- 0
  max.neg.genome <- 0
  copy_num_type <- "allelic"
  seg.dat.fn <- file.path("output", scan, "hapseg",
                          paste(plate.name, "_", scan, "_segdat.RData", sep=""))
  results.dir <- file.path(".", "output", scan, "absolute")
  print(paste("Starting scan", scan, "at", results.dir))
  log.dir <- file.path(".", "output", "abs_logs")
  if (!file.exists(log.dir)) {
     dir.create(log.dir, recursive=TRUE)
  }
  if (!file.exists(results.dir)) {
     dir.create(results.dir, recursive=TRUE)
  }
  sink(file=file.path(log.dir, paste(scan, ".abs.out.txt", sep="")))
  RunAbsolute(seg.dat.fn, sigma.p, max.sigma.h, min.ploidy, max.ploidy, primary.disease, 
              platform, sample.name, results.dir, max.as.seg.count, max.non.clonal, 
              max.neg.genome, copy_num_type, verbose=TRUE)
  sink()
}
arrays.txt <- "./paper_example/mix250K_arrays.txt"
sif.txt <- "./paper_example/mix_250K_SIF.txt"
## read in array names
scans <- readLines(arrays.txt)[-1]
sif <- read.delim(sif.txt, as.is=TRUE)
library(foreach)
## library(doMC)
## registerDoMC(20)
foreach (scan=scans, .combine=c) %dopar% {
  DoAbsolute(scan, sif)
}
obj.name <- "DRAWS_summary"
results.dir <- file.path(".", "output", "abs_summary")
absolute.files <- file.path(".", "output",
                            scans, "absolute",
                            paste(scans, ".ABSOLUTE.RData", sep=""))
library(ABSOLUTE)
CreateReviewObject(obj.name, absolute.files, results.dir, "allelic", verbose=TRUE)
## At this point you'd perform your manual review and mark up the file 
## output/abs_summary/DRAWS_summary.PP-calls_tab.txt by prepending a column with
## your desired solution calls. After that (or w/o doing that if you choose to accept
## the defaults, which is what running this code will do) run the following command:
calls.path = file.path("output", "abs_summary", "DRAWS_summary.PP-calls_tab.txt")
modes.path = file.path("output", "abs_summary", "DRAWS_summary.PP-modes.data.RData")
output.path = file.path("output", "abs_extract")
ExtractReviewedResults(calls.path, "test", modes.path, output.path, "absolute", "allelic")

尽管我寻找到一些示例数据并可以初步运行ABSOLUTE,但我长时间排斥使用它,因为我理解不了它。学会用并不代表学会了理解,理解了才能真正用起来

直到我在Gene Pattern上搜索到了新的文档说明,再加上我自己能力相比过去有所提升,很多事情便豁然开朗了。

本文最重要的文档http://software.broadinstitute.org/cancer/software/genepattern/modules/docs/ABSOLUTE/2

该文档从背景、方法、示例以及结果都做了详细地说明,虽然它讲解的是ABSOLUTE在GenePattern上的运行,但如果我们想本地运行该包,流程和方式是完全一致的。

有几个参数的设置需要额外注意,其他参数都建议采用默认的,作者说过默认参数的设置是为了平衡过拟合以及解的复杂性。

  • max sigma h,这个可以根据情况设大点,因为样本间误差设小了,结果反而不好。
  • max as seg count,这个最好事先看一些每个样本segmentation数目的分布,默认设置为1500,也就是超过这个数目,样本会直接打上“Fail”标签,不会出现在最后的结果中。
  • max non clonal,这个参数我看到作者处理示例数据使用的是1,也就是运行基因组存在non-clonal的最大比例
  • copy number type,一般我们处理的都是total copy number,ABSOLUTE仅支持由HAPSEG或AllelicCapseg输入的allelic数据。

ABSOLUTE的批量运行

理解3个主函数,依次运行,使用示例数据测试结果即可。

如果想要批量运行的话,可以自己写代码构建函数进行处理。我自己已经成功构建了,但暂时不公开了,写文字说明也很麻烦,以后再说。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,470评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,393评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,577评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,176评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,189评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,155评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,041评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,903评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,319评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,539评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,703评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,417评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,013评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,664评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,818评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,711评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,601评论 2 353

推荐阅读更多精彩内容