hahahueg 2023-03-01 10:27 采纳率: 87.5%
浏览 47
已结题

tcga数据预后分析

预后分析,这个for循环一下就运行完成了,但是需要的输出文件都没有


library(survival)
library(caret)
library(glmnet)
library(survminer)
library(timeROC)

setwd("/Users/apple/Desktop/27.model")      #???ù???Ŀ¼
rt=read.table("uniSigExpTime.txt", header=T, sep="\t", check.names=F, row.names=1)     #??ȡ?????ļ?
rt$futime[rt$futime<=0]=0.003

#?????ݽ??з???, ????ģ??
n=1     #????????Ŀ
for(i in 1:n){
    #############?????ݽ??з???#############
    inTrain<-createDataPartition(y=rt[,2], p=0.5, list=F)
    train<-rt[inTrain,]
    test<-rt[-inTrain,]
    trainOut=cbind(id=row.names(train),train)
    testOut=cbind(id=row.names(test),test)
    
    #lasso?ع?????
    x=as.matrix(train[,c(3:ncol(train))])
    y=data.matrix(Surv(train$futime,train$fustat))
    fit <- glmnet(x, y, family = "cox", maxit = 1000)
    cvfit <- cv.glmnet(x, y, family="cox", maxit = 1000)
    coef <- coef(fit, s = cvfit$lambda.min)
    index <- which(coef != 0)
    actCoef <- coef[index]
    lassoGene=row.names(coef)[index]
    lassoSigExp=train[,c("futime", "fustat", lassoGene)]
    lassoSigExpOut=cbind(id=row.names(lassoSigExp), lassoSigExp)
    geneCoef=cbind(Gene=lassoGene, Coef=actCoef)
    if(nrow(geneCoef)<2){next}
    
    #############????COXģ??#############
    multiCox <- coxph(Surv(futime, fustat) ~ ., data = lassoSigExp)
    multiCox=step(multiCox,direction = "both")
    multiCoxSum=summary(multiCox)
    
    #????ģ?͵Ĺ?ʽ
    outMultiTab=data.frame()
    outMultiTab=cbind(
                       coef=multiCoxSum$coefficients[,"coef"],
                       HR=multiCoxSum$conf.int[,"exp(coef)"],
                       HR.95L=multiCoxSum$conf.int[,"lower .95"],
                       HR.95H=multiCoxSum$conf.int[,"upper .95"],
                       pvalue=multiCoxSum$coefficients[,"Pr(>|z|)"])
    outMultiTab=cbind(id=row.names(outMultiTab),outMultiTab)
    outMultiTab=outMultiTab[,1:2]
    
    #????train???????ļ?
    riskScore=predict(multiCox,type="risk",newdata=train)      #????train?õ?ģ??Ԥ??train??Ʒ????
    coxGene=rownames(multiCoxSum$coefficients)
    coxGene=gsub("`","",coxGene)
    outCol=c("futime","fustat",coxGene)
    medianTrainRisk=median(riskScore)
    risk=as.vector(ifelse(riskScore>medianTrainRisk,"high","low"))
    trainRiskOut=cbind(id=rownames(cbind(train[,outCol],riskScore,risk)),cbind(train[,outCol],riskScore,risk))
        
    #????test???????ļ?
    riskScoreTest=predict(multiCox,type="risk",newdata=test)     #????train?õ?ģ??Ԥ??test??Ʒ????
    riskTest=as.vector(ifelse(riskScoreTest>medianTrainRisk,"high","low"))
    testRiskOut=cbind(id=rownames(cbind(test[,outCol],riskScoreTest,riskTest)),cbind(test[,outCol],riskScore=riskScoreTest,risk=riskTest))
    
    #????train????test???иߵͷ???????????????pvalue    
    diff=survdiff(Surv(futime, fustat) ~risk,data = train)
    pValue=1-pchisq(diff$chisq, df=1)
    diffTest=survdiff(Surv(futime, fustat) ~riskTest,data = test)
    pValueTest=1-pchisq(diffTest$chisq, df=1)

    #ROC??????????
    predictTime=3    #Ԥ????ʱ??
    roc=timeROC(T=train$futime, delta=train$fustat,
                marker=riskScore, cause=1,
                times=c(predictTime), ROC=TRUE)
    rocTest=timeROC(T=test$futime, delta=test$fustat,
                marker=riskScoreTest, cause=1,
                times=c(predictTime), ROC=TRUE)    
    
    if((pValue<0.01) & (roc$AUC[2]>0.68) & (pValueTest<0.05) & (rocTest$AUC[2]>0.65)){
        #????????????
        write.table(trainOut,file="data.train.txt",sep="\t",quote=F,row.names=F)
        write.table(testOut,file="data.test.txt",sep="\t",quote=F,row.names=F)
        #lasso????
        write.table(lassoSigExpOut,file="lasso.SigExp.txt",sep="\t",row.names=F,quote=F)
        pdf("lasso.lambda.pdf")
        plot(fit, xvar = "lambda", label = TRUE)
        dev.off()
        pdf("lasso.cvfit.pdf")
        plot(cvfit)
        abline(v=log(c(cvfit$lambda.min,cvfit$lambda.1se)), lty="dashed")
        dev.off()
        #?????????ؽ???
        write.table(outMultiTab,file="multiCox.txt",sep="\t",row.names=F,quote=F)
        write.table(trainRiskOut,file="risk.train.txt",sep="\t",quote=F,row.names=F)
        write.table(testRiskOut,file="risk.test.txt",sep="\t",quote=F,row.names=F)
        #??????Ʒ?ķ????ļ?
        allRiskOut=rbind(trainRiskOut, testRiskOut)
        write.table(allRiskOut,file="risk.all.txt",sep="\t",quote=F,row.names=F)
        break
    }
}


  • 写回答

1条回答 默认 最新

  • Bioinfo Guy R语言领域新星创作者 2023-03-01 10:48
    关注

    一眼光俊,这个出结果是有条件的(pValue<0.01) & (roc$AUC[2]>0.68) & (pValueTest<0.05) & (rocTest$AUC[2]>0.65),说明循环内均不满足,要么放松p值,auc或者删了这个if条件运行

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月9日
  • 已采纳回答 3月1日
  • 创建了问题 3月1日

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么