#########################sva
library(sva)
library(bladderbatch)
data(bladderdata)
dat <- bladderEset[1:50,]
pheno = pData(dat)
edata = exprs(dat)
batch = pheno$batch
dist_mat <- dist(t(edata))
clustering <- hclust(dist_mat, method = "complete")
plot(clustering, labels = pheno$batch)
plot(clustering, labels = pheno$cancer)
mod = model.matrix(~as.factor(cancer), data=pheno)
combat_edata <- ComBat(dat = edata, batch = pheno$batch, mod = mod)
dist_mat_combat <- dist(t(combat_edata))
clustering_combat <- hclust(dist_mat_combat, method = "complete")
plot(clustering_combat, labels = pheno$batch)
plot(clustering_combat, labels = pheno$cancer)



##################################cluster
library(ConsensusClusterPlus)
data <- read.table(file = "LOG2.txt", sep = "\t", header = T, stringsAsFactors = F, row.names = 1, check.names = F)
data2 <- data[apply(data, 1, function(x){sum(is.na(x)) < ncol(data)/2}),]
data2 <- as.matrix(data2)

res <- ConsensusClusterPlus(data2, maxK = 10, reps = 1000, pItem = 0.8, pFeature = 1, clusterAlg = "pam", corUse = "complete.obs", seed=123456, plot="pdf", writeTable=T)
write.table(data2, "result.txt")



##############################PCA
library(psych)
library(reshape2)
library(ggplot2)
library(factoextra)
library(stat)
library(vegan)
exprData <- "before.txt"
sampleFile <- "group.txt"
data <- read.table(exprData, header=T, row.names=NULL,sep="\t")
rownames_data <- make.names(data[,1],unique=T)
data <- data[,-1,drop=F]
rownames(data) <- rownames_data
data <- data[rowSums(data)>0,]
data <- data[apply(data, 1, var)!=0,]
mads <- apply(data, 1, mad)
data <- data[rev(order(mads)),]
dim(data)

data_t <- t(data)
variableL <- ncol(data_t)
if(sampleFile != "") {
  sample <- read.table(sampleFile,header = T, row.names=1,sep="\t")
  data_t_m <- merge(data_t, sample, by=0)
  rownames(data_t_m) <- data_t_m$Row.names
  data_t <- data_t_m[,-1]
}
pca <- prcomp(data_t[,1:variableL], scale=T)
print(str(pca))
library(factoextra)
fviz_eig(pca, addlabels = TRUE)

fviz_pca_ind(pca, repel=T)   
fviz_pca_ind(pca, col.ind=data_t$conditions, mean.point=F, addEllipses = T, legend.title="Groups")
fviz_pca_ind(pca, col.ind=data_t$conditions, mean.point=F, addEllipses = T, legend.title="Groups", ellipse.type="confidence", ellipse.level=0.95)
fviz_pca_var(pca, select.var = list(cos2 = 0.99), repel=T, col.var = "cos2", geom.var = c("arrow", "text") )
fviz_pca_var(pca, select.var= list(cos2 = 10), repel=T, col.var = "contrib")



######################################Differential analysis
library(limma)
library(edgeR)
counts <- read.table(file = "conut_all.txt", sep = "\t", header = TRUE, row.names = 1, stringsAsFactors = FALSE)
dge <- DGEList(counts = counts)
dge <- calcNormFactors(dge)
logCPM <- cpm(dge, log=TRUE, prior.count=3)
group_list <- factor(c(rep("control",2), rep("siSUZ12",2)))
design <- model.matrix(~group_list)
colnames(design) <- levels(group_list)
rownames(design) <- colnames(counts)
fit <- lmFit(logCPM, design)
fit <- eBayes(fit, trend=TRUE)
output <- topTable(fit, coef=2,n=Inf)
sum(output$adj.P.Val<0.05)



################################GSEA
library(clusterProfiler)
library(enrichplot)
library(ReactomePA)
library(data.table)
library("org.Hs.eg.db")
genelist_input <- fread(file="data.txt", header = T, sep='\t', data.table = F)
inputfile="gsea.txt" 

gene_symbol=read.table(inputfile,sep="\t",check.names=F,header=T)
gene_name=as.vector(gene_symbol[,1])
foldChange=as.character(gene_symbol[,2])
geneID <- mget(gene_name, org.Hs.egSYMBOL2EG, ifnotfound=NA)
geneID <- as.character(geneID)
data=cbind(gene_symbol,entrezID=geneID)


head(genelist_input)  
write.csv(data,"data.csv",row.names =F)

geneList = genelist_input[,2]names(geneList) = as.character(genelist_input[,1])geneList = sort(geneList, decreasing = TRUE)
Go_Reactomeresult <- gsePathway(geneList, nPerm = 1000, minGSSize = 10, maxGSSize = 1000, pvalueCutoff=0.05)
gseaplot2(Go_Reactomeresult, 1:3, pvalue_table = TRUE)




#############################ssGSEA
library(ggplot2)
library(clusterProfiler)
library(org.Hs.eg.db)
library(GSVA)
library(GSEABase)
library(genefilter)
library(Biobase)
library(stringr)
BiocManager::install('genefilter')
geneSet = getGmt("nerve.gmt")
gene_exp = read.table("data.txt",header=T,row.names=1,stringsAsFactors=FALSE)


keggEs=gsva(expr=as.matrix(gene_exp),gset.idx.list=geneSet,kcdf="Gaussian",parallel.sz=4,method="gsva")#log2后的FPKM或TPM格式

keggEs=gsva(expr=as.matrix(),gset.idx.list=geneSet,kcdf="Gaussian",parallel.sz=4,method="ssgsea")#log2后的FPKM或TPM格式,样本免疫细胞丰度

keggEs=gsva(expr=as.matrix(gene_exp),gset.idx.list=geneSet,kcdf="Possion",parallel.sz=4,method="gsva")#COUNT格式

write.csv(keggEs,"gsva.csv")
write.csv(gsva_matrix,"ssGSEA.csv")

gene_set<- read.csv('mmc3.csv',
                    header = T)##读取已经下载好的免疫细胞和对应基因列表，来源见文献附件
gene_set<-gene_set[, 1:2]#选取特异基因和对应的免疫细胞两行
head(gene_set)
list<- split(as.matrix(gene_set)[,1], gene_set[,2])
gsva_matrix<- gsva(as.matrix(skcm1), list,method='ssgsea',kcdf='Gaussian',abs.ranking=TRUE)


inputfile1="id_new.txt" 
inputfile2="data.txt" 

time_data<-read.table(inputfile1,header = T,sep = "\t",check.names = F)
geneEXP<-read.table(inputfile2,header = T,sep = "\t",check.names = F)
merger_data<-merge(time_data,geneEXP,by="id")
write.table(merger_data,"nerve_new.txt",sep = "\t",row.names = F,quote = F)

library(ConsensusClusterPlus)
data <- read.table(file = "cluster_new.txt", sep = "\t", header = T, stringsAsFactors = F, row.names = 1, check.names = F)
data2 <- data[apply(data, 1, function(x){sum(is.na(x)) < ncol(data)/2}),]
data2 <- as.matrix(data2)

res <- ConsensusClusterPlus(data2, maxK = 10, reps = 1000, pItem = 0.8, pFeature = 1, clusterAlg = "km", corUse = "complete.obs", seed=123456, plot="pdf", writeTable=T)
write.table(data2, "result.txt")
??ConsensusClusterPlus

icl <- calcICL(res, title = title,
               plot = "png")



#################################### randomForest
library(ggplot2)
library(cowplot)
library(randomForest)

data<-read.table("RF.txt",header=T,sep="\t")
str(data)
## First, replace "?"s with NAs.
data[data == "?"] <- NA
data=aa
## Now add factors for variables that are factors and clean up the factors
## that had missing data...

data$sex <- as.factor(data$sex)

data$HBP <- as.factor(data$HBP)
data$T2DM <- as.factor(data$T2DM)
data$smoking <- as.factor(data$smoking)
data$alcohol <- as.factor(data$alcohol)
data$AVC <- as.factor(data$AVC)


## This next line replaces 0 and 1 with "Healthy" and "Unhealthy"
data$status <- ifelse(test=data$status == 0, yes="CAD", no="Healthy")
data$status <- as.factor(data$status)
set.seed(43)
data.imputed<-rfImpute(status~.,data=data,iter=6)
model <- randomForest(status ~ ., data=data.imputed, proximity=TRUE)
model
model$err.rate
oob.error.data <- data.frame(
  Trees=rep(1:nrow(model$err.rate), times=3),
  Type=rep(c("OOB", "Healthy", "CAD"), each=nrow(model$err.rate)),
  Error=c(model$err.rate[,"OOB"],
          model$err.rate[,"Healthy"],
          model$err.rate[,"CAD"]))

ggplot(data=oob.error.data, aes(x=Trees, y=Error)) +
  geom_line(aes(color=Type))

model <- randomForest(status ~ ., data=data.imputed, ntree=1000, proximity=TRUE)
model

oob.error.data <- data.frame(
  Trees=rep(1:nrow(model$err.rate), times=3),
  Type=rep(c("OOB", "Healthy", "CAD"), each=nrow(model$err.rate)),
  Error=c(model$err.rate[,"OOB"],
          model$err.rate[,"Healthy"],
          model$err.rate[,"CAD"]))

ggplot(data=oob.error.data, aes(x=Trees, y=Error)) +
  geom_line(aes(color=Type))

oob.values <- vector(length=10)
for(i in 1:10) {
  temp.model <- randomForest(status ~ ., data=data.imputed, mtry=i, ntree=1000)
  oob.values[i] <- temp.model$err.rate[nrow(temp.model$err.rate),1]
}
oob.values

distance.matrix <- dist(1-model$proximity)
mds.stuff <- cmdscale(distance.matrix, eig=TRUE, x.ret=TRUE)
mds.var.per <- round(mds.stuff$eig/sum(mds.stuff$eig)*100, 1)
mds.values <- mds.stuff$points
mds.data <- data.frame(Sample=rownames(mds.values),
                       X=mds.values[,1],
                       Y=mds.values[,2],
                       Status=data.imputed$status)

ggplot(data=mds.data, aes(x=X, y=Y, label=Sample)) +
  geom_text(aes(color=Status)) +
  theme_bw() +
  xlab(paste("MDS1 - ", mds.var.per[1], "%", sep="")) +
  ylab(paste("MDS2 - ", mds.var.per[2], "%", sep="")) +
  ggtitle("MDS plot using (1 - Random Forest Proximities)")

model <- randomForest(status ~ ., data=data.imputed, proximity=TRUE,importance=TRUE)
importance(model,type=1)
importance(model,type=2)
p=varImpPlot(model,sort=TRUE)
dotchart(p, 
         color ="red", gcolor = "blue", lcolor = "purple",
)





######################################logistics
library(plyr)
library(rms)#
library(epiDisplay)#
library(gtsummary)#

ddist <- datadist(aa)
options(datadist="ddist") 

Uni_glm_model<- 
  function(x){
    FML<-as.formula(paste0("status==0~",x))
    glm1<-glm(FML,data=aa,family = binomial)
    glm2<-summary(glm1)
    OR<-round(exp(coef(glm1)),2)
    SE<-glm2$coefficients[,2]
    CI5<-round(exp(coef(glm1)-1.96*SE),2)
    CI95<-round(exp(coef(glm1)+1.96*SE),2)
    CI<-paste0(CI5,'-',CI95)
    P<-round(glm2$coefficients[,4],2)
    Uni_glm_model <- data.frame('Characteristics'=x,
                                'OR' = OR,
                                'CI' = CI,
                                'P' = P)[-1,]               
    return(Uni_glm_model)
  }  
variable.names<- colnames(aa)[c(3:26)];variable.names 

Uni_glm <- lapply(variable.names, Uni_glm_model)
library(plyr)
Uni_glm<- ldply(Uni_glm,data.frame);Uni_glm




###############################################LASSO
library(glmnet)
lasso_dat[,3:12] = lapply(lasso_dat[,3:12], as.numeric)
v1<-as.matrix(lasso_dat[,c(3:12)])
v2 <-lasso_dat[,2]
mod <- glmnet(v1, v2, family = "binomial")
plot(mod, xvar = "lambda", label = TRUE)

cvmod <- cv.glmnet(v1, v2, family="binomial")
plot(cvmod)
cvmod$lambda.min
coe <- coef(mod, s = cvmod$lambda.1se)
act_index <- which(coe != 0)
act_coe <- coe[act_index]
row.names(coe)[act_index]

library(broom)
tidy_df <- broom::tidy(mod)
tidy_cvdf <- broom::tidy(cvmod)
head(tidy_df)
head(tidy_cvdf)
library(ggplot2)
library(RColorBrewer)
?brewer.pal
tidy_df$term
tidy_df=tidy_df%>%
  filter(term != '(Intercept)')

mypalette <- c(brewer.pal(11,"BrBG"),brewer.pal(5,"Spectral"))#,brewer.pal(8,"Accent"),brewer.pal(11,"RdYlGn"),brewer.pal(7,"RdYlBu"),brewer.pal(5,"RdGy"))#,brewer.pal(11,"RdBu"),brewer.pal(11,"PuOr"))

ggplot(tidy_df, aes(step, estimate, group = term,color=term)) +
  geom_line(size=1.2)+
  geom_hline(yintercept = 0)+
  ylab("Coefficients")+
  scale_color_manual(name="variable",values = mypalette)+
  theme_bw()

p2 <- ggplot(tidy_df, aes(lambda, estimate, group = term, color = term)) +
  geom_line(size=1.2)+
  geom_hline(yintercept = 0)+
  scale_x_log10(name = "Log Lambda")+
  ylab("Coefficients")+
  scale_color_manual(name="variable",values = mypalette)+
  theme_bw()
p2  

p3 <- ggplot()+
  geom_point(data=tidy_cvdf, aes(lambda,estimate))+
  geom_errorbar(data = tidy_cvdf, aes(x=lambda,ymin=conf.low,ymax=conf.high))+
  scale_x_log10(name = "Log Lambda")+
  ylab("Coefficients")+
  theme_bw()
p3
library(patchwork)

p2 / p3




#############################nomogram
library(regplot)
library(rms)
library(rmda)
non_tumor<-read.table("ROC.txt",header=T,sep="\t")

ddist <- datadist(non_tumor)
options(datadist="ddist") 
mylog <-lrm(status ~ HMGCR + ACSS2 + CUX2 + PNPLA3, family=binomial(link = "logit"), data =non_tumor)
mylog
summary(mylog)
coefficients(mylog)
exp(coefficients(mylog))
exp(confint(mylog))

nom1<-regplot(mylog, clickable=TRUE, 
              points=TRUE, rank="sd",prfail = T)

#指定标记的样本行
nom2<-regplot(mylog,observation=non_tumor[53,], clickable=TRUE, 
              points=TRUE, rank="sd",droplines=T,prfail = T,
              other=(list(bvcol="red",sq="green",obscol="blue")))



mylog<-lrm(status~HMGCR + PLIN2 + CUX2 + PNPLA3	,data=non_tumor,x=T,y=T)
mynom<- nomogram(mylog, fun=plogis,fun.at=c(0.0001,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,0.9999),lp=F, funlabel="risk of PSD")

pdf("Nom_2.pdf",10,8)
plot(mynom)
dev.off()




###########################Cindex
mylog
library(Hmisc)
Cindex <- rcorrcens(non_tumor$status~predict(mylog))
Cindex
mylog<-lrm(status~HMGCR + PLIN2 + CUX2 + PNPLA3,data=non_tumor,x=T,y=T)



#####################BOOTSTRAT
set.seed(300)
?validate
myc<-validate(mylog,method="b",B = 1000,pr=T,dxy=T)
c_index<-(myc[1,5]+1)/2
c_index


##################Calibration
mylog<-lrm(status~HMGCR + PLIN2 + CUX2 + PNPLA3,data=non_tumor,x=T,y=T)
mycal<-calibrate(mylog,method="boot",B=1000)

pdf("Calibration_2.pdf")
plot(mycal,xlab="Nomogram-predicted probability of PSD",ylab="Actual diagnosed PSD (proportion)",sub=T)
dev.off()






#######################DCA
modul1<- decision_curve(status~ HMGCR + PLIN2 + CUX2 + PNPLA3
                          ,data= non_tumor, 
                        family = binomial(link ='logit'),
                        thresholds= seq(0,1, by = 0.01),
                        confidence.intervals = 0.95)
modul2<- decision_curve(status~ HMGCR
                          ,data= non_tumor, 
                        family = binomial(link ='logit'),
                        thresholds= seq(0,1, by = 0.01),
                        confidence.intervals = 0.95)
modul3<- decision_curve(status~PLIN2
                          ,data= non_tumor, 
                        family = binomial(link ='logit'),
                        thresholds= seq(0,1, by = 0.01),
                        confidence.intervals = 0.95)
modul4<- decision_curve(status~ CUX2 
                          ,data= non_tumor, 
                        family = binomial(link ='logit'),
                        thresholds= seq(0,1, by = 0.01),
                        confidence.intervals = 0.95)
modul5<- decision_curve(status~ PNPLA3
                          ,data= non_tumor, 
                        family = binomial(link ='logit'),
                        thresholds= seq(0,1, by = 0.01),
                        confidence.intervals = 0.95)

pdf("DCA1.pdf")
plot_decision_curve(list(modul1,modul2,modul3,modul4,modul5),
                    curve.names= c("complete nomogram","HMGCR","PLIN2","CUX2","PNPLA3"), xlab="Threshold probability",
                    cost.benefit.axis =FALSE,col=c( "Orange","HotPink","Turquoise","red","green"),
                    confidence.intervals=FALSE,
                    standardize = FALSE)
dev.off()









