Summarise scores as produced by score().
summarise_scores relies on a way to identify the names of the scores and
distinguish them from columns that denote the unit of a single forecast.
Internally, this is done via a stored attribute, metrics that stores
the names of the scores. This means, however, that you need to be careful
with renaming scores after they have been produced by score(). If you
do, you also have to manually update the attribute by calling
attr(scores, "metrics") <- new_names.
Usage
summarise_scores(scores, by = "model", fun = mean, ...)
summarize_scores(scores, by = "model", fun = mean, ...)Arguments
- scores
An object of class
scores(a data.table with scores and an additional attributemetricsas produced byscore()).- by
Character vector with column names to summarise scores by. Default is "model", i.e. scores are summarised by the "model" column.
- fun
A function used for summarising scores. Default is
mean().- ...
Additional parameters that can be passed to the summary function provided to
fun. For more information see the documentation of the respective function.
Value
A data.table with summarised scores. Scores are summarised according
to the names of the columns of the original data specified in by
using the fun passed to summarise_scores().
Examples
library(magrittr) # pipe operator
scores <- example_sample_continuous %>%
as_forecast_sample() %>%
score()
#> ℹ Some rows containing NA values may be removed. This is fine if not
#> unexpected.
# get scores by model
summarise_scores(scores, by = "model")
#> model bias dss crps overprediction
#> <char> <num> <num> <num> <num>
#> 1: EuroCOVIDhub-ensemble 0.009765625 16.40496 9876.95886 5281.81845
#> 2: EuroCOVIDhub-baseline 0.177734375 NaN 15309.68627 6701.83844
#> 3: epiforecasts-EpiNow2 -0.024898785 26.10137 11901.43354 6986.16572
#> 4: UMass-MechBayes -0.026953125 10.08582 60.19018 11.20505
#> underprediction dispersion log_score mad ae_median se_mean
#> <num> <num> <num> <num> <num> <num>
#> 1: 2433.20525 2161.93515 10.747811 8763.6176 12406.03100 2.103026e+09
#> 2: 5864.53649 2743.31134 Inf 9680.3792 18932.50196 2.885063e+09
#> 3: 1740.93388 3174.33393 Inf 12999.5404 14680.12285 3.152268e+09
#> 4: 19.28195 29.70318 5.941622 123.6211 79.66001 1.371418e+04
# get scores by model and target type
summarise_scores(scores, by = c("model", "target_type"))
#> model target_type bias dss crps
#> <char> <char> <num> <num> <num>
#> 1: EuroCOVIDhub-ensemble Cases -0.04648437 22.89997 19703.05522
#> 2: EuroCOVIDhub-baseline Cases 0.03671875 NaN 30453.58346
#> 3: epiforecasts-EpiNow2 Cases -0.03867188 40.87716 22896.51608
#> 4: EuroCOVIDhub-ensemble Deaths 0.06601562 9.90995 50.86249
#> 5: EuroCOVIDhub-baseline Deaths 0.31875000 12.99360 165.78907
#> 6: UMass-MechBayes Deaths -0.02695313 10.08582 60.19018
#> 7: epiforecasts-EpiNow2 Deaths -0.01008403 10.20807 74.79013
#> overprediction underprediction dispersion log_score mad ae_median
#> <num> <num> <num> <num> <num> <num>
#> 1: 10552.97603 4861.015121 4289.06407 15.633420 17385.2629 24749.39707
#> 2: 13346.03509 11727.330575 5380.21780 Inf 18982.2128 37648.01693
#> 3: 13462.90822 3346.583024 6087.02483 Inf 24929.3438 28233.04536
#> 4: 10.66088 5.395380 34.80623 5.862203 141.9723 62.66492
#> 5: 57.64179 1.742401 106.40489 6.977391 378.5457 216.98699
#> 6: 11.20505 19.281946 29.70318 5.941622 123.6211 79.66001
#> 7: 19.58555 13.849095 41.35549 6.024092 167.4829 102.18939
#> se_mean
#> <num>
#> 1: 4.206042e+09
#> 2: 5.769964e+09
#> 3: 6.082863e+09
#> 4: 1.080233e+04
#> 5: 1.622417e+05
#> 6: 1.371418e+04
#> 7: 3.243111e+04
# get standard deviation
summarise_scores(scores, by = "model", fun = sd)
#> model bias dss crps overprediction
#> <char> <num> <num> <num> <num>
#> 1: EuroCOVIDhub-ensemble 0.5468290 14.869520 39368.24836 37275.23950
#> 2: EuroCOVIDhub-baseline 0.5457971 NA 45020.82814 39070.74445
#> 3: epiforecasts-EpiNow2 0.6083410 108.130107 44957.07746 40776.81690
#> 4: UMass-MechBayes 0.6221914 2.248998 49.62465 21.34675
#> underprediction dispersion log_score mad ae_median se_mean
#> <num> <num> <num> <num> <num> <num>
#> 1: 8634.87723 5163.42293 21.510119 19799.1620 42801.64123 1.564286e+10
#> 2: 20537.03929 3664.87255 NaN 13610.4174 49458.36446 1.760651e+10
#> 3: 8096.39644 7266.11787 NaN 29616.1714 51129.54601 2.209086e+10
#> 4: 36.98584 29.60927 1.126019 123.3465 76.09471 2.994664e+04
# round digits
summarise_scores(scores, by = "model") %>%
summarise_scores(fun = signif, digits = 2)
#> model bias dss crps overprediction underprediction
#> <char> <num> <num> <num> <num> <num>
#> 1: EuroCOVIDhub-ensemble 0.0098 16 9900 5300 2400
#> 2: EuroCOVIDhub-baseline 0.1800 NaN 15000 6700 5900
#> 3: epiforecasts-EpiNow2 -0.0250 26 12000 7000 1700
#> 4: UMass-MechBayes -0.0270 10 60 11 19
#> dispersion log_score mad ae_median se_mean
#> <num> <num> <num> <num> <num>
#> 1: 2200 11.0 8800 12000 2.1e+09
#> 2: 2700 Inf 9700 19000 2.9e+09
#> 3: 3200 Inf 13000 15000 3.2e+09
#> 4: 30 5.9 120 80 1.4e+04