71 lines
2.0 KiB
R
71 lines
2.0 KiB
R
library(rpart)
|
|
library(rpart.plot)
|
|
|
|
accuracy <- function(x,rp){
|
|
# Accuracy = (TP + TN)/(TP + TN + FP + FP)
|
|
# TP: True Positive
|
|
# TN: True Negative
|
|
# FP: False Positive
|
|
# FN: False Negative
|
|
|
|
predicted <- rpart.predict(rp,type = "vector")
|
|
predicted[predicted==1] <- 0
|
|
predicted[predicted==2] <- 1
|
|
(sum(x*predicted) + sum((x + predicted) == 0)) / length(x)
|
|
}
|
|
|
|
zero_var <- function(m){
|
|
apply(m,2, function(v){
|
|
var(v) != 0
|
|
})
|
|
|
|
}
|
|
|
|
decbin <- function(decnum){
|
|
if(decnum < 2){
|
|
return(decnum)
|
|
}
|
|
c(decbin((decnum %/% 2)),decnum %% 2)
|
|
}
|
|
|
|
decpad <- function(decnum,len){
|
|
binrep <- decbin(decnum)
|
|
c(rep(0,len-length(binrep)),binrep)
|
|
}
|
|
|
|
|
|
tree_per_const <- function(results="result.csv",output ="tree_per_const.pdf",
|
|
parameters_file="Martonvasar_maize.set"){
|
|
varname <-readLines(parameters_file)[1]
|
|
parameters <- read.csv(parameters_file,skip=1,stringsAsFactors=FALSE)
|
|
|
|
|
|
results <- read.csv(results, stringsAsFactors=FALSE)
|
|
# likelihoods <- results[,ncol(results)-3]
|
|
# results <- results[likelihoods>=quantile(likelihoods,0.95),]
|
|
len <- round(log(max(results$failType),2))
|
|
failTypes <- do.call(rbind,lapply(results$failType,function(x){decpad(x,len)}))
|
|
sapply(1:len, function(const){
|
|
nonzero <- results[,1:(ncol(results)-4)]
|
|
nonzero <- nonzero[,-1]
|
|
nonzero <- nonzero[,zero_var(nonzero)]
|
|
colnames(nonzero) <- gsub("__.*","",colnames(nonzero))
|
|
constraint <- failTypes[,const]
|
|
baseTable <- cbind.data.frame(nonzero,constraint = as.factor(constraint))
|
|
tryCatch({
|
|
rp <- rpart(constraint ~ .,data = baseTable)
|
|
accuracy(constraint, rp)
|
|
}, error = function(e){NA})
|
|
})
|
|
}
|
|
|
|
results <- matrix(nrow=10,ncol=4)
|
|
row.names(results) <- 1:10
|
|
colnames(results) <- c("Harvest Index", "LAI", "Root depth in phen. 5", "Flowering date")
|
|
for(i in 1:10){
|
|
setwd(as.character(i))
|
|
results[i,] <- tree_per_const(parameters_file="Martonvasar_maize_after_tree.set")
|
|
setwd("../")
|
|
}
|
|
results
|