annotate evaluation.R @ 31:4f017b111d6c draft

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