## ----setup, include=FALSE----------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.width = 7, fig.height = 5 ) ## ----data--------------------------------------------------------------------- library(modelskill) set.seed(123) n <- 100 obs <- seq(0, 10, length.out = n) + rnorm(n, sd = 1) models <- list( Good = obs + rnorm(n, sd = 0.5), # Constant positive offset Biased = obs + 1, # Larger random errors Noisy = obs + rnorm(n, sd = 2) ) ## ----scatter------------------------------------------------------------------ plot_data <- data.frame( observed = rep(obs, times = length(models)), predicted = unlist(models, use.names = FALSE), model = rep(names(models), each = length(obs)) ) ggplot2::ggplot( plot_data, ggplot2::aes( x = observed, y = predicted, colour = model ) ) + ggplot2::geom_abline( slope = 1, intercept = 0, linetype = "dashed" ) + ggplot2::geom_point( alpha = 0.7, size = 1.5 ) + ggplot2::coord_equal() + ggplot2::theme_classic() + ggplot2::labs( x = "Observed", y = "Predicted", colour = "Model" ) ## ----rmse-good---------------------------------------------------------------- rmse( obs, models$Good ) ## ----rmse-compare------------------------------------------------------------- rmse( obs, models$Noisy ) ## ----rmse-mae----------------------------------------------------------------- rmse(obs, models$Noisy) mae(obs, models$Noisy) ## ----bias-example------------------------------------------------------------- bias( obs, models$Biased ) ## ----r2-versus-R2------------------------------------------------------------- r2( obs, models$Biased ) R2( obs, models$Biased ) ## ----efficiency-aliases------------------------------------------------------- c( R2 = R2(obs, models$Good), NSE = nse(obs, models$Good), MEC = mec(obs, models$Good) ) ## ----correlation-versus-ccc--------------------------------------------------- correlation( obs, models$Biased ) ccc( obs, models$Biased ) ## ----metrics------------------------------------------------------------------ model_metrics( models, obs, digits = 3 ) ## ----extended----------------------------------------------------------------- model_metrics( models, obs, extended = TRUE, digits = 3 ) ## ----mdae-example------------------------------------------------------------- mdae( obs, models$Noisy ) ## ----kge-example-------------------------------------------------------------- kge( obs, models$Good ) ## ----pinball-median----------------------------------------------------------- pinball_loss( obs, models$Good, level = 0.5 ) ## ----pinball-90, eval=FALSE--------------------------------------------------- # pinball_loss( # obs, # predicted_q90, # level = 0.90 # ) ## ----complementary-set-------------------------------------------------------- data.frame( bias = bias(obs, models$Good), mae = mae(obs, models$Good), rmse = rmse(obs, models$Good), correlation = correlation(obs, models$Good), R2 = R2(obs, models$Good), ccc = ccc(obs, models$Good) ) ## ----missing-values----------------------------------------------------------- obs_missing <- obs pred_missing <- models$Good pred_missing[c(5, 20)] <- NA rmse( obs_missing, pred_missing )