Learn R Programming

loo (version 1.1.0)

E_loo: Compute weighted expectations

Description

The E_loo function computes weighted expectations (means, variances, quantiles) using the smoothed importance weights obtained from the PSIS procedure. The expectations estimated by the E_loo function assume that the PSIS approximation is working well. A small Pareto k estimate is necessary, but not sufficient, for E_loo to give reliable estimates. Additional diagnostic checks for gauging the reliability of the estimates are in development and will be added in a future release.

Usage

E_loo(x, lw, ...)

# S3 method for default E_loo(x, lw, ..., type = c("mean", "var", "quantile"), probs)

# S3 method for matrix E_loo(x, lw, ..., type = c("mean", "var", "quantile"), probs)

Arguments

x

A numeric matrix or vector.

lw

A numeric matrix (or vector) of smoothed log-weights with the same dimensions (or length) as x. Typically this will be the "lw_smooth" element of the list returned by psislw.

...

For the generic function, arguments passed to the individual methods.

type

The type of expectation to compute. The options are "mean", "var" (variance), and "quantile".

probs

A vector of probabilities. Ignored unless type is "quantile".

Value

The matrix method returns a vector with ncol(x) elements, with one exception: when type is "quantile" and multiple values are specified in probs the returned object is a length(probs) by ncol(x) matrix.

The default/vector method returns a scalar, with one exception: when type is "quantile" and multiple values are specified in probs the returned object is a vector with length(probs) elements.

Examples

Run this code
# NOT RUN {
# Use rstanarm package to quickly fit a model and get both a log-likelihood
# matrix and draws from the posterior predictive distribution
library("rstanarm")

# data from help("lm")
ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14)
trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69)
d <- data.frame(
  weight = c(ctl, trt),
  group = gl(2, 10, 20, labels = c("Ctl","Trt"))
)
fit <- stan_glm(weight ~ group, data = d)
yrep <- posterior_predict(fit)
dim(yrep)

ll <- log_lik(fit)
lw <- psislw(-ll, cores = 2)$lw_smooth
dim(lw)

E_loo(yrep, lw, type = "mean")
E_loo(yrep, lw, type = "var")
E_loo(yrep, lw, type = "quantile", probs = 0.5) # median
E_loo(yrep, lw, type = "quantile", probs = c(0.1, 0.9))
# }
# NOT RUN {
# }

Run the code above in your browser using DataLab