annotate evaluation.R @ 75:dcbee2f7b600 draft

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