天天看點

Topic 2.克隆進化之 ClonEvol

上期利用sciClone已經全面的複現了文章的相關内容,下面開始介紹ClonEvol軟體的使用及相關問題,包括文章使用軟體複現的圖表。

Topic 2.克隆進化之 ClonEvol

**背景:**克隆進化重建是了解惡性良性腫瘤進展和實施個性化治療的關鍵。這通常是通過聚集體細胞變異,基于其細胞流行率,通過多個樣本的大塊惡性良性腫瘤測序估計。然後根據估計的細胞流行率對由克隆标記變異組成的簇進行排序,以重建克隆進化樹,這一過程稱為克隆排序。然而,細胞流行率的估計被統計變異性和測序/資料分析中的錯誤所混淆,是以抑制了克隆進化的精确重建。這個問題因惡性良性腫瘤内和惡性良性腫瘤間的異質性而進一步複雜化。此外,該領域缺乏一個全面的可視化工具,以促進解釋複雜的克隆關系。為了應對這些挑戰,開發了ClonEvol,這是一個用于克隆排序、可視化和解釋的統一軟體工具。

**材料和方法:**ClonEvol使用bootstrap重采樣技術來估計克隆的細胞部分,并對克隆排序限制進行機率模組化,以考慮統計變變性。引導允許識别樣品建立和亞克隆,進而能夠解釋克隆亞種。ClonEvol自動生成用于重建和解釋克隆進化的多種廣泛使用的可視化效果。

**結果:**在克隆進化推斷方面,ClonEvol優于目前最先進的三種工具(LICHeE、Canopy和PhyloWGS),顯示出更強的容錯能力,并在模拟中産生更精确的樹。基于最近發表的多篇利用ClonEvol研究實體癌轉移和耐藥性的文章,我們發現ClonEvol在兩例已發表的急性髓系白血病患者中再次發現了複發的亞克隆。此外,我們還證明,通過非侵入性監測,ClonEvol再現了一名已發表的乳腺癌患者惡性良性腫瘤轉移進展過程中出現的亞克隆。

**結論:**ClonEvol在惡性良性腫瘤活檢中具有廣泛的縱向監測克隆群體的适用性,或無創監測,以指導精準醫學。

**可用性:**ClonEvol是用R編寫的,可獲得位址:                  https://github.com/ChrisMaherLab/ClonEvol

Topic 2.克隆進化之 ClonEvol

該軟體延續了sciClone, Pyclone等軟體後續的可視化分析,使得惡性良性腫瘤的亞種更加清晰明了。下面代碼将完成文章中克隆進化Figure 1圖形。

主要三個步驟:

**步驟1:**準備克隆進化推斷的變異資料

測序的深度,樣本的數量和品質,以及體細胞變異的數量和品質可能會對克隆進化模型産生深遠的影響。在理想的情況下,我們希望:

  1. 大量樣本;
  2. 大量變異(外顯子組測序可以,但全基因組測序可以更好地覆寫全基因組體細胞突變);
  3. 多個時間點;
  4. 多區域樣本(由于惡性良性腫瘤内的異質性);
  5. 深度測序。

**步驟2:**對變異資料進行聚類

**步驟3:**評估變量聚類結果

具體細節及代碼見下文:

  • 安裝軟體包
#ClonEvol requires R 2.15 or later. Install from Github
install.packages('devtools')
library(devtools)
install_github('hdng/clonevol')
install.packages('gridBase')
install.packages('gridExtra')
install.packages('ggplot2')
install.packages('igraph')
install.packages('packcircles')
           
  • 資料準備
#########實列分析
library(clonevol)
data(aml1)
x <- aml1$variant
head(x)
    cluster  gene is.driver P.vaf R.vaf  P.ccf  R.ccf P.ref.count
226       1  SMC3      TRUE 50.28 49.13 100.56  98.26        3027
349       1 PTPRT      TRUE 45.24 45.31  90.48  90.62        2159
1         1     -     FALSE 43.83 41.37  87.66  82.74        2931
2         1     -     FALSE 41.23 46.47  82.46  92.94        2203
3         1     -     FALSE 48.91 43.11  97.82  86.22        2534
4         1     -     FALSE 47.54 44.45  95.08  88.90        2539
6         1     -     FALSE 48.12 45.47  96.24  90.94        2210
7         1     -     FALSE 47.03 41.13  94.06  82.26        2387
8         1     -     FALSE 51.04 45.38 102.08  90.76        2225
##資料準備
# shorten vaf column names as they will be
vaf.col.names <- grep('.vaf', colnames(x), value=T)
sample.names <- gsub('.vaf', '', vaf.col.names)
x[, sample.names] <- x[, vaf.col.names]
vaf.col.names <- sample.names

# prepare sample grouping
sample.groups <- c('P', 'R');
names(sample.groups) <- vaf.col.names

# setup the order of clusters to display in various plots (later)
x <- x[order(x$cluster),]
head(x)
  cluster  gene is.driver P.vaf R.vaf  P.ccf R.ccf P.ref.count P.var.count P.depth R.ref.count R.var.count R.depth     P     R
226       1  SMC3      TRUE 50.28 49.13 100.56 98.26        3027        2611    5639        2035        1990    4024 50.28 49.13
349       1 PTPRT      TRUE 45.24 45.31  90.48 90.62        2159        1799    3958        1715        1579    3294 45.24 45.31
1         1     -     FALSE 43.83 41.37  87.66 82.74        2931        2364    5296        2224        1501    3725 43.83 41.37
2         1     -     FALSE 41.23 46.47  82.46 92.94        2203        1658    3862        1733        1587    3320 41.23 46.47
3         1     -     FALSE 48.91 43.11  97.82 86.22        2534        2358    4893        2605        1873    4479 48.91 43.11
4         1     -     FALSE 47.54 44.45  95.08 88.90        2539        2271    4810        2325        2041    4366 47.54 44.45
########添加顔色
clone.colors <- c('#999793', '#8d4891', '#f8e356', '#fe9536', '#d7352e')
           
  • 可視化變異簇
##Visualizing the variant clusters
plot.variant.clusters(x,
       cluster.col.name = 'cluster',
       show.cluster.size = FALSE,
       cluster.size.text.color = 'blue',
       vaf.col.names = vaf.col.names,
       vaf.limits = 70,
       sample.title.size = 20,
       violin = FALSE,
       box = FALSE,
       jitter = TRUE,
       jitter.shape = 1,
       jitter.color = clone.colors,
       jitter.size = 3,
       jitter.alpha = 1,
       jitter.center.method = 'median',
       jitter.center.size = 1,
       jitter.center.color = 'darkgray',
       jitter.center.display.value = 'none',
       highlight = 'is.driver',
       highlight.shape = 21,
       highlight.color = 'blue',
       highlight.fill.color = 'green',
       highlight.note.col.name = 'gene',
       highlight.note.size = 2,
       order.by.total.vaf = FALSE)
           
Topic 2.克隆進化之 ClonEvol
  • 繪制樣本之間的VAFs或CCFs(cancer cell fraction)
plot.pairwise(x, col.names = vaf.col.names,
              out.prefix = 'variants.pairwise.plot',
              colors = clone.colors)
           
Topic 2.克隆進化之 ClonEvol
  • 樣本間聚類的平均值/中值(聚類流)
plot.cluster.flow(x, vaf.col.names = vaf.col.names,
                  sample.names = c('Primary', 'Relapse'),
                  colors = clone.colors)
           
Topic 2.克隆進化之 ClonEvol
  • 使用ClonEvol進行克隆排序
##推斷克隆進化樹
y = infer.clonal.models(variants = x,
                        cluster.col.name = 'cluster',
                        vaf.col.names = vaf.col.names,
                        sample.groups = sample.groups,
                        cancer.initiation.model='monoclonal',
                        subclonal.test = 'bootstrap',
                        subclonal.test.model = 'non-parametric',
                        num.boots = 1000,
                        founding.cluster = 1,
                        cluster.center = 'mean',
                        ignore.clusters = NULL,
                        clone.colors = clone.colors,
                        min.cluster.vaf = 0.01,
                        # min probability that CCF(clone) is non-negative
                        sum.p = 0.05,
                        # alpha level in confidence interval estimate for CCF(clone)
                        alpha = 0.05)
##将驅動基因事件映射到樹中
y <- transfer.events.to.consensus.trees(y,
                                        x[x$is.driver,],
                                        cluster.col.name = 'cluster',
                                        event.col.name = 'gene')
##将基于節點的樹轉換為基于樹枝的樹
y <- convert.consensus.tree.clone.to.branch(y, branch.scale = 'sqrt')
           
  • 多個子產品和進化樹的整合

通過plot.clonal.models可視化克隆進化模型一次性完成繪制變異簇、鐘形圖和克隆進化樹。

##把多個地塊和樹木畫在一起
plot.clonal.models(y,
                   # box plot parameters
                   box.plot = TRUE,
                   fancy.boxplot = TRUE,
                   fancy.variant.boxplot.highlight = 'is.driver',
                   fancy.variant.boxplot.highlight.shape = 21,
                   fancy.variant.boxplot.highlight.fill.color = 'red',
                   fancy.variant.boxplot.highlight.color = 'black',
                   fancy.variant.boxplot.highlight.note.col.name = 'gene',
                   fancy.variant.boxplot.highlight.note.color = 'blue',
                   fancy.variant.boxplot.highlight.note.size = 2,
                   fancy.variant.boxplot.jitter.alpha = 1,
                   fancy.variant.boxplot.jitter.center.color = 'grey50',
                   fancy.variant.boxplot.base_size = 12,
                   fancy.variant.boxplot.plot.margin = 1,
                   fancy.variant.boxplot.vaf.suffix = '.VAF',
                   # bell plot parameters
                   clone.shape = 'bell',
                   bell.event = TRUE,
                   bell.event.label.color = 'blue',
                   bell.event.label.angle = 60,
                   clone.time.step.scale = 1,
                   bell.curve.step = 2,
                   # node-based consensus tree parameters
                   merged.tree.plot = TRUE,
                   tree.node.label.split.character = NULL,
                   tree.node.shape = 'circle',
                   tree.node.size = 30,
                   tree.node.text.size = 0.5,
                   merged.tree.node.size.scale = 1.25,
                   merged.tree.node.text.size.scale = 2.5,
                   merged.tree.cell.frac.ci = FALSE,
                   # branch-based consensus tree parameters
                   merged.tree.clone.as.branch = TRUE,
                   mtcab.event.sep.char = ',',
                   mtcab.branch.text.size = 1,
                   mtcab.branch.width = 0.75,
                   mtcab.node.size = 3,
                   mtcab.node.label.size = 1,
                   mtcab.node.text.size = 1.5,
                   # cellular population parameters
                   cell.plot = TRUE,
                   num.cells = 100,
                   cell.border.size = 0.25,
                   cell.border.color = 'black',
                   clone.grouping = 'horizontal',
                   #meta-parameters
                   scale.monoclonal.cell.frac = TRUE,
                   show.score = FALSE,
                   cell.frac.ci = TRUE,
                   disable.cell.frac = FALSE,
                   # output figure parameters
                   out.dir = 'output',
                   out.format = 'pdf',
                   overwrite.output = TRUE,
                   width = 8,
                   height = 4,
                   # vector of width scales for each panel from left to right
                   panel.widths = c(3,4,2,4,2))
           
Topic 2.克隆進化之 ClonEvol

到此為止綜合性圖已完成,其中涉及的參數有些多,如果不是深入的了解其中的算法,建議預設既可以。

Reference:

Dang, H. X., White, B. S., Foltz, S. M., Miller, C. A., Luo, J., Fields, R. C., & Maher, C. A. (2017). ClonEvol: clonal ordering and visualization in cancer sequencing. Annals of Oncology, 28(12), 3076-3082.

繼續閱讀