#DEGs
library("edgeR")
library("openxlsx")
rt <- read.table("mRNA.txt",header = T, sep = "\t",check.names = F)

foldChange=1
padj=0.05


rt=as.matrix(rt)
rownames(rt)=rt[,1]
exp=rt[,2:ncol(rt)]
dimnames=list(rownames(exp),colnames(exp))
data=matrix(as.numeric(as.matrix(exp)),nrow=nrow(exp),dimnames=dimnames)
data <- na.omit(data)
data=avereps(data)
data=data[rowMeans(data)>1,]

#group=c("normal","tumor","tumor","normal","tumor")
group=c(rep("normal" , as.numeric(table(substr(colnames(rt),start = 14,stop = 14))[3])),
        rep("tumor" , as.numeric(table(substr(colnames(rt),start = 14,stop = 14))[2])))                       
tadesign <- model.matrix(~group)
y <- DGEList(counts=data,group=group)
y <- calcNormFactors(y)
y <- estimateCommonDisp(y)
y <- estimateTagwiseDisp(y)
et <- exactTest(y,pair = c("normal","tumor"))
topTags(et)
ordered_tags <- topTags(et, n=100000)

allDiff=ordered_tags$table
allDiff=allDiff[is.na(allDiff$FDR)==FALSE,]
diff=allDiff
newData=y$pseudo.counts
diff <- data.frame( id = rownames(diff),diff)
write.xlsx(diff,file="edgerOut.xlsx",colNames = T)
diffSig = diff[(diff$FDR < padj & (diff$logFC>foldChange | diff$logFC<(-foldChange))),]
write.xlsx(diffSig, file="diffSig.xlsx",colNames = T)
diffUp = diff[(diff$FDR < padj & (diff$logFC>foldChange)),]
write.xlsx(diffUp, file="up.xlsx",colNames = T)
diffDown = diff[(diff$FDR < padj & (diff$logFC<(-foldChange))),]
write.xlsx(diffDown, file="down.xlsx",colNames = T)

normalizeExp=rbind(id=colnames(newData),newData)
write.table(normalizeExp,file="normalizeExp.txt",sep="\t",quote=F,col.names=F)   
diffExp=rbind(id=colnames(newData),newData[rownames(diffSig),])
write.table(diffExp,file="diffmRNAExp.txt",sep="\t",quote=F,col.names=F)       
heatmapData <- newData[rownames(diffSig),]





library(survival)
pFilter=0.05                                                     
rt <- read.table("sur_expr_DM.txt",header=T,sep="\t",check.names=F,row.names=1) 
rt[,3:ncol(rt)] <- log2(rt[,3:ncol(rt)]+0.01)


outTab=data.frame()
sigGenes=c("futime","fustat")
for(i in colnames(rt[,3:ncol(rt)])){
 cox <- coxph(Surv(futime, fustat) ~ rt[,i], data = rt)
 coxSummary = summary(cox)
 coxP=coxSummary$coefficients[,"Pr(>|z|)"]
 if(coxP<pFilter){
     sigGenes=c(sigGenes,i)
		 outTab=rbind(outTab,
		              cbind(id=i,
		              HR=coxSummary$conf.int[,"exp(coef)"],
		              HR.95L=coxSummary$conf.int[,"lower .95"],
		              HR.95H=coxSummary$conf.int[,"upper .95"],
		              pvalue=coxSummary$coefficients[,"Pr(>|z|)"])
		              )
  }
}
write.table(outTab,file="uniCox.txt",sep="\t",row.names=F,quote=F)
uniSigExp=rt[,sigGenes]
uniSigExp=cbind(id=row.names(uniSigExp),uniSigExp)
write.table(uniSigExp,file="uniSigExp.txt",sep="\t",row.names=F,quote=F)
#####################################################lasso#######################################

library("glmnet")
library("survival")
rt=read.table("uniSigExp.txt",header=T,sep="\t",row.names=1,check.names=FALSE)
x=as.matrix(rt[ , c(3:ncol(rt))])
y=data.matrix(Surv(rt$futime, rt$fustat))

fit <- glmnet(x, y, family = "cox", maxit = 1000)

pdf("lambda.pdf")
plot(fit, xvar = "lambda", label = TRUE)
abline(v=c(fit$lambda.min,fit$lambda.1se),lty="dashed")
dev.off()

cvfit <- cv.glmnet(x, y, family="cox", maxit = 1000)
pdf("cvfit.pdf")
plot(cvfit)
abline(v=log(c(cvfit$lambda.min,cvfit$lambda.1se)),lty="dashed")
dev.off()

coef <- coef(fit, s = cvfit$lambda.min)
index <- which(coef != 0)
actCoef <- coef[index]
lassoGene=row.names(coef)[index]
geneCoef=cbind(Gene=lassoGene,Coef=actCoef)
write.table(geneCoef,file="geneCoef.txt",sep="\t",quote=F,row.names=F)
################################################multicox#####################################
library(survival)
library(survminer)
rt=read.table("uniSigExp.txt",header=T,sep="\t",check.names=F,row.names=1)   
st <- read.table("geneCoef.txt",header=T,sep="\t",check.names=F)
gene <- st$Gene
rt <- cbind(rt[,c(1,2)],rt[,gene])

multiCox=coxph(Surv(futime, fustat) ~ ., data = rt)
multiCox=step(multiCox,direction = "both")
multiCoxSum=summary(multiCox)

outTab=data.frame()
outTab=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|)"])
outTab=cbind(id=row.names(outTab),outTab)
write.table(outTab,file="multiCox.xls",sep="\t",row.names=F,quote=F)

pdf(file="forest.pdf",
    width = 8,
    height = 5,
    onefile = FALSE
)
ggforest(multiCox,
         main = "Hazard ratio",
         cpositions = c(0.01,0.12,0.3), 
         fontsize = 0.7, 
         refLabel = "reference", 
         noDigits = 2)
dev.off()

riskScore=predict(multiCox,type="risk",newdata=rt)
coxGene=rownames(multiCoxSum$coefficients)
coxGene=gsub("`","",coxGene)
outCol=c("futime","fustat",coxGene)
risk=as.vector(ifelse(riskScore>median(riskScore),"high","low"))
write.table(cbind(id=rownames(cbind(rt[,outCol],riskScore,risk)),cbind(rt[,outCol],riskScore,risk)),
            file="risk.txt",
            sep="\t",
            quote=F,
            row.names=F)

########################################ROC/Survival###################################
library(survival)
library(timeROC)


title <- "ROC curve"
rt <- read.table("risk.txt",header=T,sep="\t",check.names=F,row.names=1)
ROC_rt <- timeROC(T=rt$futime,delta=rt$fustat,
                  marker=rt$riskScore,cause=1,
                  weighting='marginal',
                  times=c(1,3,5),ROC=TRUE)

pdf(file=paste0("ROC-TCGA",".pdf"), width=5, height=5)
par(oma=c(0.5,1,0,1),font.lab=1.5,font.axis=1.5)
plot(ROC_rt,time=1,title=FALSE,col='#cca94d',lwd=2)
plot(ROC_rt,time=3,title=FALSE,lwd=2,col='#f9ebdb',add=TRUE)
plot(ROC_rt,time=5,title=FALSE,lwd=2,col='#6a3f8e',add=TRUE)
title(main=title)
legend('bottomright',
       c(
         paste0('AUC at 1 year: ',round(ROC_rt$AUC[1],2)),
         paste0('AUC at 3 year: ',round(ROC_rt$AUC[2],2)),
         paste0('AUC at 5 year: ',round(ROC_rt$AUC[3],2))),
       col=c('#cca94d','#f9ebdb','#6a3f8e'),lwd=2,bty='n')
dev.off()

########################Survival###################
library(survival)
library("survminer")
rt=read.table("risk.txt",header=T,sep="\t",row.names = 1)
diff=survdiff(Surv(futime, fustat) ~risk,data = rt)
pValue=1-pchisq(diff$chisq,df=1)
pValue=signif(pValue,4)
pValue=format(pValue, scientific = TRUE)

fit <- survfit(Surv(futime, fustat) ~ risk, data = rt)


library(survival)
library("survminer")
rt=read.table("risk.txt",header=T,sep="\t",row.names = 1)
diff=survdiff(Surv(futime, fustat) ~risk,data = rt)
pValue=1-pchisq(diff$chisq,df=1)
pValue=signif(pValue,4)
pValue=format(pValue, scientific = TRUE)

fit <- survfit(Surv(futime, fustat) ~ risk, data = rt)

pdf(file="survival-TCGA.pdf",onefile = FALSE,
    width = 5.5,             
    height =5)             
ggsurvplot(fit, 
           data=rt,
           conf.int=TRUE,
           pval=paste0("p=",pValue),
           pval.size=7,
           risk.table=TRUE,
           legend.labs=c("High risk", "Low risk"),
           legend.title="Risk",
           xlab="Time(years)",
           break.time.by = 2,
           risk.table.title="",
           palette=c("#6a3f8e", "#cca94d"),
           risk.table.height=.25,risk.table.fontsize=5)
dev.off()
summary(fit)    #?鿴??????????


####riskplot####
library(pheatmap)
rt=read.table("risk.txt",sep="\t",header=T,row.names=1,check.names=F)       
rt=rt[order(rt$riskScore),]                                     



riskClass=rt[,"risk"]
lowLength=length(riskClass[riskClass=="low"])
highLength=length(riskClass[riskClass=="high"])
line=rt[,"riskScore"]
line[line>10]=10
pdf(file="riskScore-TCGA.pdf",width = 10,height = 4)
plot(line,
     type="p",
     pch=20,
     xlab="Patients (increasing risk socre)",
     ylab="Risk score",
     col=c(rep("#cca94d",lowLength),
           rep("#6a3f8e",highLength)))
abline(h=median(rt$riskScore),v=lowLength,lty=2)
legend("topleft", c("High risk", "low Risk"),bty="n",pch=19,col=c("#cca94d","#6a3f8e"),cex=1.2)
dev.off()



color=as.vector(rt$fustat)
color[color==1]="#6a3f8e"
color[color==0]="#cca94d"
pdf(file="survStat-TCGA.pdf",width = 10,height = 4)
plot(rt$futime,
     pch=19,
     xlab="Patients (increasing risk socre)",
     ylab="Survival time (years)",
     col=color)
legend("topleft", c("High risk", "low Risk"),bty="n",pch=19,col=c("#6a3f8e","#cca94d"),cex=1.2)
abline(v=lowLength,lty=2)
dev.off()


library(pheatmap)
rt$risk <- factor(rt$risk,levels = c("low","high"))
 
rt1=rt[c(3:(ncol(rt)-2))]

rt1=t(rt1)
annotation=data.frame(type=rt[,ncol(rt)])
groupcolor <- c("#cca94d","#6a3f8e") 
names(groupcolor) <- c("low","high") 
ann_colors <- list(type=groupcolor) 
rownames(annotation)=rownames(rt)
pdf(file="heatmap-TCGA-2.pdf",width = 12,height = 3.5)
pheatmap(rt1, cellwidth = 1,scale="row",
         annotation=annotation, 
         cluster_cols = FALSE,
         fontsize_row=11,
         show_colnames = F,
         fontsize_col=7,
         annotation_colors = ann_colors,
         color = colorRampPalette(c("#cca94d", "white", "#6a3f8e"))(50) )
dev.off()


gene = read.table("multiCox.xls", header = T, sep = "\t", 
                  check.names = FALSE)
rt2 = read.table("validation_clinical_expr.txt", header = T, sep = "\t", row.names = 1,
                 check.names = FALSE)
columns_to_keep <- c("futime", "fustat", gene$id)
rt2 <- rt2[,columns_to_keep]
riskScore = predict(multiCox, type = "risk", newdata = rt2)
risk = as.vector(ifelse(riskScore > median(riskScore), "high", "low"))
write.table(cbind(id = rownames(cbind(rt2, riskScore, risk)),
                  cbind(rt2, riskScore, risk)), file = "risk-GSE72094.txt",
            sep = "\t", quote = F, row.names = F)
########################################ROC/Survival###################################
library(survival)
library(timeROC)


title <- "ROC curve"
rt <- read.table("risk-GSE72094.txt",header=T,sep="\t",check.names=F,row.names=1)
ROC_rt <- timeROC(T=rt$futime,delta=rt$fustat,
                  marker=rt$riskScore,cause=1,
                  weighting='marginal',
                  times=c(1,3,5),ROC=TRUE)

pdf(file=paste0("ROC-GSE72094",".pdf"), width=5, height=5)
par(oma=c(0.5,1,0,1),font.lab=1.5,font.axis=1.5)
plot(ROC_rt,time=1,title=FALSE,col='#cca94d',lwd=2)
plot(ROC_rt,time=3,title=FALSE,lwd=2,col='#f9ebdb',add=TRUE)
plot(ROC_rt,time=5,title=FALSE,lwd=2,col='#6a3f8e',add=TRUE)
title(main=title)
legend('bottomright',
       c(
         paste0('AUC at 1 year: ',round(ROC_rt$AUC[1],2)),
         paste0('AUC at 3 year: ',round(ROC_rt$AUC[2],2)),
         paste0('AUC at 5 year: ',round(ROC_rt$AUC[3],2))),
       col=c('#cca94d','#f9ebdb','#6a3f8e'),lwd=2,bty='n')
dev.off()

########################Survival###################
library(survival)
library("survminer")
rt=read.table("risk-GSE72094.txt",header=T,sep="\t",row.names = 1)
diff=survdiff(Surv(futime, fustat) ~risk,data = rt)
pValue=1-pchisq(diff$chisq,df=1)
pValue=signif(pValue,4)
pValue=format(pValue, scientific = TRUE)

fit <- survfit(Surv(futime, fustat) ~ risk, data = rt)


library(survival)
library("survminer")
rt=read.table("risk-GSE72094.txt",header=T,sep="\t",row.names = 1)
diff=survdiff(Surv(futime, fustat) ~risk,data = rt)
pValue=1-pchisq(diff$chisq,df=1)
pValue=signif(pValue,4)
pValue=format(pValue, scientific = TRUE)

fit <- survfit(Surv(futime, fustat) ~ risk, data = rt)

pdf(file="survival-GSE72094.pdf",onefile = FALSE,
    width = 5.5,            
    height =5)            
ggsurvplot(fit, 
           data=rt,
           conf.int=TRUE,
           pval=paste0("p=",pValue),
           pval.size=7,
           risk.table=TRUE,
           legend.labs=c("High risk", "Low risk"),
           legend.title="Risk",
           xlab="Time(years)",
           break.time.by = 2,
           risk.table.title="",
           palette=c("#6a3f8e", "#cca94d"),
           risk.table.height=.25,risk.table.fontsize=5)
dev.off()
summary(fit)    


####riskplot####
#install.packages("pheatmap")

library(pheatmap)
rt=read.table("risk-GSE72094.txt",sep="\t",header=T,row.names=1,check.names=F)     
rt=rt[order(rt$riskScore),]                                    



riskClass=rt[,"risk"]
lowLength=length(riskClass[riskClass=="low"])
highLength=length(riskClass[riskClass=="high"])
line=rt[,"riskScore"]
line[line>10]=10
pdf(file="riskScore-GSE72094.pdf",width = 10,height = 4)
plot(line,
     type="p",
     pch=20,
     xlab="Patients (increasing risk socre)",
     ylab="Risk score",
     col=c(rep("#cca94d",lowLength),
           rep("#6a3f8e",highLength)))
abline(h=median(rt$riskScore),v=lowLength,lty=2)
legend("topleft", c("High risk", "low Risk"),bty="n",pch=19,col=c("#cca94d","#6a3f8e"),cex=1.2)
dev.off()


color=as.vector(rt$fustat)
color[color==1]="#6a3f8e"
color[color==0]="#cca94d"
pdf(file="survStat-GSE72094.pdf",width = 10,height = 4)
plot(rt$futime,
     pch=19,
     xlab="Patients (increasing risk socre)",
     ylab="Survival time (years)",
     col=color)
legend("topleft", c("High risk", "low Risk"),bty="n",pch=19,col=c("#6a3f8e","#cca94d"),cex=1.2)
abline(v=lowLength,lty=2)
dev.off()


library(pheatmap)
rt$risk <- factor(rt$risk,levels = c("low","high"))

rt1=rt[c(3:(ncol(rt)-2))]

rt1=t(rt1)
annotation=data.frame(type=rt[,ncol(rt)])
groupcolor <- c("#cca94d","#6a3f8e")
names(groupcolor) <- c("low","high") 
ann_colors <- list(type=groupcolor) 

rownames(annotation)=rownames(rt)
pdf(file="heatmap-GSE72094.pdf",width = 12,height = 3.5)
pheatmap(rt1, cellwidth = 1,scale="row",
         annotation=annotation, 
         cluster_cols = FALSE,
         fontsize_row=11,
         show_colnames = F,
         fontsize_col=7,
         annotation_colors = ann_colors,
         color = colorRampPalette(c("#cca94d", "white", "#6a3f8e"))(50) )
dev.off()


library(survival)
rt=read.table("merge.txt",header=T,sep="\t",check.names=F,row.names=1)  

outTab=data.frame()
for(i in colnames(rt[,3:ncol(rt)])){
  cox <- coxph(Surv(futime, fustat) ~ rt[,i], data = rt)
  coxSummary = summary(cox)
  coxP=coxSummary$coefficients[,"Pr(>|z|)"]
  outTab=rbind(outTab,
               cbind(id=i,
                     HR=coxSummary$conf.int[,"exp(coef)"],
                     HR.95L=coxSummary$conf.int[,"lower .95"],
                     HR.95H=coxSummary$conf.int[,"upper .95"],
                     pvalue=coxSummary$coefficients[,"Pr(>|z|)"])
  )
}
write.table(outTab,file="uniCox.txt",sep="\t",row.names=F,quote=F)

######????ɭ??ͼ######
rt <- read.table("uniCox.txt",header=T,sep="\t",row.names=1,check.names=F)
gene <- rownames(rt)
hr <- sprintf("%.3f",rt$"HR")
hrLow  <- sprintf("%.3f",rt$"HR.95L")
hrHigh <- sprintf("%.3f",rt$"HR.95H")
Hazard.ratio <- paste0(hr,"(",hrLow,"-",hrHigh,")")
pVal <- ifelse(rt$pvalue<0.001, "<0.001", sprintf("%.3f", rt$pvalue))


pdf(file="uni_forest.pdf", width = 7,height = 4)
n <- nrow(rt)
nRow <- n+1
ylim <- c(1,nRow)
layout(matrix(c(1,2),nc=2),width=c(3,2.5))

xlim = c(0,3)
par(mar=c(4,2.5,2,1))
plot(1,xlim=xlim,ylim=ylim,type="n",axes=F,xlab="",ylab="")
text.cex=0.8
text(0,n:1,gene,adj=0,cex=text.cex)
text(1.5-0.5*0.2,n:1,pVal,adj=1,cex=text.cex);text(1.5-0.5*0.2,n+1,'pvalue',cex=text.cex,font=2,adj=1)
text(3,n:1,Hazard.ratio,adj=1,cex=text.cex);text(3,n+1,'Hazard ratio',cex=text.cex,font=2,adj=1,)

par(mar=c(4,1,2,1),mgp=c(2,0.5,0))
xlim = c(0,max(as.numeric(hrLow),as.numeric(hrHigh)))
plot(1,xlim=xlim,ylim=ylim,type="n",axes=F,ylab="",xaxs="i",xlab="Hazard ratio")
arrows(as.numeric(hrLow),n:1,as.numeric(hrHigh),n:1,angle=90,code=3,
       length=0.05,col="#377eb8",lwd=1.5)
abline(v=1,col="black",lty=2,lwd=1.5)
boxcolor = ifelse(as.numeric(hr) > 1, "#6a3f8e", "#cca94d")
points(as.numeric(hr), n:1, pch = 15, col = boxcolor, cex=1.3)
axis(1)
dev.off()

######################################indepen##########################
library(survival)
rt=read.table("merge.txt",header=T,sep="\t",check.names=F,row.names=1)

multiCox=coxph(Surv(futime, fustat) ~ ., data = rt)
multiCoxSum=summary(multiCox)

outTab=data.frame()
outTab=cbind(
  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|)"])
outTab=cbind(id=colnames(rt)[3:ncol(rt)] ,outTab)
write.table(outTab,file="multiCox.xls",sep="\t",row.names=F,quote=F)


rt <- read.table("multiCox.xls",header=T,sep="\t",row.names=1,check.names=F)
gene <- rownames(rt)
hr <- sprintf("%.3f",rt$"HR")
hrLow  <- sprintf("%.3f",rt$"HR.95L")
hrHigh <- sprintf("%.3f",rt$"HR.95H")
Hazard.ratio <- paste0(hr,"(",hrLow,"-",hrHigh,")")
pVal <- ifelse(rt$pvalue<0.001, "<0.001", sprintf("%.3f", rt$pvalue))


pdf(file="multi_forest.pdf", width = 7,height = 4)
n <- nrow(rt)
nRow <- n+1
ylim <- c(1,nRow)
layout(matrix(c(1,2),nc=2),width=c(3,2.5))


xlim = c(0,3)
par(mar=c(4,2.5,2,1))
plot(1,xlim=xlim,ylim=ylim,type="n",axes=F,xlab="",ylab="")
text.cex=0.8
text(0,n:1,gene,adj=0,cex=text.cex)
text(1.5-0.5*0.2,n:1,pVal,adj=1,cex=text.cex);text(1.5-0.5*0.2,n+1,'pvalue',cex=text.cex,font=2,adj=1)
text(3,n:1,Hazard.ratio,adj=1,cex=text.cex);text(3,n+1,'Hazard ratio',cex=text.cex,font=2,adj=1,)

par(mar=c(4,1,2,1),mgp=c(2,0.5,0))
xlim = c(0,max(as.numeric(hrLow),as.numeric(hrHigh)))
plot(1,xlim=xlim,ylim=ylim,type="n",axes=F,ylab="",xaxs="i",xlab="Hazard ratio")
arrows(as.numeric(hrLow),n:1,as.numeric(hrHigh),n:1,angle=90,code=3,
       length=0.05,col="#377eb8",lwd=1.5)
abline(v=1,col="black",lty=2,lwd=2)
boxcolor = ifelse(as.numeric(hr) > 1, "#6a3f8e", "#cca94d")
points(as.numeric(hr), n:1, pch = 15, col = boxcolor, cex=1.3)
axis(1)
dev.off()



library(rms)

rt=read.table("merge.txt",sep="\t",header=T,row.names=1,check.names=F)          
dd <- datadist(rt)
options(datadist="dd")

#rt$futime=as.integer(rt$futime)
rt$age[which(rt$age <= 65)] <- "<=65"
rt$age[which(rt$age > 65)] <- ">65"

rt$age<-factor(rt$age,labels=c("<=65",">65"))

rt[which(rt$gender == 0),"gender"] <- "female"
rt[which(rt$gender == 1),"gender"] <- "male"
rt$gender<-factor(rt$gender, labels = c("female", "male"))

rt$T<-factor(rt$T,labels=c("T1+T2","T3+T4"))
rt$N <- factor(rt$N ,labels=c("N0","N1+N2+N3"))
rt$M <- factor(rt$M ,labels=c("M0","M1"))
rt$tumor_stage <- factor(rt$tumor_stage ,labels=c("Stage I-II","Stage III-IV"))

f <- cph(Surv(futime, fustat) ~ age+gender+T+N+M+tumor_stage+riskScore, x=T, y=T,
         surv=T, data=rt)
surv <- Survival(f)

#nomogram
nom <- nomogram(f, fun=list(function(x) surv(1, x),function(x)surv(3,x),function(x)surv(5,x) ),
                lp=F, funlabel=c("1-year survival","3-year survival","5-year survival"),
                maxscale=100,
                fun.at=c(0.99, 0.8, 0.6, 0.4, 0.2, 0.05))

#nomogram
pdf(file="nomogram.pdf", height = 8, width = 11)
plot(nom)
dev.off()


#1校准图
cox1 <- cph(Surv(futime,fustat) ~ age+gender+T+N+M+tumor_stage+riskScore, surv=T,
            x=T, y=T, time.inc = 1, data = rt) 

cal <- calibrate(cox1, cmethod="KM", method="boot", u=1, m=nrow(rt)/3, 02513)  

pdf("calibrate1.pdf", 12, 8)
par(mar = c(10,5,3,2), cex = 1.0)
plot(cal,lwd=2,lty=2,errbar.col="black",xlim = c(0,1),ylim = c(0,1),
     xlab ="Nomogram-Predicted Probability of 1-Year Survival",
     ylab="Actual 1-Year Survival",col="blue")
lines(cal[,c('mean.predicted','KM')],type = 'b',lwd = 3,col ="black" ,pch = 16)
box(lwd = 1)
abline(0,1,lty = 3,lwd = 3,col = "black")
dev.off()


#3??校准图
cox2 <- cph(Surv(futime,fustat) ~ age+gender+T+N+M+tumor_stage+riskScore, surv=T,
            x=T, y=T, time.inc = 3, data = rt) 

cal <- calibrate(cox2, cmethod="KM", method="boot", u=3, m=nrow(rt)/3, 02513) 

pdf("calibrate3.pdf", 12, 8)
par(mar = c(10,5,3,2), cex = 1.0)
plot(cal,lwd=2,lty=2,errbar.col="black",xlim = c(0,1),ylim = c(0,1),
     xlab ="Nomogram-Predicted Probability of 3-Year Survival",
     ylab="Actual 3-Year Survival",col="blue")
lines(cal[,c('mean.predicted','KM')],type = 'b',lwd = 3,col ="black" ,pch = 16)
box(lwd = 1)
abline(0,1,lty = 3,lwd = 3,col = "black")
dev.off()

#5校准图
cox3 <- cph(Surv(futime,fustat) ~ age+gender+T+N+M+tumor_stage+riskScore,
            surv=T,x=T, y=T,time.inc = 5,data=rt) 

cal <- calibrate(cox3, cmethod="KM", method="boot", u=5, m=nrow(rt)/3, 02513)

pdf("calibrate5.pdf",12,8)
par(mar = c(10,5,3,2),cex = 1.0)
plot(cal,lwd=3,lty=2,errbar.col="black",xlim = c(0,1),ylim = c(0,1),
     xlab ="Nomogram-Predicted Probability of 5-Year Survival",
     ylab="Actual 5-Year Survival",col="blue")
lines(cal[,c('mean.predicted','KM')],type = 'b',lwd = 3,col ="black" ,pch = 16)
box(lwd = 1)
abline(0,1,lty = 3,lwd = 3,col = "black")
dev.off()


gmtFile="immune.gmt"                                         
library(GSVA)
library(limma)
library(GSEABase)

rt=read.table(inputFile,header=T,check.names=F)
rt <- rt[grep("protein_coding",rt$id),]
rt <- separate(rt,id,into = c("id","Encode","Type"),sep = "\\|")[,-c(2,3)]
rt <- rt[,-c(2:60)]
colnames(rt) <- substr(colnames(rt),start = 1,stop = 12)
st=read.table("risk.txt",header=T,check.names=F)
st <- st[,c(1,ncol(st))]
rt <- rt[,c("id",st$id)]
rt=as.matrix(rt)
rownames(rt)=rt[,1]
exp=rt[,2:ncol(rt)]
dimnames=list(rownames(exp),colnames(exp))
mat=matrix(as.numeric(as.matrix(exp)),nrow=nrow(exp),dimnames=dimnames)
mat=avereps(mat)
mat=mat[rowMeans(mat)>0,]
geneSet=getGmt(gmtFile, 
               geneIdType=SymbolIdentifier())
gsvaPar <- ssgseaParam(exprData = as.matrix(mat), 
                       geneSets = geneSet)

ssgseaScore <- gsva(gsvaPar, verbose = FALSE)
dim(ssgseaScore)
normalize=function(x){
  return((x-min(x))/(max(x)-min(x)))}
ssgseaOut=normalize(ssgseaScore)
ssgseaOut=rbind(id=colnames(ssgseaOut),ssgseaOut)
write.table(ssgseaOut,file="ssgseaOut.txt",sep="\t",quote=F,col.names=F)

#ssgse
library(vioplot)    
library(reshape2)
library(utils)
library(tidyverse)
library(Rmisc)
library(devtools)
library(ggpubr)
library(ggunchained)
group <- read.table("risk.txt",header = T,sep = "\t",check.names = F)
group <- data.frame(id = group$id, risk = group$risk,check.names = F)
rownames(group) <- group$id


rt=read.table("ssgseaOut.txt",sep="\t",header=T,row.names=1,check.names=F)  
group <- group[which(group$id %in% intersect(colnames(rt),as.vector(group[,1]))),]

rt <- as.matrix(t(rt))
low_group <- rownames(group[group$risk=="low",])
high_group <- rownames(group[group$risk=="high",])

rt <- rt[intersect(group$id,rownames(rt)),]
rt <- rt[group$id,]
rt <- data.frame(id = rownames(rt),rt,group = group$risk,check.names = F)
immune_cell <- rt[,c("id","aDCs","B_cells","CD8+_T_cells","DCs","iDCs","Macrophages","Mast_cells","Neutrophils","NK_cells","pDCs","T_helper_cells","Tfh","Th1_cells","Th2_cells","TIL","Treg","group")]
immune_func <- rt[,!(colnames(rt) %in% colnames(immune_cell)[-1][-17])]

rt <- immune_cell
rt_new <- melt(rt)
rt_data_summary <- summarySE(rt_new, measurevar="value", groupvars=c("group","variable"))

if(T){
  mytheme <- theme(plot.title = element_text(size = 9,color="black",hjust = 0.5),
                   axis.title = element_text(size = 14,color ="black"), 
                   axis.text = element_text(size= 14,color = "black"),
                   panel.grid.minor.y = element_blank(),
                   panel.grid.minor.x = element_blank(),
                   axis.text.x = element_text(angle = 45, hjust = 1 ),
                   panel.grid=element_blank(),
                   legend.position = "top",
                   legend.text = element_text(size= 14),
                   legend.title= element_text(size= 14)
  ) 
}

rt_new$group <- factor(rt_new$group,levels = c("low","high"))
rt_data_summary$group <- factor(rt_data_summary$group,levels = c("low","high"))

p=ggboxplot(rt_new, x="variable", y="value", 
            color = "group",
            ylab="ssGSEA cell",
            xlab="",
            palette = c("#cca94d","#6a3f8e") )
p=p+rotate_x_text(45)
pdf(file="ssGSEA_cell_boxplot.pdf",width=7.5,height=5.5)                          
p+stat_compare_means(aes(group=group),symnum.args=list(cutpoints = c(0, 0.001, 0.01, 0.05, 1), symbols = c("***", "**", "*", "ns")),label = "p.signif")
dev.off()


#cibersort
rt=read.table("CIBERSORT-Results.txt",sep="\t",header=T,row.names=1,check.names=F)    #??ȡ?ļ?
data=rt[rt[,"P-value"]<0.05, ]
data=data[,1:(ncol(data)-3)]

Type=read.table("risk.txt",sep="\t",check.names=F,row.names=1,header=T)

Type=Type[row.names(data), ]
rownames(Type) == rownames(data) 

Type$Subtype <- Type$risk
Type <- Type[,c("risk","Subtype")]
colnames(Type)=c("cluster","Subtype")

Type <- na.omit(Type)
outTab=data.frame()
data=cbind(data,Type)
for(i in colnames(data[,1:(ncol(data)-2)])){
  rt1=data[,c(i,"Subtype")]
  colnames(rt1)=c("expression","Subtype")
  ksTest<-kruskal.test(expression ~ Subtype, data = rt1)
  pValue=ksTest$p.value
  if(!is.na(pValue) ){
    outTab=rbind(outTab,cbind(rt1,gene=i))
    print(pValue)
  }
}

#& pValue<pFilter
write.table(outTab,file="data.txt",sep="\t",row.names=F,quote=F)


data=read.table("data.txt",sep="\t",header=T,check.names=F)       
data$Group=factor(data$Subtype, levels=c("low","high"))

p=ggboxplot(data, x="gene", y="expression", 
            color = "#464961",
            fill = "Group",
            ylab="Fraction",
            xlab="",
            palette = c("#cca94d","#6a3f8e") )
p=p+rotate_x_text(45)
pdf(file="Cibersort-boxplot.pdf",width=7.5,height=5.5)                          
p+stat_compare_means(aes(group=Subtype),symnum.args=list(cutpoints = c(0, 0.001, 0.01, 0.05, 1), symbols = c("***", "**", "*", "ns")),label = "p.signif")
#+coord_flip()
dev.off()

#estimate
library(vioplot)    
library(reshape2)
library(utils)
library(tidyverse)
library(Rmisc)
library(devtools)
library(ggpubr)
# install_github("JanCoUnchained/ggunchained")
library(ggunchained)

group <- read.table("risk.txt",header = T,sep = "\t",check.names = F)
group <- group[,c(1,ncol(group))]
rownames(group) <- group$id

rt=read.table("scores.txt",sep="\t",header=T,row.names=1,check.names=F)   
rt <- rt[,-4]
rt <- rt[rownames(group),]
rt <- data.frame(id = rownames(rt),rt,group = group$risk,check.names = F)

ESTI_value_New = melt(rt)
ESTI_Data_summary <- summarySE(ESTI_value_New, measurevar="value", groupvars=c("group","variable"))

if(T){
  mytheme <- theme(plot.title = element_text(size = 12,color="black",hjust = 0.5),
                   axis.title = element_text(size = 12,color ="black"), 
                   axis.text = element_text(size= 12,color = "black"),
                   panel.grid.minor.y = element_blank(),
                   panel.grid.minor.x = element_blank(),
                   axis.text.x = element_text(angle = 45, hjust = 1 ),
                   panel.grid=element_blank(),
                   legend.position = "right",
                   legend.text = element_text(size= 12),
                   legend.title= element_text(size= 12)
  ) 
}

ESTI_value_New$group <- factor(ESTI_value_New$group,levels = c("low","high"))
ESTI_Data_summary$group <- factor(ESTI_Data_summary$group,levels = c("low","high"))
ESTI_split_violin <- ggplot(ESTI_value_New,aes(x= variable,y= value,fill= group))+
  geom_split_violin(trim= F,color="white",scale = "area") + 
  geom_point(data = ESTI_Data_summary,aes(x= variable, y= value),pch=19,
             position=position_dodge(0.4),size= 1)+ 
  geom_errorbar(data = ESTI_Data_summary,aes(ymin = value-ci, ymax= value+ci), 
                width= 0.05, 
                position= position_dodge(0.4), 
                color="black",
                alpha = 0.8,
                size= 0.5) +
  scale_fill_manual(values = c("#cca94d","#6a3f8e"))+ 
  labs(y=("Value"),x=NULL,title = NULL) + 
  theme_bw()+ mytheme +
  scale_x_discrete(labels=c("Stromal","Immune","ESTIMATE")) +
  stat_compare_means(aes(group = group),
                     label = "p.signif",
                     method = "wilcox",
                     label.y = max(ESTI_value_New$value),
                     hide.ns = F)
ESTI_split_violin
ggsave(ESTI_split_violin,filename = "ESTIMATE_plot.pdf", height = 15,width = 20,units = "cm")



#IPS
library(openxlsx)
library(Rmisc)
library(ggplot2)
library(reshape2)
library(ggpubr)
library(ggunchained)
risk <- read.table("risk.txt", sep = "\t", header = T, check.names = F)
risk <- data.frame(id = risk$id,risk =risk$risk)
IPS <- read.table("TCIA-ClinicalData_LUAD.tsv", sep = "\t", header = T, check.names = F)

IPS <- IPS[,c("barcode","ips_ctla4_neg_pd1_neg","ips_ctla4_neg_pd1_pos",
              "ips_ctla4_pos_pd1_neg","ips_ctla4_pos_pd1_pos")]

colnames(IPS)[1] <- c("id")


rt_new <- melt(IPS)
rt_new <- merge(rt_new,risk,by = "id")
colnames(rt_new)[4] <- "group"
rt_new <- na.omit(rt_new)

rt_data_summary <- summarySE(rt_new, measurevar="value", groupvars=c("group","variable"))



if(T){
  mytheme <- theme(plot.title = element_text(size = 11,color="black",hjust = 0.5),
                   axis.title = element_text(size = 11,color ="black"), 
                   axis.text = element_text(size= 9,color = "black"),
                   panel.grid.minor.y = element_blank(),
                   panel.grid.minor.x = element_blank(),
                   # axis.text.x = element_text(angle = 20, hjust = 1 ),
                   panel.grid=element_blank(),
                   legend.position = "right",
                   legend.text = element_text(size= 9),
                   legend.title= element_text(size= 9)
  ) 
}


rt_new$group <- factor(rt_new$group,levels = c("low","high"))
rt_data_summary$group <- factor(rt_data_summary$group,levels = c("low","high"))
ESTI_split_violin <- ggplot(rt_new,aes(x= variable,y= value,fill= group))+
  geom_split_violin(trim= F,color="white",scale = "area") + 
  geom_point(data = rt_data_summary,aes(x= variable, y= value),pch=19,
             position=position_dodge(0.4),size= 1)+ 
  geom_errorbar(data = rt_data_summary,aes(ymin = value-ci, ymax= value+ci), 
                width= 0.05, 
                position= position_dodge(0.4), 
                color="black",
                alpha = 0.8,
                size= 0.5) +
  scale_fill_manual(values = c("#cca94d","#6a3f8e"))+ 
  labs(y=("IPS Value"),x=NULL,title = NULL) + 
  theme_bw()+ mytheme +
  scale_x_discrete() +
  stat_compare_means(aes(group = group),
                     label = "p.signif",
                     method = "wilcox",
                     label.y = max(rt_new$value)+1,
                     hide.ns = F)+ylim(2,13)
ESTI_split_violin
ggsave(ESTI_split_violin,filename = "IPS_plot.pdf", height = 15,width = 30,units = "cm",dpi = 800)

#TIDE
library("openxlsx")

risk <- read.table("risk.txt", sep = "\t", header = T, check.names = F)

risk <- data.frame(id = risk$id,risk =risk$risk)

TIDE <- read.csv("TIDE.csv",sep = ",", header = T, check.names = F)
TIDE <- TIDE[,c("Patient","TIDE")]
colnames(TIDE)[1] <- "id"
TIDE$id <- substr(TIDE$id,1,12)

merge <- merge(TIDE,risk,by = "id")
merge$risk <- factor(merge$risk,levels = c("low","high"))
library(ggplot2)

library(ggpubr)
library(dplyr)


pdf(file="TIDEplot.pdf",width=5,height=5)
p <- ggplot(merge, aes(x=risk,y = TIDE))+
  geom_violin(aes(fill=risk),trim=FALSE)+
  geom_boxplot(width=0.2)
p+ stat_summary(fun.y=median, geom="point", size=2)+
  scale_fill_manual(values = c("#cca94d","#6a3f8e"))+
  stat_compare_means(label.y = 3, label.x = 1.3, method = "wilcox")+theme_classic()
dev.off()

#tmb
library('R.utils')
library(tidyverse)
library(readxl)
library(writexl)
library(maftools)
# install.packages('R.utils')
files <- list.files(pattern = ".maf.gz")
df <- data.frame()
for (i in 1:length(files)) {
  m <- read.maf(files[[i]], isTCGA = T)
  df <- rbind(df, m@data)
}
write.table(df, file="input.maf", sep = "\t", quote = F, row.names = F)

####新瀑布图####
library(GenVisR)
library(maftools)
library("openxlsx")
rt <- read.table("input.maf",sep = "\t",header = T,check.names = F)
gene <- read.table("gene.txt")
outTab <- substr(rt$Tumor_Sample_Barcode,1,12)

rt <- data.frame(id = outTab,rt)
st <- read.table("risk.txt",sep = "\t",header = T)

st <- cbind(id = st$id,risk = st$risk)

risk_input <- merge(st,rt, by = "id")
risk_input$Tumor_Sample_Barcode <- risk_input$Matched_Norm_Sample_Barcode

num <- grep("low",risk_input$risk)

low_risk <- risk_input[num,]

num <- grep("high",risk_input$risk)
high_risk <- risk_input[num,]

low_risk <- low_risk[,-c(1,2)]
high_risk <- high_risk[,-c(1,2)]

write.table(low_risk,"low_risk_input.maf", quote = F, sep = "\t", row.names = F, col.names = T)
write.table(high_risk,"high_risk_input.maf", quote = F, sep = "\t", row.names = F, col.names = T)
###################high#################
laml <- read.maf("high_risk_input.maf")

#此处使用RColorBrewer的颜色，当然也可以使用任意颜色
vc_cols = RColorBrewer::brewer.pal(n = 8, name = 'Paired')
vc_cols =c("#cca94d","#cf6c9d","#1f78b4","#464961","#749fb6","#c0d9e5","#6a3f8e","#d64f38",
           "#47865c")
#查看突变类型
oncoplot(maf = laml, top = 20)
names(vc_cols) = c(
  'Missense_Mutation',
  'Frame_Shift_Ins',
  'Nonsense_Mutation',
  'In_Frame_Del',
  'Frame_Shift_Del',
  'Multi_Hit',
  'Splice_Site',
  "Translation_Start_Site",
  'In_Frame_Ins'  )
print(vc_cols)
oncoplot(maf = laml, colors = vc_cols, top = 20)
pdf("high_summary.pdf",width = 10)
plotmafSummary(maf = laml, rmOutlier = TRUE, color = vc_cols,addStat = 'median', dashboard = TRUE, titvRaw = FALSE)
dev.off()
pdf("high_waterfull.pdf",height = 6)
oncoplot(maf = laml,color = vc_cols, top = 20)
dev.off()
pdf("high_modelgene_waterfall.pdf")
oncostrip(maf = laml, color = vc_cols,genes = gene$V1[-1])
dev.off()

#################low#####################
laml2 <- read.maf("low_risk_input.maf")
vc_cols_low = RColorBrewer::brewer.pal(n = 8, name = 'Paired')
pdf("low_summary.pdf",width = 10)
plotmafSummary(maf = laml2, color = vc_cols, rmOutlier = TRUE, addStat = 'median', dashboard = TRUE, titvRaw = FALSE)
dev.off()
pdf("low_waterfull.pdf",height = 6)
oncoplot(maf = laml2,color = vc_cols, top = 20)
dev.off()
pdf("low_modelgene_waterfall.pdf")
oncostrip(maf = laml2,color = vc_cols, genes = gene$V1[-1])
dev.off()
####TMB####
maf <- read.maf("input.maf")
stad.tmb <- tmb(maf, captureSize = 38, logScale = T)
dim(stad.tmb)

## 根据TMB平均值进行分组
library(dplyr)
stad.tmb <- stad.tmb %>% mutate(group = if_else(total_perMB_log > mean(total_perMB_log), "TMB_high","TMB_low"))
head(stad.tmb)

stad.tmb$patient <- substr(stad.tmb$Tumor_Sample_Barcode, 1, 12)

# 加载自身临床数据
clin_info <- read.table("risk.txt",sep = "\t",header = T)
clin_info <-clin_info[,c(1:3,ncol(clin_info))]
clin_info[1:4,1:4]
colnames(stad.tmb)[1] <- "id"
TMB <- merge(clin_info, stad.tmb, by = "id")
####TMB与risk####
pdf(file="TMB_plot.pdf",width=5,height=5)
ggboxplot(TMB, x = "risk", y = "total_perMB_log",
          fill = "risk",palette =c("#8ECFC9","#FFBE7A"), ylab="TMB") +
  
  stat_compare_means(comparisons = list(
    c("low", "high")
  )) 
dev.off()

#drug
options(stringsAsFactors = F)
library(TCGAbiolinks) 
library(oncoPredict)
library(data.table)
library(gtools)
library(reshape2)
library(ggpubr)
library(limma)
library(tidyr)
set.seed(1234)
options(stringsAsFactors = F)
library(TCGAbiolinks) 
library(oncoPredict)
library(data.table)
library(gtools)
library(reshape2)
library(ggpubr)
library(limma)
library(tidyr)
set.seed(1234)
th=theme(axis.text.x = element_text(angle = 45,vjust = 0.5))
dir='Training Data'
CTRP2_Expr = readRDS(file=file.path(dir,'CTRP2_Expr (TPM, not log transformed).rds'))
CTRP2_Res = readRDS(file = file.path(dir,"CTRP2_Res.rds"))
testExpr<- read.table("mRNAtpm.txt",
                      header = T,check.names = F)
testExpr <- testExpr[grep("protein_coding",testExpr$id),]
testExpr <- separate(testExpr,id,into = c("id","Encode","Type"),sep = "\\|")[,-c(2,3)]
testExpr <- testExpr[,-c(2:60)]
colnames(testExpr) <- substr(colnames(testExpr),start = 1,stop = 16)
# st=read.table("risk.txt",header=T,check.names=F)
# st <- st[,c(1,ncol(st))]
# testExpr <- testExpr[,c("id",st$id)]
testExpr=as.matrix(testExpr)
rownames(testExpr)=testExpr[,1]
exp=testExpr[,2:ncol(testExpr)]

dimnames=list(rownames(exp),colnames(exp))
mat=matrix(as.numeric(as.matrix(exp)),nrow=nrow(exp),dimnames=dimnames)

mat=avereps(mat)
mat=mat[rowMeans(mat)>0,]
CTRP2_Expr <- log2(CTRP2_Expr+0.01)
testExpr=log2(mat+0.01)
#colnames(testExpr)=paste0('test',colnames(testExpr))
dim(testExpr) 

calcPhenotype(trainingExprData = CTRP2_Expr,
              trainingPtype = CTRP2_Res,
              testExprData = testExpr,
              batchCorrect = 'eb',  
              powerTransformPhenotype = T,
              removeLowVaryingGenes = 0.2,
              minNumSamples = 10, 
              printOutput = TRUE,
              removeLowVaringGenesFrom = "rawData"
)

th=theme(axis.text.x = element_text(angle = 45,vjust = 0.5))

#res <- read.csv("./calcPhenotype_Output/DrugPredictions.csv")
res <- read.csv("DrugPredictions.csv")
dim(res)

res[1:4,1:4]

library(tidyr)
library(dplyr)
library(ggplot2)
library(ggpubr)
library(ggsci)

# 自动筛选P值
testPtype <- read.csv('DrugPredictions.csv', 
                      check.names = F)
colnames(testPtype)[1] <- "id"
testPtype$id <- substr(testPtype$id,start = 1,stop = 16)

testPtype[1:4, 1:4]
dim(testPtype)
identical(colnames(testPtype),colnames(CTRP2_Res))
TCGA <- read.table("risk.txt",header=T,check.names=F,row.names = 1)
rownames(TCGA) <- substr(rownames(TCGA) ,start = 1,stop = 16)
#rownames(TCGA) <- gsub("-",".",rownames(TCGA))
TCGA[1,1]
TCGA$id <- rownames(TCGA)
rownames(testPtype) <- testPtype$id
testPtype <- merge(TCGA,testPtype,by="id")
rownames(testPtype) <- testPtype$id
testPtype <-testPtype[,-c(1:18)]
identical(rownames(TCGA),colnames(testExpr))
TCGA$group <-TCGA$risk
rsurv <- TCGA[intersect(rownames(testPtype),rownames(TCGA)),]

identical(rownames(testPtype),rownames(rsurv))
a = apply(testPtype, 2, function(x){
  #x = testPtype[,1]
  wilcox.test(x~rsurv$group)$p.value
})
head(a)
#p值最小的10个药物
dg = names(head(sort(a),198))
#自己筛选药物：ic50、P值
library(tinyarray)
library(tidyr)
library(dplyr)
library(ggplot2)
library(ggpubr)
library(ggsci)

group <- rsurv$group
pdf(file="box_drug_new.pdf",width = 25,height =6)
testPtype[,dg] %>% 
  bind_cols(group = group) %>% 
  pivot_longer(62:71,names_to = "drugs",values_to = "ic50")  %>% 
  ggplot(., aes(group,ic50))+
  geom_boxplot(aes(fill=group))+
  #scale_fill_jama()+, 
  scale_fill_manual(values = c(high="#e41a1c",low="#377eb8"))+
  stat_compare_means()+
  theme_bw()+
  theme(axis.text.x = element_text(angle = 45,hjust = 1),
        axis.title.x = element_blank(),
        legend.position = "right",
        plot.title = element_text(size = 16, face = "bold"),  # 加粗标题
        text = element_text(size = 16))+
  facet_wrap(vars(drugs),scales = "free_y",nrow = 2)
dev.off()