annotate evaluation.R @ 4:62e7a8d66b1f draft

Uploaded
author nicolas
date Fri, 21 Oct 2016 06:25:28 -0400
parents
children 4f017b111d6c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
1
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
2 ########################################################
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
3 #
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
4 # creation date : 08/01/16
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
5 # last modification : 23/06/16
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
6 # author : Dr Nicolas Beaume
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
7 # owner : IRRI
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
8 #
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
9 ########################################################
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
10
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
11 log <- file(paste(getwd(), "log_evaluation.txt", sep="/"), open = "wt")
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
12 sink(file = log, type="message")
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
13
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
14 library("pROC")
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
15 library("randomForest")
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
16 library("miscTools")
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
17
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
18 predictionCorrelation <- function(prediction, obs) {
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
19 return(cor(prediction, obs, method = "pearson"))
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
20 }
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
21
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
22 r2.plot <- function(true, predicted, scatterplot=T) {
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
23 if(scatterplot) {
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
24 plot(true, predicted, xlab="trait value", ylab="predicted value", main="", pch=16,
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
25 ylim=c(min(min(true), min(predicted)), max(max(true), max(predicted))))
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
26 lines(true, true, col="red")
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
27 } else {
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
28 plot(true, ylim=c(min(min(true), min(predicted)), max(max(true), max(predicted))),
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
29 xlab="individual index", ylab="traitValue", type="l", main="")
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
30 lines(predicted, col="red")
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
31 legend("topright", legend = c("pedicted", "traitValue"), col = c("red", "black"), lty=c(1,1))
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
32 }
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
33 }
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
34
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
35 r2 <- function(target, prediction) {
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
36 sst <- sum((target-mean(target))^2)
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
37 ssr <- sum((target-prediction)^2)
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
38 return(1-ssr/sst)
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
39 }
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
40
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
41 ################################## main function ###########################
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
42
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
43 evaluatePredictions <- function(data, prediction=NULL, traitValue=NULL, doR2=F,
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
44 prefix="data", folds=NULL, classes=NULL, doCor=F, path=".") {
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
45 eval <- NULL
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
46 if(doR2) {
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
47 eval <- c(eval, list(r2=NULL))
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
48 }
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
49 if(doCor) {
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
50 eval <- c(eval, list(cor=NULL))
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
51 }
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
52 for (i in 1:length(folds)) {
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
53 train <- unlist(folds[-i])
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
54 test <- folds[[i]]
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
55 if(doR2) {
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
56 if(!is.null(traitValue)) {
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
57 jpeg(paste(path, "/", prefix,"fold_",i,"_scatterPlot.jpeg", sep=""))
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
58 eval$r2 <- c(eval$r2, r2(traitValue[test], prediction[[i]]))
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
59 r2.plot(traitValue[test], prediction[[i]])
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
60 dev.off()
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
61 } else {
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
62 eval$r2 <- c(eval$r2, NA)
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
63 }
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
64 }
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
65 if(doCor) {
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
66 if(!is.null(traitValue)) {
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
67 eval$cor <- c(eval$cor, cor(traitValue[test], prediction[[i]]))
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
68 } else {
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
69 eval$cor <- c(eval$cor, NA)
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
70 }
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
71 }
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
72 }
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
73 print(eval)
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
74 write.table(eval, file = paste(path,"/",prefix,"_evaluation.csv", sep=""), sep="\t", row.names = F)
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
75 }
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
76 ############################ main #############################
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
77 # evaluation.sh -i path_to_data -p prediction -f folds -t phenotype -r -c -a -n name -o path_to_result_directory
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
78 ## -i : path to the file that contains the genotypes.
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
79 # please note that the table must be called "encoded" when your datafile is saved into .rda (automatic if encode.R is used)
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
80
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
81 ## -p : prediction made through any methods
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
82 # please note that the table must be called "prediction" when your datafile is saved into .rda
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
83 # (automatic if prediction methods from this pipeline were used)
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
84
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
85 ## -f : index of the folds to which belong each individual
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
86 # please note that the list must be called "folds" (automatic if folds.R was used)
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
87
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
88 ## -t : phenotype of each individual
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
89 # please note that the table must be called "phenotype" when your datafile is saved into .rda (automatic if loadGenotype.R was used)
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
90
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
91 ## -r : flag to run a R2 evaluation
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
92
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
93 ## -c : flag to run a correlation evaluation
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
94
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
95 ## -n : prefix of the names of all result files
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
96
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
97 ## -o : path to the directory where the evaluation results are stored.
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
98 cmd <- commandArgs(trailingOnly = T)
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
99 source(cmd[1])
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
100 # set which evaluation are used
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
101 if(as.integer(doR2) == 1) {
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
102 doR2 <- T
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
103 }
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
104 if(as.integer(doCor) == 1) {
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
105 doCor <- T
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
106 }
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
107 # load genotype & phenotype
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
108 con = file(genotype)
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
109 genotype <- readLines(con = con, n = 1, ok=T)
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
110 close(con)
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
111 genotype <- read.table(genotype, sep="\t",h=T)
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
112 phenotype <- read.table(phenotype, sep="\t",h=T)[,1]
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
113 # load prediction
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
114 con = file(prediction)
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
115 prediction <- readLines(con = con, n = 1, ok=T)
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
116 close(con)
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
117 prediction <- readRDS(prediction)
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
118 # load folds
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
119 con = file(folds)
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
120 folds <- readLines(con = con, n = 1, ok=T)
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
121 close(con)
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
122 folds <- readRDS(folds)
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
123 evaluatePredictions(data=genotype, prediction=prediction, traitValue=phenotype, doR2=doR2,
62e7a8d66b1f Uploaded
nicolas
parents:
diff changeset
124 prefix=name, folds=folds, doCor=doCor, path=out)