E_loo {loo} | R Documentation |
Compute weighted expectations
Description
The E_loo()
function computes weighted expectations (means, variances,
quantiles) using the importance weights obtained from the
PSIS smoothing 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, psis_object, ...)
## Default S3 method:
E_loo(
x,
psis_object,
...,
type = c("mean", "variance", "sd", "quantile"),
probs = NULL,
log_ratios = NULL
)
## S3 method for class 'matrix'
E_loo(
x,
psis_object,
...,
type = c("mean", "variance", "sd", "quantile"),
probs = NULL,
log_ratios = NULL
)
Arguments
x |
A numeric vector or matrix. |
psis_object |
An object returned by |
... |
Arguments passed to individual methods. |
type |
The type of expectation to compute. The options are
|
probs |
For computing quantiles, a vector of probabilities. |
log_ratios |
Optionally, a vector or matrix (the same dimensions as |
Value
A named list with the following components:
value
-
The result of the computation.
For the matrix method,
value
is a vector withncol(x)
elements, with one exception: whentype="quantile"
and multiple values are specified inprobs
thevalue
component of the returned object is alength(probs)
byncol(x)
matrix.For the default/vector method the
value
component is scalar, with one exception: whentype="quantile"
and multiple values are specified inprobs
thevalue
component is a vector withlength(probs)
elements. pareto_k
-
Function-specific diagnostic.
For the matrix method it will be a vector of length
ncol(x)
containing estimates of the shape parameterk
of the generalized Pareto distribution. For the default/vector method, the estimate is a scalar. Iflog_ratios
is not specified when callingE_loo()
, the smoothed log-weights are used to estimate Pareto-k's, which may produce optimistic estimates.For
type="mean"
,type="var"
, andtype="sd"
, the returned Pareto-k is usually the maximum of the Pareto-k's for the left and right tail ofhr
and the right tail ofr
, wherer
is the importance ratio andh=x
fortype="mean"
andh=x^2
fortype="var"
andtype="sd"
. Ifh
is binary, constant, or not finite, or iftype="quantile"
, the returned Pareto-k is the Pareto-k for the right tail ofr
.
Examples
if (requireNamespace("rstanarm", quietly = TRUE)) {
# 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, refresh = 0)
yrep <- posterior_predict(fit)
dim(yrep)
log_ratios <- -1 * log_lik(fit)
dim(log_ratios)
r_eff <- relative_eff(exp(-log_ratios), chain_id = rep(1:4, each = 1000))
psis_object <- psis(log_ratios, r_eff = r_eff, cores = 2)
E_loo(yrep, psis_object, type = "mean")
E_loo(yrep, psis_object, type = "var")
E_loo(yrep, psis_object, type = "sd")
E_loo(yrep, psis_object, type = "quantile", probs = 0.5) # median
E_loo(yrep, psis_object, type = "quantile", probs = c(0.1, 0.9))
# We can get more accurate Pareto k diagnostic if we also provide
# the log_ratios argument
E_loo(yrep, psis_object, type = "mean", log_ratios = log_ratios)
}