Skip to content

Commit

Permalink
Merge pull request #51 from mlr-org/pinball
Browse files Browse the repository at this point in the history
feat: add pinball
  • Loading branch information
be-marc authored Aug 20, 2024
2 parents ec92d86 + 5901c4b commit 0da8bbb
Show file tree
Hide file tree
Showing 32 changed files with 159 additions and 1 deletion.
1 change: 1 addition & 0 deletions DESCRIPTION
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ Collate:
'regr_mse.R'
'regr_msle.R'
'regr_pbias.R'
'regr_pinball.R'
'regr_rae.R'
'regr_rmse.R'
'regr_rmsle.R'
Expand Down
1 change: 1 addition & 0 deletions NAMESPACE
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ export(npv)
export(one_zero)
export(pbias)
export(phi)
export(pinball)
export(ppv)
export(prauc)
export(precision)
Expand Down
32 changes: 32 additions & 0 deletions R/regr_pinball.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#' @title Average Pinball Loss
#'
#' @details
#' The pinball loss for quantile regression is defined as \deqn{
#' \text{Average Pinball Loss} = \frac{1}{n} \sum_{i=1}^{n} w_{i}
#' \begin{cases}
#' q \cdot (t_i - r_i) & \text{if } t_i \geq r_i \\
#'(1 - q) \cdot (r_i - t_i) & \text{if } t_i < r_i
#' \end{cases}
#' }
#' where \eqn{q} is the quantile and \eqn{w_i} are normalized sample weights.
#'
#'
#' @templateVar mid pinball
#' @template regr_template
#'
#' @inheritParams regr_params
#'
#' @param alpha `numeric(1)`\cr
#' The quantile to compute the pinball loss.
#'
#' @template regr_example
#' @export
pinball = function(truth, response, sample_weights = NULL, alpha = 0.5, ...) {
assert_regr(truth, response = response)

diff = truth - response
wmean(ifelse(diff >= 0, alpha * diff, (1 - alpha) * -diff), sample_weights)
}

#' @include measures.R
add_measure(pinball, "Pinball", "regr", -Inf, Inf, TRUE)
1 change: 1 addition & 0 deletions man/ae.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/ape.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/bias.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/ktau.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/linex.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/mae.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/mape.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/maxae.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/maxse.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion man/measures.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/medae.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/medse.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/mse.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/msle.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/pbias.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

92 changes: 92 additions & 0 deletions man/pinball.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/rae.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/rmse.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/rmsle.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/rrse.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/rse.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/rsq.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/sae.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/se.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/sle.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/smape.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/srho.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/sse.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions tests/testthat/test_regr.R
Original file line number Diff line number Diff line change
Expand Up @@ -85,4 +85,10 @@ test_that("tests from Metrics", {
expect_equal(rsq(0:10, 2:12), 0.6)
expect_equal(rsq(seq(0, 2, 0.5), seq(0, 2, 0.5)), 1.0)
expect_equal(rsq(1:4, c(1, 2, 3, 5)), 0.8)

expect_equal(pinball(1:3, 1:3), 0)
expect_equal(pinball(1:3, c(0, 2, 3)), 1 / 6)
expect_equal(pinball(1:3, c(1, 2, 4)), 1 / 6)
expect_equal(pinball(1:3, c(1, 2, 4), alpha = 0.1), 0.3)
expect_equal(pinball(1:3, c(1, 2, 4), alpha = 0.4), 0.2)
})

0 comments on commit 0da8bbb

Please sign in to comment.