Returns the Confidence (or Prediction) Interval (CI) associated with predictions made by a model.

get_predicted_ci(
  x,
  predictions = NULL,
  data = NULL,
  ci = 0.95,
  ci_type = "confidence",
  vcov_estimation = NULL,
  vcov_type = NULL,
  vcov_args = NULL,
  dispersion_method = "sd",
  ci_method = "quantile",
  ...
)

Arguments

x

A statistical model (can also be a data.frame, in which case the second argument has to be a model).

predictions

A vector of predicted values (as obtained by stats::fitted(), stats::predict() or get_predicted).

data

An optional data frame in which to look for variables with which to predict. If omitted, the data used to fit the model is used.

ci

The interval level (default 0.95, i.e., 95% CI).

ci_type

Can be "prediction" or "confidence". Prediction intervals show the range that likely contains the value of a new observation (in what range it would fall), whereas confidence intervals reflect the uncertainty around the estimated parameters (and gives the range of the link; for instance of the regression line in a linear regressions). Prediction intervals account for both the uncertainty in the model's parameters, plus the random variation of the individual values. Thus, prediction intervals are always wider than confidence intervals. Moreover, prediction intervals will not necessarily become narrower as the sample size increases (as they do not reflect only the quality of the fit). This applies mostly for "simple" linear models (like lm), as for other models (e.g., glm), prediction intervals are somewhat useless (for instance, for a binomial model for which the dependent variable is a vector of 1s and 0s, the prediction interval is... [0, 1]).

vcov_estimation

String, indicating the suffix of the vcov*()-function from the sandwich or clubSandwich package, e.g. vcov_estimation = "CL" (which calls vcovCL to compute clustered covariance matrix estimators), or vcov_estimation = "HC" (which calls vcovHC() to compute heteroskedasticity-consistent covariance matrix estimators).

vcov_type

Character vector, specifying the estimation type for the robust covariance matrix estimation (see vcovHC() or clubSandwich::vcovCR() for details).

vcov_args

List of named vectors, used as additional arguments that are passed down to the sandwich-function specified in vcov_estimation.

dispersion_method, ci_method

These arguments are only used in the context of bootstrapped and Bayesian models. Possible values are dispersion_method = c("sd", "mad") and ci_method = c("quantile", "hdi", "eti"). For the latter, the bayestestR package is required.

...

Not used for now.

Value

The Confidence (or Prediction) Interval (CI).

Examples

data(mtcars)

# Linear model
# ------------
x <- lm(mpg ~ cyl + hp, data = mtcars)
predictions <- predict(x)
ci_vals <- get_predicted_ci(x, predictions, ci_type = "prediction")
head(ci_vals)
#>                         SE    CI_low  CI_high
#> Mazda RX4         3.255505 14.558527 27.87504
#> Mazda RX4 Wag     3.255505 14.558527 27.87504
#> Datsun 710        3.305931 19.309850 32.83263
#> Hornet 4 Drive    3.255505 14.558527 27.87504
#> Hornet Sportabout 3.303717  8.687625 22.20134
#> Valiant           3.266957 14.630713 27.99407
ci_vals <- get_predicted_ci(x, predictions, ci_type = "confidence")
head(ci_vals)
#>                          SE   CI_low  CI_high
#> Mazda RX4         0.7281647 19.72752 22.70605
#> Mazda RX4 Wag     0.7281647 19.72752 22.70605
#> Datsun 710        0.9279509 24.17337 27.96911
#> Hornet 4 Drive    0.7281647 19.72752 22.70605
#> Hornet Sportabout 0.9200310 13.56281 17.32616
#> Valiant           0.7777664 19.72168 22.90310
ci_vals <- get_predicted_ci(x, predictions, ci = c(0.8, 0.9, 0.95))
head(ci_vals)
#>                          SE CI_low_0.8 CI_high_0.8 CI_low_0.9 CI_high_0.9
#> Mazda RX4         0.7281647   20.26184    22.17172   19.97954    22.45403
#> Mazda RX4 Wag     0.7281647   20.26184    22.17172   19.97954    22.45403
#> Datsun 710        0.9279509   24.85429    27.28818   24.49453    27.64794
#> Hornet 4 Drive    0.7281647   20.26184    22.17172   19.97954    22.45403
#> Hornet Sportabout 0.9200310   14.23793    16.65104   13.88124    17.00773
#> Valiant           0.7777664   20.29240    22.33238   19.99087    22.63391
#>                   CI_low_0.95 CI_high_0.95
#> Mazda RX4            19.72752     22.70605
#> Mazda RX4 Wag        19.72752     22.70605
#> Datsun 710           24.17337     27.96911
#> Hornet 4 Drive       19.72752     22.70605
#> Hornet Sportabout    13.56281     17.32616
#> Valiant              19.72168     22.90310

# Bootstrapped
# ------------
predictions <- get_predicted(x, iterations = 500)
get_predicted_ci(x, predictions)
#>           SE   CI_low  CI_high
#> 1  0.6778386 20.06367 22.73426
#> 2  0.6778386 20.06367 22.73426
#> 3  1.1213280 24.07299 28.19569
#> 4  0.6778386 20.06367 22.73426
#> 5  0.7137549 13.96361 16.74841
#> 6  0.7196399 20.11708 22.92205
#> 7  0.9616939 11.54478 15.32004
#> 8  1.1099003 24.70988 29.07236
#> 9  1.1281547 24.00743 28.15526
#> 10 0.5968210 19.90476 22.18073
#> 11 0.5968210 19.90476 22.18073
#> 12 0.6867313 13.94831 16.57341
#> 13 0.6867313 13.94831 16.57341
#> 14 0.6867313 13.94831 16.57341
#> 15 0.6619519 13.42214 15.93349
#> 16 0.7053541 13.08691 15.77129
#> 17 0.8151358 12.40637 15.55107
#> 18 1.1012410 24.63705 28.94998
#> 19 1.1440413 24.87906 29.34752
#> 20 1.1031298 24.65526 28.99487
#> 21 1.1356722 23.94017 28.10764
#> 22 0.9243855 14.17452 17.75612
#> 23 0.9243855 14.17452 17.75612
#> 24 0.9616939 11.54478 15.32004
#> 25 0.7137549 13.96361 16.74841
#> 26 1.1012410 24.63705 28.94998
#> 27 1.1152049 24.14757 28.24896
#> 28 1.2189054 23.41192 27.86701
#> 29 1.1785211 10.35989 15.04183
#> 30 0.8033095 18.06171 21.24781
#> 31 2.1096285  6.00274 14.50050
#> 32 1.1944721 23.58991 27.93128

if (require("bayestestR")) {
  ci_vals <- get_predicted_ci(x, predictions, ci = c(0.80, 0.95))
  head(ci_vals)
  bayestestR::reshape_ci(ci_vals)

  ci_vals <- get_predicted_ci(x,
    predictions,
    dispersion_method = "MAD",
    ci_method = "HDI"
  )
  head(ci_vals)
}
#> Loading required package: bayestestR
#>          SE   CI_low  CI_high
#> 1 0.6511853 20.08775 22.75861
#> 2 0.6511853 20.08775 22.75861
#> 3 1.1886593 24.12011 28.22016
#> 4 0.6511853 20.08775 22.75861
#> 5 0.6922916 13.92620 16.69426
#> 6 0.7042060 20.11663 22.92984


# Logistic model
# --------------
x <- glm(vs ~ wt, data = mtcars, family = "binomial")
predictions <- predict(x, type = "link")
ci_vals <- get_predicted_ci(x, predictions, ci_type = "prediction")
head(ci_vals)
#>                   CI_low CI_high
#> Mazda RX4           -Inf     Inf
#> Mazda RX4 Wag       -Inf     Inf
#> Datsun 710          -Inf     Inf
#> Hornet 4 Drive      -Inf     Inf
#> Hornet Sportabout   -Inf     Inf
#> Valiant             -Inf     Inf
ci_vals <- get_predicted_ci(x, predictions, ci_type = "confidence")
head(ci_vals)
#>                          SE     CI_low   CI_high
#> Mazda RX4         0.5623444 -0.3931282 1.8112213
#> Mazda RX4 Wag     0.4690190 -0.6974034 1.1411172
#> Datsun 710        0.7195076 -0.1279982 2.6924199
#> Hornet 4 Drive    0.4459072 -1.3016913 0.4462326
#> Hornet Sportabout 0.5021936 -1.8418839 0.1266787
#> Valiant           0.5094490 -1.8943152 0.1026881