下面是《生信入门第6期》学员的分享
她上一个笔记是:学徒数据挖掘之谁说生存分析一定要按照表达量中位值或者平均值分组呢?
这次带来的是2个基因组合分群的生存分析,如下:
学徒作业,完成生存分析;
网址:http://molonc.bccrc.ca/aparicio-lab/research/metabric/
网址:https://ega-archive.org/dacs/EGAC00001000484
国际乳腺癌协会的分子分类数据库(Molecular Taxonomy of Breast Cancer International Consortium, METABRIC) 是一个加拿大-英国联合项目,旨在根据有助于确定最佳治疗过程的分子特征将乳腺肿瘤进一步分类。我们迄今为止已经根据肿瘤的基因指纹将乳腺癌重新分类为10个全新的类别。这些基因可以对乳腺癌生物学提供迫切需要的洞察力,使医生能够预测肿瘤是否会对某种特定的治疗产生反应。肿瘤是否有可能扩散到身体的其他部位,或者治疗后是否有可能复发。
来自维基百科
rm(list = ls())
library(cgdsr)
library(DT)
mycgds = CGDS("http://www.cbioportal.org/")
#test(mycgds)
setVerbose(mycgds, TRUE)
all_TCGA_studies = getCancerStudies(mycgds)
DT::datatable(all_TCGA_studies)
all_gen_pro = getGeneticProfiles(mycgds,'brca_metabric')
all_tables <- getCaseLists(mycgds,'brca_metabric')
# 获得两种基因的表达水平
my_dataset <- 'brca_metabric_mrna'
my_table <- "brca_metabric_mrna"
exp <- getProfileData(mycgds, c("BCL11A","MBNL1"), my_dataset, my_table)
exp$patient=rownames(exp)
# 获得临床信息
cli_dat = getClinicalData(mycgds,my_table)
myclinicaldata = cli_dat
DT::datatable(myclinicaldata,
extensions = 'FixedColumns',
options = list( #dom = 't',
scrollX = TRUE,
fixedColumns = TRUE
))
colnames(myclinicaldata)
cli_dat=myclinicaldata[,c("OS_MONTHS","VITAL_STATUS")]
cli_dat$patient=rownames(myclinicaldata)
# 融合两种数据并微调
tmp=merge(exp,cli_dat,by="patient")
tmp=na.omit(tmp)
colnames(tmp)[4]="DSS.time"
colnames(tmp)[5]="DSS"
tmp$DSS=ifelse(tmp$DSS=="Died of Disease",1,0)
tmp$DSS.time=tmp$DSS.time*30
library(survminer)
# 找到合适的“高低表达量”的定义,高于cut,就是高表达
tmp.cut <- surv_cutpoint(
tmp,
time = "DSS.time",
event = "DSS",
variables = c("BCL11A", "MBNL1")
)
summary(tmp.cut)
plot(tmp.cut, "BCL11A", palette = "npg")
# 将数字的表达信息根据粗体转化为high or low的二元信息
tmp.cat <- surv_categorize(tmp.cut)
head(tmp.cat)
library(survival)
# 常规的画法
fit <- survfit(Surv(DSS.time, DSS) ~ BCL11A + MBNL1,data = tmp.cat)
ggsurvplot(
fit,
pval = TRUE,
conf.int = FALSE,
title = 'METABRIC',
xlim = c(0,10000),
break.time.by = 2000,
ggtheme = theme_RTCGA(),
risk.table.y.text.col = T,
risk.table.y.text = FALSE
)
group <- ifelse(tmp$BCL11A>median(tmp$BCL11A)&tmp$MBNL1<median(tmp$MBNL1),'Bh-ML',
ifelse(tmp$BCL11A<median(tmp$BCL11A)&tmp$MBNL1>median(tmp$MBNL1),'BL-Mh',
ifelse(tmp$BCL11A>median(tmp$BCL11A)&tmp$MBNL1>median(tmp$MBNL1),'intermediate','intermediate')))
tmp[,'BCL11A'] = scale(as.numeric(tmp[,'BCL11A']))
tmp[,'MBNL1'] = scale(as.numeric(tmp[,'MBNL1']))
group <- ifelse(tmp$BCL11A>0&tmp$MBNL1< 0,'Bh-ML',
ifelse(tmp$BCL11A< 0&tmp$MBNL1> 0,'BL-Mh',
ifelse((tmp$BCL11A> 0&tmp$MBNL1>0)&(tmp$BCL11A< 0&tmp$MBNL1< 0),'intermediate','intermediate')))
table(group)
这个分组有点接近原文了,Samples (all subtypes) were divided into BCL11A High + MBNL1 Low (n=148), BCL11A Low + MBNL1,High (n=345) or Intermediate (n=1478).那就这样吧
最后做出来的图就是上面这样了。需要找准分组的cutoff,关乎着你是否能重现文中的图表。
当然对于我而言,任务重要的是探索的过程,当然这句话Jimmy大大也经常说,教给你的不是现成的知识,而是你搜索记住的信息。授人以鱼不如授人以渔,棒!!!