如何找到somatic的突变信息的maf文件,仍然是从UCSC的XENA浏览器里面选择NSCLC的里面的LUAD数据集即可,这个是网页里面的鼠标点击操作。值得注意的是网页里面关于同一个癌症有两个跳转链接哦(其中一个带有GDC的前缀):
首先可以看到不带GDC前缀的链接里面的突变主要是来源于mc3计划:
MC3(Multi-Center Mutation Calling in Multiple Cancers)计划则是TCGA(The Cancer Genome Atlas)项目中的一个子项目,专注于对多个癌症类型进行突变信息的分析和整理。以下是MC3计划的主要特点和工作内容:
有意思的是我读取这个MC3突变信息,发现本次作业涉及到的基因是没有的:
mut= data.table::fread('input/mc3_gene_level_LUAD_mc3_gene_level.txt.gz',data.table = F)
mut[1:4,1:4]
mut[mut$sample == 'STK11',]
mut[mut$sample == 'LKB1',]
> mut[1:4,1:4]
sample TCGA-05-4244-01 TCGA-05-4249-01 TCGA-05-4250-01
1 UBE2Q2 0 0 0
2 CHMP1B 0 0 0
3 PSMA2P1 0 0 0
4 SHQ1P1 0 0 0
> mut$sample[which.max(rowSums(mut[,-1]))]
[1] "TP53"
大概率是因为这个MC3计划过于严格,过滤了绝大部分基因。不过突变病人数量最多的仍然是TP53基因,说明这个MC3信息本身是值得信赖的。
其次可以看到那个带GDC的链接进去就有4个不同的软件产出的somatic突变信息,如下所示 :

4个不同的软件
我在生信技能树发布的很多 找somatic mutation教程大概率是都过时了,如下:
毕竟是六年多过去了,然后在最新最全的mutect2教程,提到了其实大家不必在一棵树上吊死,而且如果是TCGA这样的公共数据集大概率是不需要自己从零开始处理fq文件后拿到somatic mutation信息。
直接下载即可,比如这个时候我们测试了muse这个软件的结果文件;
mut= data.table::fread('input/TCGA-LUAD.muse_snv.tsv.gz',data.table = F)
mut[1:4,1:4]
# somatic,4个软件,交集很少。。。
# 样品采集,送样,测序,到软件,参数,玄学。。。。
# maftools
mutSid = mut$Sample_ID[mut$gene=='STK11']
head(mutSid)
> mut[1:4,1:4]
Sample_ID gene chrom start
1 TCGA-35-4122-01A AGRN chr1 1046540
2 TCGA-35-4122-01A PRDM16 chr1 3412324
3 TCGA-35-4122-01A PRAMEF11 chr1 12825031
4 TCGA-35-4122-01A PRAMEF20 chr1 13418296
> head(mutSid)
[1] "TCGA-44-7669-01A" "TCGA-44-7671-01A"
可以看到的是已经是可以获取到那些有STK11基因突变的肺癌患者的id啦。
仍然是从UCSC的XENA浏览器里面选择NSCLC的里面的LUAD数据集即可,值得注意的是选择带gdc前缀的哦,如下所示:
其实也是可以根据上面的网页链接的规律去获取所有的其它癌症的下载链接啦,然后就是读取TCGA-LUAD.htseq_counts.tsv.gz文件后的简单的处理,代码如下所示:
# 魔幻操作,一键清空
rm(list = ls())
options(stringsAsFactors = F)
library(data.table)
a1=fread( 'TCGA-LUAD.htseq_counts.tsv.gz' ,
data.table = F)
mat= a1[,2:ncol(a1)]
mat=mat[1:(nrow(a1)-4),]
ensembl_matrix=ceiling(2^(mat)-1) #log2(x+1) transformed.
rownames(ensembl_matrix) = gsub('[.][0-9]+','',a1$Ensembl_ID[1:(nrow(a1)-4)])
library(AnnoProbe)
ids=annoGene(rownames(ensembl_matrix),'ENSEMBL','human')
ids=ids[!duplicated(ids$SYMBOL),]
ids=ids[!duplicated(ids$ENSEMBL),]
symbol_matrix= ensembl_matrix[match(ids$ENSEMBL,
rownames(ensembl_matrix)),]
rownames(symbol_matrix) = ids$SYMBOL
save(symbol_matrix,file = 'symbol_matrix.Rdata')
需要根据突变信息对上面的表达量矩阵进行分组,所以是:
rm(list = ls())
library(data.table)
load(file = 'input/symbol_matrix.Rdata')
group_list=ifelse(substring(colnames(symbol_matrix),14,15)=='11',
'control','case' )
table(group_list)
group_list = factor(group_list,levels = c('control','case' ))
symbol_matrix=symbol_matrix[,group_list=='case']
kp= !colnames(symbol_matrix) %in% unique(substring(mut$Sample_ID,1,15))
table(kp)
symbol_matrix=symbol_matrix[,kp]
group_list = ifelse(colnames(symbol_matrix) %in% mutSid,'case','control')
table(group_list)
save(symbol_matrix,group_list,file = 'symbol_matrix.Rdata')
有了表达量矩阵和分组信息,差异分析就是常规代码即可:
exprSet = symbol_matrix
(colData <- data.frame(row.names=colnames(exprSet),
group_list=group_list) )
dds <- DESeqDataSetFromMatrix(countData = exprSet,
colData = colData,
design = ~ group_list)
dds <- DESeq(dds)
res <- results(dds,
contrast=c("group_list",
levels(group_list)[2],
levels(group_list)[1]))
resOrdered <- res[order(res$padj),]
head(resOrdered)
DEG =as.data.frame(resOrdered)
DEG_deseq2 = na.omit(DEG)
save(DEG_deseq2,
file = 'DEG_deseq2.Rdata' )
大家赶快使用上面的代码去测试一下其它癌症吧,任意癌症的任意基因突变与否分组都可以。
下面的网页链接里面的癌症的缩略词替换即可访问任意癌症的突变全景图:
但是突变本身有很多不同的概念,germline和somatic,snv和indel,而且snv还根据是否影响蛋白质细分很多不同肿瘤。