解析ABSOLUTE软件

简介ABSOLUTE

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

ABSOLUTE的简单框架

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

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

  • 基因组某位点:

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

  • Cancer细胞平均倍性为:,定义为整个基因组上的平均值

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

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

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

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

因为取整数值,因此必然是离散值。最小值为,发生在纯合性缺失位点,对应正常细胞的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的详细文档

  • ABSOLUTE官方页面

  • 如何获取ABSOLUTE

  • 如何运行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个主函数,依次运行,使用示例数据测试结果即可。

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

你可能感兴趣的:(解析ABSOLUTE软件)