Learn R Programming

scoringfunctions (version 1.1)

bregman1_sf: Bregman scoring function (type 1)

Description

The function bregman1_sf computes the Bregman scoring function when \(y\) materialises and \(x\) is the predictive mean functional.

The Bregman scoring function is defined by eq. (18) in Gneiting (2011) and the form implemented here for \(\phi(x) = |x|^a\) is defined by eq. (19) in Gneiting (2011).

Usage

bregman1_sf(x, y, a)

Value

Vector of Bregman losses.

Arguments

x

Predictive mean functional (prediction). It can be a vector of length \(n\) (must have the same length as \(y\)).

y

Realisation (true value) of process. It can be a vector of length \(n\) (must have the same length as \(x\)).

a

It can be a vector of length \(n\) (must have the same length as \(y\)).

Details

The Bregman scoring function (type 1) is defined by:

$$ S(x, y, a) := |y|^a - |x|^a - a \textnormal{sign}(x) |x|^{a - 1} (y - x) $$

Domain of function:

$$x \in \mathbb{R}$$

$$y \in \mathbb{R}$$

$$a > 1$$

Range of function:

$$S(x, y, a) \geq 0, \forall x, y \in \mathbb{R}, a > 1$$

References

Banerjee A, Guo X, Wang H (2005) On the optimality of conditional expectation as a Bregman predictor. IEEE Transactions on Information Theory 51(7):2664--2669. tools:::Rd_expr_doi("10.1109/TIT.2005.850145").

Gneiting T (2011) Making and evaluating point forecasts. Journal of the American Statistical Association 106(494):746--762. tools:::Rd_expr_doi("10.1198/jasa.2011.r10138").

Savage LJ (1971) Elicitation of personal probabilities and expectations. Journal of the American Statistical Association 66(337):783--810. tools:::Rd_expr_doi("10.1080/01621459.1971.10482346").

Examples

Run this code
# Compute the Bregman scoring function (type 1).

df <- data.frame(
    y = rep(x = 0, times = 7),
    x = c(-3, -2, -1, 0, 1, 2, 3),
    a = rep(x = 3, times = 7)
)

df$bregman1_penalty <- bregman1_sf(x = df$x, y = df$y, a = df$a)

print(df)

# Equivalence of Bregman scoring function (type 1) and squared error scoring
# function, when a = 2.

set.seed(12345)

n <- 100

x <- runif(n, -20, 20)
y <- runif(n, -20, 20)
a <- rep(x = 2, times = n)

u <- bregman1_sf(x = x, y = y, a = a)

v <- serr_sf(x = x, y = y)

max(abs(u - v)) # values are slightly higher than 0 due to rounding error
min(abs(u - v))

Run the code above in your browser using DataLab