TCGA泛癌TMB計算

在前面系列教程中分享了如何下載TCGA表達矩陣(2022新版TCGA數(shù)據(jù)下載與整理)帮碰,通過R進行數(shù)據(jù)合并就能得到TCGA泛癌表達矩陣了市埋。有時候需要分析基因表達與TMB之間的相關性,就會涉及到TCGA突變數(shù)據(jù)下載和TMB計算灵迫。TCGA突變數(shù)據(jù)maf以前可以直接在TCGA下載浑劳,也可以用TCGAbiolinks包的GDCquery_Maf函數(shù)下載秋泄,后來TCGA不讓下載了琐馆,TCGAbiolinks的GDCquery_Maf函數(shù)在新版本里面也被拋棄了。但是TCGAbiolinks包的作者提供了替代方案恒序,具體見TCGAbiolinks: Searching, downloading and visualizing mutation files瘦麸,作者提供了hg38和hg19兩個版本的下載方法,以hg38的TCGA-CHOL為例:

library("TCGAbiolinks")
query <- GDCquery(
    project = "TCGA-CHOL", 
    data.category = "Simple Nucleotide Variation", 
    access = "open", 
    legacy = FALSE, 
    data.type = "Masked Somatic Mutation", 
    workflow.type = "Aliquot Ensemble Somatic Variant Merging and Masking"
)
GDCdownload(query)
maf <- GDCprepare(query)

得到的maf就可以用于后續(xù)TMB計算了歧胁,TMB的計算參考這個鏈接(TCGA 數(shù)據(jù)分析實戰(zhàn) —— TMB 與免疫浸潤聯(lián)合分析):

get_TMB <- function(file) {
  # 需要用到的列
  use_cols <- c(
    "Hugo_Symbol", "Variant_Classification", "Tumor_Sample_Barcode", 
    "HGVSc", "t_depth", "t_alt_count"
  )
  # 刪除這些突變類型
  mut_type <- c(
    "5'UTR", "3'UTR", "3'Flank", "5'Flank", "Intron", "IGR",
    "Silent", "RNA", "Splice_Region"
  )
  # 讀取文件
  df <- read_csv(file, col_select = use_cols)
  data <- df %>% subset(!Variant_Classification %in% mut_type) %>%
    # 計算 VAF
    mutate(vaf = t_alt_count / t_depth) %>%
    group_by(Tumor_Sample_Barcode) %>%
    summarise(mut_num = n(), TMB = mut_num / 30, MaxVAF = max(vaf))
  return(data)
}

為了得到泛癌的TMB數(shù)據(jù)滋饲,我將代碼寫成循環(huán),并稍微做了些調整喊巍。

rm(list=ls())
library(TCGAbiolinks)
library(dplyr)
library(stringr)
projects <- getGDCprojects()$project_id
projects <- projects[grepl('^TCGA', projects, perl=TRUE)]
projects <- projects[order(projects)]

pan_TMB=list()
for (project in projects){
  query <- GDCquery(
    project = project, 
    data.category = "Simple Nucleotide Variation", 
    access = "open", 
    legacy = FALSE, 
    data.type = "Masked Somatic Mutation", 
    workflow.type = "Aliquot Ensemble Somatic Variant Merging and Masking"
  )
  GDCdownload(query)
  maf <- GDCprepare(query)
  
  ## TMB calculation
  # Code Reference https://zhuanlan.zhihu.com/p/394609586
get_TMB <- function(file) {
  use_cols <- c("Hugo_Symbol", "Variant_Classification", "Tumor_Sample_Barcode", 
                  "HGVSc", "t_depth", "t_alt_count")
  # 刪除這些突變類型
  mut_type <- c("5'UTR", "3'UTR", "3'Flank", "5'Flank", "Intron", "IGR",
                  "Silent", "RNA", "Splice_Region")
  # 讀取文件
  df <- select(file, use_cols)
  data <- df %>% subset(!Variant_Classification %in% mut_type) %>%
  # 計算 VAF
    mutate(vaf = t_alt_count / t_depth) %>%
    group_by(Tumor_Sample_Barcode) %>%
    summarise(mut_num = n(), TMB = mut_num / 30, MaxVAF = max(vaf))
  return(data)
  }
  
  pan_TMB[[project]]=get_TMB(maf)
}

pan_TMB=do.call(rbind,pan_TMB)
pan_TMB$Cancer=str_split(rownames(pan_TMB),'-',simplify = T)[,2]
pan_TMB$Cancer=str_split(pan_TMB$Cancer,'[.]',simplify = T)[,1]
pan_TMB$Tumor_Sample_Barcode=str_sub(pan_TMB$Tumor_Sample_Barcode,1,16)
pan_TMB=pan_TMB[,c(5,1,3)]
colnames(pan_TMB)=c("Cancer","ID","TMB")
save(pan_TMB,file="pan_TMB.Rdata")

但是在循環(huán)到TCGA-MESO環(huán)節(jié)屠缭,總是會報"Error: Failure to retrieve index 140/0",然后R就重啟了崭参。沒辦法呵曹,把TCGA-MESO單獨出來,再合并阵翎。中間處理TCGA-MESO時在用maftools的read.maf時也有報錯"Error in read.maf(x, isTCGA = TRUE) : No non-synonymous mutations found Check vc_nonSyn`` argumet inread.maffor details"逢并,后來按照Github上的方法直接讀入表格([No non-synonymous mutations found Check vc_nonSyn argumet in read.maf for details #838](https://github.com/PoisonAlien/maftools/issues/838)

最終代碼如下:

rm(list=ls())
library(TCGAbiolinks)
library(dplyr)
library(stringr)
projects <- getGDCprojects()$project_id
projects <- projects[grepl('^TCGA', projects, perl=TRUE)]
projects <- projects[order(projects)]
projects=projects[-19]
pan_TMB=list()
for (project in projects){
  query <- GDCquery(
    project = project, 
    data.category = "Simple Nucleotide Variation", 
    access = "open", 
    legacy = FALSE, 
    data.type = "Masked Somatic Mutation", 
    workflow.type = "Aliquot Ensemble Somatic Variant Merging and Masking"
  )
  GDCdownload(query)
  maf <- GDCprepare(query)
  
  ## TMB calculation
  # Code Reference https://zhuanlan.zhihu.com/p/394609586
  get_TMB <- function(file) {
    use_cols <- c("Hugo_Symbol", "Variant_Classification", "Tumor_Sample_Barcode", 
                  "HGVSc", "t_depth", "t_alt_count")
    # 刪除這些突變類型
    mut_type <- c("5'UTR", "3'UTR", "3'Flank", "5'Flank", "Intron", "IGR",
                  "Silent", "RNA", "Splice_Region")
    # 讀取文件
    df <- select(file, use_cols)
    data <- df %>% subset(!Variant_Classification %in% mut_type) %>%
      # 計算 VAF
      mutate(vaf = t_alt_count / t_depth) %>%
      group_by(Tumor_Sample_Barcode) %>%
      summarise(mut_num = n(), TMB = mut_num / 30, MaxVAF = max(vaf))
    return(data)
  }
  
  pan_TMB[[project]]=get_TMB(maf)
}

# For TCGA-MESO
query <- GDCquery(
  project = "TCGA-MESO", 
  data.category = "Simple Nucleotide Variation", 
  access = "open", 
  legacy = FALSE, 
  data.type = "Masked Somatic Mutation", 
  workflow.type = "Aliquot Ensemble Somatic Variant Merging and Masking"
)
GDCdownload(query)

# Reference:https://github.com/PoisonAlien/maftools/issues/838
mafFilePath2 = dir(path = "GDCdata/TCGA-MESO",pattern = "masked.maf.gz$",full.names = T,recursive=T) 
TCGA_MESO = lapply(mafFilePath2, data.table::fread, skip = "Hugo_Symbol")
TCGA_MESO = data.table::rbindlist(l = TCGA_MESO, use.names = TRUE, fill = TRUE)
pan_TMB[["TCGA-MESO"]]=get_TMB(TCGA_MESO)

pan_TMB=do.call(rbind,pan_TMB)
pan_TMB$Cancer=str_split(rownames(pan_TMB),'-',simplify = T)[,2]
pan_TMB$Cancer=str_split(pan_TMB$Cancer,'[.]',simplify = T)[,1]
pan_TMB$Tumor_Sample_Barcode=str_sub(pan_TMB$Tumor_Sample_Barcode,1,16)
pan_TMB=pan_TMB[,c(5,1,3)]
colnames(pan_TMB)=c("Cancer","ID","TMB")
pan_TMB$TMB=round(pan_TMB$TMB,1) # 保留一位小數(shù)
pan_TMB=pan_TMB[order(pan_TMB$Cancer),]
save(pan_TMB,file="pan_TMB.Rdata")

最終數(shù)據(jù)如下:


image.png

查看下每個腫瘤的突變情況。

table(pan_TMB$Cancer)

# ACC BLCA BRCA CESC CHOL COAD DLBC ESCA  GBM HNSC KICH KIRC KIRP LAML  LGG LIHC LUAD LUSC MESO   OV PAAD PCPG 
# 90  414  986  289   51  454   47  184  461  510   66  357  282  128  521  371  616  544   78  462  170  182 
# PRAD READ SARC SKCM STAD TGCT THCA THYM UCEC  UCS  UVM 
 # 493  161  238  469  431  146  494  121  518   57   80 

通過ID可以和TCGA表達矩陣合并郭卫,再根據(jù)TCGA基因與免疫評分帶側邊密度圖的相關性點圖的方法 就可以進行TMB與基因表達相關性分析了。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末背稼,一起剝皮案震驚了整個濱河市贰军,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖词疼,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件俯树,死亡現(xiàn)場離奇詭異,居然都是意外死亡贰盗,警方通過查閱死者的電腦和手機许饿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來舵盈,“玉大人陋率,你說我怎么就攤上這事』嗤恚” “怎么了瓦糟?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長赴蝇。 經(jīng)常有香客問我菩浙,道長,這世上最難降的妖魔是什么句伶? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任劲蜻,我火速辦了婚禮,結果婚禮上考余,老公的妹妹穿的比我還像新娘先嬉。我一直安慰自己,他們只是感情好秃殉,可當我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布坝初。 她就那樣靜靜地躺著,像睡著了一般钾军。 火紅的嫁衣襯著肌膚如雪鳄袍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天吏恭,我揣著相機與錄音拗小,去河邊找鬼。 笑死樱哼,一個胖子當著我的面吹牛哀九,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播搅幅,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼阅束,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了茄唐?” 一聲冷哼從身側響起息裸,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后呼盆,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體年扩,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年访圃,在試婚紗的時候發(fā)現(xiàn)自己被綠了厨幻。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡腿时,死狀恐怖况脆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情圈匆,我是刑警寧澤漠另,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站跃赚,受9級特大地震影響笆搓,放射性物質發(fā)生泄漏。R本人自食惡果不足惜纬傲,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一满败、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧叹括,春花似錦算墨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至侠讯,卻和暖如春挖藏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背厢漩。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工膜眠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人溜嗜。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓宵膨,卻偏偏與公主長得像,于是被迫代替她去往敵國和親炸宵。 傳聞我的和親對象是個殘疾皇子辟躏,可洞房花燭夜當晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容