rm(list=ls(all=TRUE)) library(caret) library(ggplot2) library(reshape2) library(randomForest) library(varSelRF) library(gplots) ############################################################################ data<-read.table("CBGS_1.txt", header=T,sep="\t",row.names=1) X<-data[,2:ncol(data)] CBGS_1<-scale(X) y<-as.factor(data[,1]) dim(CBGS_1) length(y) ################################################## #### Random forest application ################################################## rfRes<-randomForest(x=CBGS_1,y=y,importance=T) rfRes varImpPlot(rfRes) imp<-rfRes$importance OOB<-rfRes$err.rate*100 confusionMatrix<-rfRes$confusion write.csv(imp,"Imp_Data_CBGS_1.csv") write.csv(confusionMatrix,"confusionMatrix_CBGS_1.csv") write.csv(OOB[500,1],"OOB_error_CBGS_1.csv") ################### variable selection ############################################## rf.vs1 <- varSelRF(CBGS_1, as.factor(y), ntree = 500, ntreeIterat = 300,vars.drop.frac = 0.2) rf.vs1 selected<-rf.vs1$selected.vars Class<-data[,1] newDat<-cbind(Class,data[,selected]) val<-scale(data[,selected]) plot(newDat) ############################# Some vizualization with selected data ################# df.m <- melt(newDat, id.var = "Class") p <- ggplot(data = df.m, aes(x=variable, y=value)) + geom_boxplot(aes(fill=Class)) p1<-p + facet_wrap( ~ variable, scales="free") ggsave(p1, file="boxPlot with selected.pdf") write.csv(selected,"selected.csv") write.csv(data[,selected],"selected_with_data_CBGS_1.csv") write.csv(newDat,"selected_with_y_CBGS_1.csv") ######################################################################################## # Itarate the model with selected variables and check how much variation is explained ####################################################################################### rfRes1<-randomForest(x=data[,selected],y=y,importance=T) rfRes1 varImpPlot(rfRes1) imp1<-rfRes1$importance OOB1<-rfRes1$err.rate*100 write.csv(imp1,"Imp_Data_after_Selection_CBGS_1.csv") write.csv(confusionMatrix,"confusionMatrix_Data_after_Selection_CBGS_1.csv") write.csv(OOB1[500,1],"OOB_error_after_Selection_CBGS_1.csv") ############################################################################################### ## ## Permutation / Randomization test for lipidomics data ## ################################################################################################ totiter<-1000 err<-matrix(data=NA,nrow=dim(X)[2],ncol=totiter) RF_Imp<-matrix(data=NA,nrow=dim(X)[2],ncol=totiter) # selected<-matrix(data=NA,nrow=dim(X)[2],ncol=totiter) y2<-matrix(data=NA,nrow=dim(X)[1],ncol=totiter) RF_Imp1<-matrix(data=NA,nrow=dim(X)[2],ncol=totiter) RF_Imp2<-matrix(data=NA,nrow=dim(X)[2],ncol=totiter) for(l in 1:totiter) { index<-l print(l) y1<-sample(y) y2[,index]<-y1 mydata<-cbind(y1,CBGS_1) dim(mydata) rfres<-randomForest(y=y1,x=CBGS_1,data=mydata,importance=T,na.action=na.omit) #RF_OP<-rfres$predicted err[,index]<-rfres$err.rate[500,1][1] imp<-rfres$importance RF_Imp1[,index]<-imp[,1] RF_Imp2[,index]<-imp[,2] classError<-as.vector(t(err[1,]*100)) } plot(classError, pch=19) write.csv(classError,"ClassError_perm_CBGS_1.csv") write.csv(RF_Imp1,"RF_imp_1_perm_CBGS_1.csv") write.csv(RF_Imp1,"RF_imp_2_perm_CBGS_1.csv") ##################################################################################################### # # Prediting CBGS data 1 as a training and CBGS 2 as test data # # ##################################################################################################### data2<-read.table("CBGS_2.txt", header=T,sep="\t",row.names=1) X<-data2[,2:ncol(data2)] CBGS_2<-scale(X) y_CBGS_2<-as.factor(data2[,1]) dim(CBGS_2) length(y_CBGS_2) pred <- predict(rfRes, newdata = CBGS_2) # without variable selection table(pred,data2[,1]) accuracy<-((24+33+4)/nrow(data2))*100 # accuracy ##################################################################################################### # # Prediting CBGS data 1 as a training and Pops as test data # # ##################################################################################################### data3<-read.table("POPS.txt", header=T,sep="\t",row.names=1) X<-data3[,2:ncol(data3)] CBGS_3<-scale(X) y_CBGS_3<-as.factor(data3[,1]) dim(CBGS_3) length(y_CBGS_3) pred3 <- predict(rfRes, newdata = CBGS_3) # without variable selection table(pred3,data3[,1]) accuracy<-((11+13+3)/nrow(data3))*100 # accuracy