Plot model coefficients
ggcoef_model( model, tidy_fun = broom::tidy, conf.int = TRUE, conf.level = 0.95, exponentiate = FALSE, variable_labels = NULL, term_labels = NULL, interaction_sep = " * ", categorical_terms_pattern = "{level}", add_reference_rows = TRUE, no_reference_row = NULL, intercept = FALSE, include = dplyr::everything(), significance = 1  conf.level, significance_labels = NULL, show_p_values = TRUE, signif_stars = TRUE, return_data = FALSE, ... ) ggcoef_compare( models, type = c("dodged", "faceted"), tidy_fun = broom::tidy, conf.int = TRUE, conf.level = 0.95, exponentiate = FALSE, variable_labels = NULL, term_labels = NULL, interaction_sep = " * ", categorical_terms_pattern = "{level}", add_reference_rows = TRUE, no_reference_row = NULL, intercept = FALSE, include = dplyr::everything(), significance = 1  conf.level, significance_labels = NULL, return_data = FALSE, ... ) ggcoef_multinom( model, type = c("dodged", "faceted"), y.level_label = NULL, tidy_fun = broom::tidy, conf.int = TRUE, conf.level = 0.95, exponentiate = FALSE, variable_labels = NULL, term_labels = NULL, interaction_sep = " * ", categorical_terms_pattern = "{level}", add_reference_rows = TRUE, no_reference_row = NULL, intercept = FALSE, include = dplyr::everything(), significance = 1  conf.level, significance_labels = NULL, show_p_values = TRUE, signif_stars = TRUE, return_data = FALSE, ... ) ggcoef_plot( data, x = "estimate", y = "label", exponentiate = FALSE, point_size = 2, point_stroke = 2, point_fill = "white", colour = NULL, colour_guide = TRUE, colour_lab = "", colour_labels = ggplot2::waiver(), shape = "significance", shape_values = c(16, 21), shape_guide = TRUE, shape_lab = "", errorbar = TRUE, errorbar_height = 0.1, errorbar_coloured = FALSE, stripped_rows = TRUE, strips_odd = "#11111111", strips_even = "#00000000", vline = TRUE, vline_colour = "grey50", dodged = FALSE, dodged_width = 0.8, facet_row = "var_label", facet_col = NULL, facet_labeller = "label_value" )
model  a regression model object 

tidy_fun  option to specify a custom tidier function 
conf.int  should confidence intervals be computed? (see 
conf.level  the confidence level to use for the confidence
interval if 
exponentiate  if 
variable_labels  a named list or a named vector of custom variable labels 
term_labels  a named list or a named vector of custom term labels 
interaction_sep  separator for interaction terms 
categorical_terms_pattern  a glue pattern for
labels of categorical terms with treatment or sum contrasts
(see 
add_reference_rows  should reference rows be added? 
no_reference_row  variables (accepts tidyselect notation)
for those no reference row should be added, when 
intercept  should the intercept(s) be included? 
include  variables to include. Accepts tidyselect
syntax. Use 
significance  level (between 0 and 1) below which a
coefficient is consider to be significantly different from 0
(or 1 if 
significance_labels  optional vector with custom labels for significance variable 
show_p_values  if 
signif_stars  if 
return_data  if 
...  parameters passed to 
models  named list of models 
type  a dodged plot or a faceted plot? 
y.level_label  an optional named vector for labeling 
data  a data frame containing data to be plotted,
typically the output of 
x, y  variables mapped to x and y axis 
point_size  size of the points 
point_stroke  thickness of the points 
point_fill  fill colour for the points 
colour  optional variable name to be mapped to colour aesthetic 
colour_guide  should colour guide be displayed in the legend? 
colour_lab  label of the colour aesthetic in the legend 
colour_labels  labels argument passed to

shape  optional variable name to be mapped to the shape aesthetic 
shape_values  values of the different shapes to use in

shape_guide  should shape guide be displayed in the legend? 
shape_lab  label of the shape aesthetic in the legend 
errorbar  should error bars be plotted? 
errorbar_height  height of error bars 
errorbar_coloured  should error bars be colored as the points? 
stripped_rows  should stripped rows be displayed in the background? 
strips_odd  color of the odd rows 
strips_even  color of the even rows 
vline  should a vertical line be drawn at 0 (or 1 if 
vline_colour  colour of vertical line 
dodged  should points be dodged (according to the colour aesthetic)? 
dodged_width  width value for 
facet_row  variable name to be used for row facets 
facet_col  optional variable name to be used for column facets 
facet_labeller  labeller function to be used for labeling facets;
if labels are too long, you can use 
ggcoef_model()
, ggcoef_multinom()
and ggcoef_compare()
use
broom.helpers::tidy_plus_plus()
to obtain a tibble
of the model
coefficients, apply additional data transformation and then pass the
produced tibble
to ggcoef_plot()
to generate the plot.
For more control, you can use the argument return_data = TRUE
to
get the produced tibble
, apply any transformation of your own and
then pass your customized tibble
to ggcoef_plot()
.
ggcoef_model
: Redesign of ggcoef()
based on broom.helpers::tidy_plus_plus()
.
ggcoef_compare
: Designed for displaying several models on the same plot.
ggcoef_multinom
: A variation of ggcoef_model()
adapted to multinomial logistic regressions performed with nnet::multinom()
.
ggcoef_plot
: SOME DESCRIPTION HERE
# Small function to display plots only if it's interactive p_ < GGally::print_if_interactive if (require(broom.helpers)) { data(tips, package = "reshape") mod_simple < lm(tip ~ day + time + total_bill, data = tips) p_(ggcoef_model(mod_simple)) # custom variable labels # you can use the labelled package to define variable labels before computing model if (require(labelled)) { tips_labelled < tips %>% labelled::set_variable_labels( day = "Day of the week", time = "Lunch or Dinner", total_bill = "Bill's total" ) mod_labelled < lm(tip ~ day + time + total_bill, data = tips_labelled) p_(ggcoef_model(mod_labelled)) } # you can provide custom variable labels with 'variable_labels' p_(ggcoef_model( mod_simple, variable_labels = c( day = "Week day", time = "Time (lunch or dinner ?)", total_bill = "Total of the bill" ) )) # if labels are too long, you can use 'facet_labeller' to wrap them p_(ggcoef_model( mod_simple, variable_labels = c( day = "Week day", time = "Time (lunch or dinner ?)", total_bill = "Total of the bill" ), facet_labeller = label_wrap_gen(10) )) # do not display variable facets but add colour guide p_(ggcoef_model(mod_simple, facet_row = NULL, colour_guide = TRUE)) # a logistic regression example d_titanic < as.data.frame(Titanic) d_titanic$Survived < factor(d_titanic$Survived, c("No", "Yes")) mod_titanic < glm( Survived ~ Sex * Age + Class, weights = Freq, data = d_titanic, family = binomial ) # use 'exponentiate = TRUE' to get the Odds Ratio p_(ggcoef_model(mod_titanic, exponentiate = TRUE)) # display intercepts p_(ggcoef_model(mod_titanic, exponentiate = TRUE, intercept = TRUE)) # customize terms labels p_( ggcoef_model( mod_titanic, exponentiate = TRUE, show_p_values = FALSE, signif_stars = FALSE, add_reference_rows = FALSE, categorical_terms_pattern = "{level} (ref: {reference_level})", interaction_sep = " x " ) + scale_y_discrete(labels = scales::label_wrap(15)) ) # display only a subset of terms p_(ggcoef_model(mod_titanic, exponentiate = TRUE, include = c("Age", "Class"))) # do not change points' shape based on significance p_(ggcoef_model(mod_titanic, exponentiate = TRUE, significance = NULL)) # a black and white version p_(ggcoef_model( mod_titanic, exponentiate = TRUE, colour = NULL, stripped_rows = FALSE )) # show dichotomous terms on one row p_(ggcoef_model( mod_titanic, exponentiate = TRUE, no_reference_row = broom.helpers::all_dichotomous(), categorical_terms_pattern = "{ifelse(dichotomous, paste0(level, ' / ', reference_level), level)}", show_p_values = FALSE )) # works also with with polynomial terms mod_poly < lm( tip ~ poly(total_bill, 3) + day, data = tips, ) p_(ggcoef_model(mod_poly)) # or with different type of contrasts # for sum contrasts, the value of the reference term is computed if (require(emmeans)) { mod2 < lm( tip ~ day + time + sex, data = tips, contrasts = list(time = contr.sum, day = contr.treatment(4, base = 3)) ) p_(ggcoef_model(mod2)) } }#>#>#>#>#>#> #>#>#> #>if (require(broom.helpers)) { # Use ggcoef_compare() for comparing several models on the same plot mod1 < lm(Fertility ~ ., data = swiss) mod2 < step(mod1, trace = 0) mod3 < lm(Fertility ~ Agriculture + Education * Catholic, data = swiss) models < list("Full model" = mod1, "Simplified model" = mod2, "With interaction" = mod3) p_(ggcoef_compare(models)) p_(ggcoef_compare(models, type = "faceted")) # you can reverse the vertical position of the point by using a negative value # for dodged_width (but it will produce some warnings) if (FALSE) { p_(ggcoef_compare(models, dodged_width = .9)) } }# specific function for nnet::multinom models if (require(broom.helpers) && require(nnet)) { data(happy) mod < multinom(happy ~ age + degree + sex, data = happy) p_(ggcoef_multinom(mod, exponentiate = TRUE)) p_(ggcoef_multinom(mod, type = "faceted")) p_(ggcoef_multinom( mod, type = "faceted", y.level_label = c( "pretty happy" = "pretty happy\n(ref: very happy)", "very happy" = "very happy" ) )) }#>#> # weights: 24 (14 variable) #> initial value 50552.644463 #> iter 10 value 45030.930814 #> iter 20 value 43102.145726 #> final value 43101.422966 #> converged