This function converts other error metrics such as MSE into a skill score. The reference or benchmark forecasting method is the Naive method for non-seasonal data, and the seasonal naive method for seasonal data.

skill_score(measure)

Arguments

measure

The accuracy measure to use in computing the skill score.

Examples

skill_score(MSE)
#> function (...) #> { #> score <- measure(...) #> bench <- list(...) #> lag <- bench$.period #> n <- length(bench$.train) #> y <- bench$.train #> bench$.fc <- rep_len(y[c(rep(NA, max(0, lag - n)), seq_len(min(n, #> lag)) + n - min(n, lag))], length(bench$.fc)) #> bench$.resid <- bench$.actual - bench$.fc #> e <- y - c(rep(NA, min(lag, n)), y[seq_len(length(y) - lag)]) #> mse <- mean(e^2, na.rm = TRUE) #> h <- length(bench$.actual) #> fullperiods <- (h - 1)/lag + 1 #> steps <- rep(seq_len(fullperiods), rep(lag, fullperiods))[seq_len(h)] #> bench$.dist <- distributional::dist_normal(bench$.fc, sqrt(mse * #> steps)) #> ref_score <- do.call(measure, bench) #> 1 - score/ref_score #> } #> <bytecode: 0x7fd5476f71e8> #> <environment: 0x7fd54b5edb90>
if (requireNamespace("fable", quietly = TRUE)) { library(fable) library(tsibble) lung_deaths <- as_tsibble(cbind(mdeaths, fdeaths)) lung_deaths %>% dplyr::filter(index < yearmonth("1979 Jan")) %>% model( ets = ETS(value ~ error("M") + trend("A") + season("A")), lm = TSLM(value ~ trend() + season()) ) %>% forecast(h = "1 year") %>% accuracy(lung_deaths, measures = list(skill = skill_score(MSE))) }
#> # A tibble: 4 x 4 #> .model key .type skill #> <chr> <chr> <chr> <dbl> #> 1 ets fdeaths Test 0.223 #> 2 ets mdeaths Test 0.446 #> 3 lm fdeaths Test 0.303 #> 4 lm mdeaths Test 0.494