TCGA生存分析

作者: Thinkando | 来源:发表于2017-12-10 18:38 被阅读563次

    本文重复《甜过初恋!这次是真的批量做TCGA的生存分析》, 作者果子大神。
    地址: https://mp.weixin.qq.com/s/fuB0bLyllL_33_Shz7rKnw

    1. 安装包

    # Load the bioconductor installer. 
    source("https://bioconductor.org/biocLite.R")
    options(BioC_mirror="https://mirrors.ustc.edu.cn/bioc/")
    # Install the main RTCGA package
    biocLite("RTCGA")
    # Install the clinical and mRNA gene expression data packages
    biocLite("RTCGA.clinical")
    biocLite("RTCGA.mRNA")
    
    • 加载包
    library(RTCGA)
    #了解数据
    infoTCGA <- infoTCGA() 
    # Create the clinical data
    library(RTCGA.clinical)
    clin <- survivalTCGA(BRCA.clinical) #到这里临床部分的信息已经获得啦
    
    • 看下数据类型和内容


      image.png

    2. 获得gene表达数据

    library(RTCGA.mRNA) #加载数据包
    class(BRCA.mRNA)  #查看数据类型发现是个数据框
    dim(BRCA.mRNA)  #看一下数据维度发现有590个样本,17815个基因
    BRCA.mRNA[1:5, 1:5] #看一下部分数据样子
    
    image.png
    • 挑选几个基因的表达数据出来,融合到生存的数据上去
    • 我们使用管道符号%>%,他的作用是 把前一个计算得到结果,作为第二个函数的参数
    library(dplyr)
    BRCA.mRNA %>% 
    # then make it a tibble (nice printing while debugging)
    as_tibble() %>% 
    # then get just a few genes,这里是测试用
    dplyr::select(bcr_patient_barcode, PAX8, GATA3, ESR1) %>% 
    # then trim the barcode (see head(clin), and substr)
    mutate(bcr_patient_barcode = substr(bcr_patient_barcode, 1, 12)) %>% 
    # then join back to clinical data
    inner_join(clin, by="bcr_patient_barcode") %>% exprSet 
    
    image.png

    3. 开始做生存分析

    library(survival)
    library(ggplot2)
    library(ggpubr)
    library(magrittr)
    library(survminer)
    
    • 对需要做生存分析的样本分组,把连续变量变成分类变量,这里选择测试的基因是GATA3
    group <- ifelse(exprSet$GATA3>median(exprSet$GATA3),'high','low')
    
    • 构建生存对象,并且进行数据处理
    sfit <- survfit(Surv(times, patient.vital_status)~group, data=exprSet)
    sfit
    summary(sfit)
    ggsurvplot(sfit, conf.int=F, pval=TRUE)
    
    image.png

    4. 批量数据做生存分析

    • 获得完整的表达量数据
    library(dplyr)
    exprSet <- BRCA.mRNA %>% 
      # then make it a tibble (nice printing while debugging)
      as_tibble() %>% 
      # then trim the barcode (see head(clin), and ?substr)
      mutate(bcr_patient_barcode = substr(bcr_patient_barcode, 1, 12)) %>% 
      # then join back to clinical data
      inner_join(clin, by="bcr_patient_barcode")
    
    • 构建生存对象my.surv
    library(survival)
    my.surv <- Surv(exprSet$times, exprSet$patient.vital_status)
    
    • 尝试使用并行运算提速
    library(parallel)
    #detectCores()检查当前电脑可用核数
    cl.cores <- detectCores()
    #makeCluster(cl.cores)使用刚才检测的核并行运算,我的电脑是8核
    cl <- makeCluster(8)
    #这是坑,parApply里面用到的函数以及变量都需要申明,不声明就必须用模块
    clusterExport(cl,c("exprSet","my.surv"))
    #length(names(esprSet))-2,为什么减去2,因为之前小规模测试时,我们知道最后两个是time和event,不是表达量
    
    #数据从25开始,原因是从2开始会报错,暂时无法解决,还有要注意是parApply,A要大写的
    log_rank_p <- parApply(cl,exprSet[,25:length(names(exprSet))-2],2,function(values){
      group=ifelse(values>median(na.omit(values)),'high','low')
      kmfit2 <- survival::survfit(my.surv~group,data=exprSet)
      #plot(kmfit2)
      data.survdiff=survival::survdiff(my.surv~group)
      p.val = 1 - pchisq(data.survdiff$chisq, length(data.survdiff$n) - 1)
    })
    stopCluster(cl)
    
    • 找出小于0.05的P.val
    log_rank_p <- log_rank_p[log_rank_p<0.05] 
    
    • 筛选后排序,并获得基因名
    gene_diff <- as.data.frame(sort(log_rank_p))
    
    找到2153个gene
    • 保存与读取数据
    save(gene_diff,file = "gene_df.Rda")
    load(file = "gene_df.Rda")
    
    • 找个基因看看效果
    library(survminer)
    group <- ifelse(exprSet$MAP3K2>median(exprSet$MAP3K2),'high','low')
    sfit <- survfit(Surv(times, patient.vital_status)~group, data=exprSet)
    ggsurvplot(sfit, conf.int=FALSE, pval=TRUE)
    
    image.png
    • 这些基因想看哪个就看哪个


    相关文章

      网友评论

        本文标题:TCGA生存分析

        本文链接:https://www.haomeiwen.com/subject/xhrfixtx.html