E_loo {loo}R Documentation

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, ...)

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

## S3 method for class '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


# 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))



[Package loo version 1.1.0 Index]