additive_shap: Additive SHAP

View source: R/additive_shap.R

additive_shapR Documentation

Additive SHAP

Description

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

  • lm(),

  • glm(),

  • mgcv::gam(),

  • mgcv::bam(),

  • gam::gam(),

  • survival::coxph(), and

  • survival::survreg().

Usage

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

Arguments

object

Fitted additive model.

X

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

verbose

Set to FALSE to suppress messages.

...

Currently unused.

Details

The SHAP values are extracted via predict(object, newdata = X, type = "terms"), a logic adopted from 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).

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".

Examples

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

kernelshap documentation built on Nov. 5, 2025, 6:16 p.m.