| 4 | 1 | 
|  | 2 ######################################################## | 
|  | 3 # | 
|  | 4 # creation date : 08/01/16 | 
|  | 5 # last modification : 23/06/16 | 
|  | 6 # author : Dr Nicolas Beaume | 
|  | 7 # owner : IRRI | 
|  | 8 # | 
|  | 9 ######################################################## | 
|  | 10 | 
| 31 | 11 # compute correlation | 
| 4 | 12 predictionCorrelation <- function(prediction, obs) { | 
|  | 13   return(cor(prediction, obs, method = "pearson")) | 
|  | 14 } | 
|  | 15 | 
| 31 | 16 # compute r2 by computing the classic formula | 
|  | 17 # compare the sum of square difference from target to prediciton | 
|  | 18 # to the sum of square difference from target to the mean of the target | 
| 4 | 19 r2 <- function(target, prediction) { | 
|  | 20   sst <- sum((target-mean(target))^2) | 
|  | 21   ssr <- sum((target-prediction)^2) | 
|  | 22   return(1-ssr/sst) | 
|  | 23 } | 
|  | 24 | 
|  | 25 ################################## main function ########################### | 
|  | 26 | 
|  | 27 evaluatePredictions <- function(data, prediction=NULL, traitValue=NULL, doR2=F, | 
| 31 | 28                                 folds=NULL, classes=NULL, doCor=F) { | 
| 4 | 29   eval <- NULL | 
| 31 | 30   # case of r2 | 
| 4 | 31   if(doR2) { | 
|  | 32     eval <- c(eval, list(r2=NULL)) | 
|  | 33   } | 
|  | 34   if(doCor) { | 
|  | 35     eval <- c(eval, list(cor=NULL)) | 
|  | 36   } | 
|  | 37   for (i in 1:length(folds)) { | 
|  | 38     train <- unlist(folds[-i]) | 
|  | 39     test <- folds[[i]] | 
|  | 40     if(doR2) { | 
|  | 41       if(!is.null(traitValue)) { | 
|  | 42         eval$r2 <- c(eval$r2, r2(traitValue[test], prediction[[i]])) | 
|  | 43       } else { | 
|  | 44         eval$r2 <- c(eval$r2, NA) | 
|  | 45       } | 
|  | 46     } | 
| 31 | 47     # case of correlation | 
| 4 | 48     if(doCor) { | 
|  | 49       if(!is.null(traitValue)) { | 
|  | 50         eval$cor <- c(eval$cor, cor(traitValue[test], prediction[[i]])) | 
|  | 51       } else { | 
|  | 52         eval$cor <- c(eval$cor, NA) | 
|  | 53       } | 
|  | 54     } | 
|  | 55   } | 
| 31 | 56   # print output | 
| 4 | 57   print(eval) | 
| 31 | 58   if(doR2) { | 
|  | 59     print(paste("mean r2 : ", mean(eval$r2), "standard deviation :", sd(eval$r2))) | 
|  | 60   } | 
|  | 61   if(doCor) { | 
|  | 62     print(paste("mean correlation : ", mean(eval$cor), "standard deviation :", sd(eval$cor))) | 
|  | 63   } | 
| 4 | 64 } | 
|  | 65 ############################ main ############################# | 
|  | 66 | 
| 31 | 67 # load arguments | 
| 4 | 68 cmd <- commandArgs(trailingOnly = T) | 
|  | 69 source(cmd[1]) | 
|  | 70 # set which evaluation are used | 
|  | 71 if(as.integer(doR2) == 1) { | 
|  | 72   doR2 <- T | 
|  | 73 } | 
|  | 74 if(as.integer(doCor) == 1) { | 
|  | 75   doCor <- T | 
|  | 76 } | 
|  | 77 # load genotype & phenotype | 
|  | 78 con = file(genotype) | 
|  | 79 genotype <- readLines(con = con, n = 1, ok=T) | 
|  | 80 close(con) | 
|  | 81 genotype <- read.table(genotype, sep="\t",h=T) | 
|  | 82 phenotype <- read.table(phenotype, sep="\t",h=T)[,1] | 
|  | 83 # load prediction | 
|  | 84 con = file(prediction) | 
|  | 85 prediction <- readLines(con = con, n = 1, ok=T) | 
|  | 86 close(con) | 
|  | 87 prediction <- readRDS(prediction) | 
|  | 88 # load folds | 
|  | 89 con = file(folds) | 
|  | 90 folds <- readLines(con = con, n = 1, ok=T) | 
|  | 91 close(con) | 
|  | 92 folds <- readRDS(folds) | 
| 31 | 93 # evaluation | 
| 4 | 94 evaluatePredictions(data=genotype, prediction=prediction, traitValue=phenotype, doR2=doR2, | 
| 31 | 95                     folds=folds, doCor=doCor) |