R: Compute weighted expectations

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",
      "quantile"), probs = NULL, log_ratios = NULL)

    ## S3 method for class 'matrix'
    E_loo(x, psis_object, ..., type = c("mean", "variance",
      "quantile"), probs = NULL, log_ratios = NULL)

### Arguments

`x` | A numeric vector or matrix.
`psis_object` | An object returned by `psis`.
`...` | Arguments passed to individual methods.
`type` | The type of expectation to compute. The options are `"mean"`, `"variance"`, and `"quantile"`.
`probs` | For computing quantiles, a vector of probabilities.
`log_ratios` | Optionally, a vector or matrix (the same dimensions as `x`) of raw (not smoothed) log ratios. If working with log-likelihood values, the log ratios are the negative of those values. If `log_ratios` is specified we are able to compute Pareto k diagnostics specific to `E_loo`.

### Value

A named list with the following components:

`value`

  The result of the computation.

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

  For the default/vector method the `value` component is scalar, with one exception: when `type` is `"quantile"` and multiple values are specified in `probs` the `value` component is a vector with `length(probs)` elements.

`pareto_k`

  Function-specific diagnostic.

  If `log_ratios` is not specified when calling `E_loo`, `pareto_k` will be `NULL`. Otherwise, for the matrix method it will be a vector of length `ncol(x)` containing estimates of the shape parameter k of the generalized Pareto distribution. For the default/vector method, the estimate is a scalar.

### 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)
    dim(ll)

    r_eff <- relative_eff(exp(-ll), chain_id = rep(1:4, each = 1000))
    psis_object <- psis(log_ratios = -ll, 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 = "quantile", probs = 0.5) # median
    E_loo(yrep, psis_object, type = "quantile", probs = c(0.1, 0.9))

    # To get Pareto k diagnostic with E_loo we also need to provide the negative
    # log-likelihood values using the log_ratios argument.
    E_loo(yrep, psis_object, type = "mean", log_ratios = -ll)

[Package loo version 2.0.0 Index]