Newer
Older
ErrorCrit_RMSE <- function(InputsCrit, OutputsModel, warnings = TRUE, verbose = TRUE) {
## Arguments check
if (!inherits(OutputsModel, "OutputsModel")) {
Delaigue Olivier
committed
stop("'OutputsModel' must be of class 'OutputsModel'")
OutputsCritCheck <- .ErrorCrit(InputsCrit = InputsCrit, crit = "RMSE")
if (!OutputsCritCheck$CritCompute) {
CritValue <- NA
## ErrorCrit
Numer <- sum((OutputsCritCheck$VarSim - OutputsCritCheck$VarObs)^2, na.rm = TRUE)
Denom <- sum(!is.na(OutputsCritCheck$VarObs))
if (Numer == 0) {
Crit <- 0
} else {
Crit <- sqrt(Numer / Denom)
}
if (is.numeric(Crit) & is.finite(Crit)) {
CritValue <- Crit
}
## Verbose
if (verbose) {
message("Crit. ", OutputsCritCheck$CritName, " = ", sprintf("%.4f", CritValue), "\n")
}
OutputsCrit <- list(CritValue = CritValue,
CritName = OutputsCritCheck$CritName,
CritBestValue = OutputsCritCheck$CritBestValue,
Multiplier = OutputsCritCheck$Multiplier,
Ind_notcomputed = OutputsCritCheck$Ind_TS_ignore)
class(OutputsCrit) <- c("RMSE", "ErrorCrit")
return(OutputsCrit)
}