Learn R Programming

kernelshap (version 0.7.0)

additive_shap: Additive SHAP

Description

Exact additive SHAP assuming feature independence. The implementation works for models fitted via

Usage

additive_shap(object, X, verbose = TRUE, ...)

Value

An object of class "kernelshap" with the following components:

  • S: \((n \times p)\) matrix with SHAP values.

  • X: Same as input argument X.

  • baseline: The baseline.

  • exact: TRUE.

  • txt: Summary text.

  • predictions: Vector with predictions of X on the scale of "terms".

  • algorithm: "additive_shap".

Arguments

object

Fitted model object.

X

Dataframe with rows to be explained. Will be used like predict(object, newdata = X, type = "terms").

verbose

Set to FALSE to suppress messages and the progress bar.

...

Currently unused.

Details

The SHAP values are extracted via predict(object, newdata = X, type = "terms"), a logic heavily inspired by fastshap:::explain.lm(..., exact = TRUE). Models with interactions (specified via : or *), or with terms of multiple features like log(x1/x2) are not supported.

Note that the SHAP values obtained by additive_shap() are expected to match those of permshap() and kernelshap() as long as their background data equals the full training data (which is typically not feasible).

Examples

Run this code
# MODEL ONE: Linear regression
fit <- lm(Sepal.Length ~ ., data = iris)
s <- additive_shap(fit, head(iris))
s

# MODEL TWO: More complicated (but not very clever) formula
fit <- lm(
  Sepal.Length ~ poly(Sepal.Width, 2) + log(Petal.Length) + log(Sepal.Width),
  data = iris
)
s_add <- additive_shap(fit, head(iris))
s_add

# Equals kernelshap()/permshap() when background data is full training data
s_kernel <- kernelshap(
 fit, head(iris[c("Sepal.Width", "Petal.Length")]), bg_X = iris
)
all.equal(s_add$S, s_kernel$S)

Run the code above in your browser using DataLab