83
|
1 ########################################################
|
|
2 #
|
|
3 # creation date : 26/01/16
|
|
4 # last modification : 02/06/16
|
|
5 # author : Dr Nicolas Beaume
|
|
6 # owner : IRRI
|
|
7 #
|
|
8 ########################################################
|
|
9
|
|
10 library(rrBLUP)
|
|
11 suppressWarnings(suppressMessages(library(randomForest)))
|
|
12 library(e1071)
|
|
13 suppressWarnings(suppressMessages(library(glmnet)))
|
|
14 library(methods)
|
|
15
|
|
16
|
|
17 ############################ main #############################
|
|
18 classifierNames <- c("list", "randomForest", "svm", "glmnet")
|
|
19 # load argument
|
|
20 cmd <- commandArgs(trailingOnly = T)
|
|
21 source(cmd[1])
|
|
22 # load data
|
|
23 con = file(genotype)
|
|
24 genotype <- readLines(con = con, n = 1, ok=T)
|
|
25 close(con)
|
|
26 genotype <- read.table(genotype, sep="\t", h=T)
|
|
27 con = file(model)
|
|
28 model <- readLines(con = con, n = 1, ok=T)
|
|
29 close(con)
|
|
30 model <- readRDS(model)
|
|
31 # check if the classifier name is valid
|
|
32 if(all(is.na(match(class(model), classifierNames)))) {
|
|
33 stop(paste(class(model), "is not recognized as a valid model. Valid models are : ", classifierNames))
|
|
34 }
|
|
35 # run prediction according to the classifier
|
|
36 # rrBLUP prediction
|
|
37 if(any(class(model) == "list")) {
|
|
38 predictions <- as.matrix(genotype) %*% as.matrix(model$u)
|
|
39 predictions <- predictions[,1]+model$beta
|
|
40 predictions <- data.frame(lines=rownames(genotype), predictions=predictions)
|
|
41 # LASSO prediction
|
|
42 } else if(any(class(model) == "glmnet")) {
|
|
43 predictions <- predict(model, as.matrix(genotype), type = "response")
|
|
44 predictions <- data.frame(lines=rownames(genotype), predictions=predictions)
|
|
45 # SVM or RandomForest prediction (predict is a wrapper for many machine learning function)
|
|
46 } else {
|
|
47 predictions <- predict(model, genotype)
|
|
48 predictions <- data.frame(lines=names(predictions), predictions=predictions)
|
|
49 }
|
|
50 # save results
|
|
51 write.table(predictions, file=out, sep="\t", row.names = F)
|
|
52
|