Function plot.ceteris_paribus_explainer
plots Individual Variable Profiles for selected observations.
Various parameters help to decide what should be plotted, profiles, aggregated profiles, points or rugs.
Find more details in Ceteris Paribus Chapter.
# S3 method for ceteris_paribus_explainer
plot(
x,
...,
size = 1,
alpha = 1,
color = "#46bac2",
variable_type = "numerical",
facet_ncol = NULL,
facet_scales = NULL,
variables = NULL,
title = "Ceteris Paribus profile",
subtitle = NULL,
categorical_type = "profiles"
)
a ceteris paribus explainer produced with function ceteris_paribus()
other explainers that shall be plotted together
a numeric. Size of lines to be plotted
a numeric between 0
and 1
. Opacity of lines
a character. Either name of a color or name of a variable that should be used for coloring
a character. If numerical
then only numerical variables will be plotted.
If categorical
then only categorical variables will be plotted.
number of columns for the facet_wrap
a character value for the facet_wrap
.
Default is "free_x"
, but "free_y"
if categorical_type="bars"
.
if not NULL
then only variables
will be presented
a character. Plot title. By default "Ceteris Paribus profile".
a character. Plot subtitle. By default NULL
- then subtitle is set to "created for the XXX, YYY model",
where XXX, YYY are labels of given explainers.
a character. How categorical variables shall be plotted? Either "profiles"
(default) or "bars"
or "lines"
.
a ggplot2
object
Explanatory Model Analysis. Explore, Explain, and Examine Predictive Models. https://ema.drwhy.ai/
library("DALEX")
model_titanic_glm <- glm(survived ~ gender + age + fare,
data = titanic_imputed, family = "binomial")
explain_titanic_glm <- explain(model_titanic_glm,
data = titanic_imputed[,-8],
y = titanic_imputed[,8],
verbose = FALSE)
cp_glm <- ceteris_paribus(explain_titanic_glm, titanic_imputed[1,])
cp_glm
#> Top profiles :
#> gender age class embarked fare sibsp parch _yhat_ _vname_
#> 1 female 42.0000000 3rd Southampton 7.11 0 0 0.6667679 gender
#> 1.1 male 42.0000000 3rd Southampton 7.11 0 0 0.1827040 gender
#> 11 male 0.1666667 3rd Southampton 7.11 0 0 0.2352754 age
#> 1.110 male 2.0000000 3rd Southampton 7.11 0 0 0.2327665 age
#> 1.2 male 4.0000000 3rd Southampton 7.11 0 0 0.2300508 age
#> 1.3 male 7.0000000 3rd Southampton 7.11 0 0 0.2260191 age
#> _ids_ _label_
#> 1 1 lm
#> 1.1 1 lm
#> 11 1 lm
#> 1.110 1 lm
#> 1.2 1 lm
#> 1.3 1 lm
#>
#>
#> Top observations:
#> gender age class embarked fare sibsp parch _yhat_ _label_ _ids_
#> 1 male 42 3rd Southampton 7.11 0 0 0.182704 lm 1
plot(cp_glm, variables = "age")
# \donttest{
library("ranger")
model_titanic_rf <- ranger(survived ~., data = titanic_imputed, probability = TRUE)
explain_titanic_rf <- explain(model_titanic_rf,
data = titanic_imputed[,-8],
y = titanic_imputed[,8],
label = "ranger forest",
verbose = FALSE)
selected_passangers <- select_sample(titanic_imputed, n = 100)
cp_rf <- ceteris_paribus(explain_titanic_rf, selected_passangers)
cp_rf
#> Top profiles :
#> gender age class embarked fare sibsp parch _yhat_
#> 515 female 45 2nd Southampton 10.1000 0 0 0.7957940
#> 515.1 male 45 2nd Southampton 10.1000 0 0 0.1150837
#> 604 female 17 3rd Southampton 7.1701 1 0 0.4422906
#> 604.1 male 17 3rd Southampton 7.1701 1 0 0.1153614
#> 1430 female 25 engineering crew Southampton 0.0000 0 0 0.7682655
#> 1430.1 male 25 engineering crew Southampton 0.0000 0 0 0.2385723
#> _vname_ _ids_ _label_
#> 515 gender 515 ranger forest
#> 515.1 gender 515 ranger forest
#> 604 gender 604 ranger forest
#> 604.1 gender 604 ranger forest
#> 1430 gender 1430 ranger forest
#> 1430.1 gender 1430 ranger forest
#>
#>
#> Top observations:
#> gender age class embarked fare sibsp parch _yhat_
#> 515 male 45 2nd Southampton 10.1000 0 0 0.1150837
#> 604 male 17 3rd Southampton 7.1701 1 0 0.1153614
#> 1430 male 25 engineering crew Southampton 0.0000 0 0 0.2385723
#> 865 male 20 3rd Cherbourg 7.0406 0 0 0.1160834
#> 452 female 17 3rd Queenstown 7.1408 0 0 0.6609725
#> 1534 male 38 victualling crew Southampton 0.0000 0 0 0.1725586
#> _label_ _ids_
#> 515 ranger forest 1
#> 604 ranger forest 2
#> 1430 ranger forest 3
#> 865 ranger forest 4
#> 452 ranger forest 5
#> 1534 ranger forest 6
plot(cp_rf, variables = "age") +
show_observations(cp_rf, variables = "age") +
show_rugs(cp_rf, variables = "age", color = "red")
selected_passangers <- select_sample(titanic_imputed, n = 1)
selected_passangers
#> gender age class embarked fare sibsp parch survived
#> 515 male 45 2nd Southampton 10.1 0 0 0
cp_rf <- ceteris_paribus(explain_titanic_rf, selected_passangers)
plot(cp_rf) +
show_observations(cp_rf)
plot(cp_rf, variables = "age") +
show_observations(cp_rf, variables = "age")
plot(cp_rf, variables = "class")
#> 'variable_type' changed to 'categorical' due to lack of numerical variables.
plot(cp_rf, variables = c("class", "embarked"), facet_ncol = 1)
#> 'variable_type' changed to 'categorical' due to lack of numerical variables.
plot(cp_rf, variables = c("class", "embarked"), facet_ncol = 1, categorical_type = "bars")
#> 'variable_type' changed to 'categorical' due to lack of numerical variables.
plotD3(cp_rf, variables = c("class", "embarked", "gender"),
variable_type = "categorical", scale_plot = TRUE,
label_margin = 70)
# }