美文网首页生信基础信息学习生信学习
TCGA Cox模型-训练集、内部验证集、外部验证集综合构建Co

TCGA Cox模型-训练集、内部验证集、外部验证集综合构建Co

作者: 误入BioInfor的大黄鸭 | 来源:发表于2021-11-13 01:53 被阅读0次

    前面我们已经进行了单因素Cox回归,LASSO回归及多因素Cox回归建模,而我们想对建好的模型进行验证,本例通过内部验证组和外部验证组对Cox模型进行内部验证和外部验证,并对模型进行可视化。

    7.内部验证组和外部验证组进行模型验证

    
    #test1组的基因表达矩阵
    test1GeneExp=test1[,CoxGenes]
    
    #求test1组的风险值
    Test1RiskScore=apply(test1GeneExp,1,riskFun)
    
    #以中位值分为高风险组和低风险组
    riskTest1=as.vector(ifelse(Test1RiskScore>TrainRiskMedian,"high","low"))
    
    #构建生存分析模型
    diffTest1=survdiff(Surv(time, status) ~riskTest1,data = test1)
    
    #计算p值
    Test1PValue=1-pchisq(diffTest1$chisq,df=1)
    
    #做ROC分析
    Test1ROC = survivalROC(Stime=test1$time, status=test1$status, marker = Test1RiskScore, predict.time =1,  method="KM")
    
    #test2组的基因表达矩阵
    test2GeneExp=test2[,CoxGenes]
    
    #求test2组的风险值
    Test2RiskScore=apply(test2GeneExp,1,riskFun)
    
    #以中位值分为高风险组和低风险组
    riskTest2=as.vector(ifelse(Test2RiskScore>TrainRiskMedian,"high","low"))
    
    #构建生存分析模型
    diffTest2=survdiff(Surv(time, status) ~riskTest2,data = test2)
    
    #计算p值
    Test2PValue=1-pchisq(diffTest2$chisq,df=1)
    
    #做ROC分析
    Test2ROC = survivalROC(Stime=test2$time, status=test1$status, marker = Test2RiskScore, predict.time =1,  method="KM")
    
    

    8.输出结果文件

    
    #判断p值和AUC值是否达到最低标准,一般p小于0.05且AUC大于0.65都是比较好的标准
    if((TrainPValue<0.05) & (TrainROC$AUC>0.65) & (Test1PValue<0.05) & (Test1ROC$AUC>0.65) & (Test2PValue<0.05) & (Test2ROC$AUC>0.65)){
    
    #输出分组的基因表达矩阵
    trainExp=cbind(ID=row.names(trainGeneExp),trainGeneExp)
    test1Exp=cbind(ID=row.names(test1GeneExp),test1GeneExp)
    write.table(trainExp1,file="train_exp_time.txt",sep="\t",quote=F,row.names=F)
    write.table(testExp1,file="test1_exp_time.txt",sep="\t",quote=F,row.names=F)
    #这里讲下输出sep="\t"表示以空格分隔,quote=F表示输出的列名不用加双引号,row.name=F表示不输出行名,这里我们说一下,为什么都有了行名,cbind(ID=row.names(trainGeneExp),trainGeneExp)在这里我们还用cbind个行名到表格里,是因为如果用R给的方法输出行名,你就会发现,在用Excel打开txt文件的时候,列名会对不上列,因此我们自造行名,不用write.table函数自带的输出行名的功能
    
    #输出单因素Cox结果
    write.table(SingleCoxOut,file="SingleCoxOut.txt",sep="\t",quote=F,row.names=F)
    
    #输出lasso回归结果
    #绘制lambda图
    pdf(file="lambda.pdf")
    plot(r1, xvar = "lambda", label = TRUE)
    dev.off()
    #绘制交叉验证图
    pdf(file="cvfit.pdf")
    plot(cvr2)
    abline(v=log(c(cvr2$lambda.min,cvr2$lambda.1se)),lty="dashed")   #画出均方误差最小时的lambda值和距离均方误差最小时一个标准误的lambda值(非常拗口)
    dev.off()
    
    #输出多因素结果(这里也需要cbind,单独定一列行名,前面有讲过原因)
    MultiCoxOut=cbind(ID=rownames(MultiCoxOut),MultiCoxOut)
    write.table(MultiCoxOut,file="MultiCox.txt",sep="\t",quote=F,row.names=F)
    #输出风险结果,需要用到前面的基因表达矩阵,高低风险分组信息
    TrainRiskOut =cbind(trainGeneExp,riskTrain))
    TrainRiskOut=cbind(ID=rownames(TrainRiskOut),TrainRiskOut)
    write.table(TrainRiskOut,file="TrainRisk.txt",sep="\t",quote=F,row.names=F)
    Test1rainRiskOut =cbind(test1GeneExp,riskTest1))
    Test1rainRiskOut=cbind(ID=rownames(Test1RiskOut),Test1RiskOut)
    write.table(Test1RiskOut,file="Test1Risk.txt",sep="\t",quote=F,row.names=F)
    Test2rainRiskOut =cbind(test2GeneExp,riskTest2))
    Test2rainRiskOut=cbind(ID=rownames(Test2RiskOut),Test2RiskOut)
    write.table(Test2RiskOut,file="Test2Risk.txt",sep="\t",quote=F,row.names=F)
    
    #如果结果已经满足了,就退出循环了
    break
    
    }
    

    可视化部分之后更新,本教程到这里就结束啦,欢迎大家关注支持~误入BioInfor的大黄鸭,回复“TCGACox”获取完整版的代码

    相关文章

      网友评论

        本文标题:TCGA Cox模型-训练集、内部验证集、外部验证集综合构建Co

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