Last data update: 2014.03.03

R: Interactive Interpretation of Generalized Linear Models
fxInteractive.glmR Documentation

Interactive Interpretation of Generalized Linear Models

Description

This method implements proposals for the interpretation of models for binary outcomes made by Hoetker (2007) but works for other types of generalized linear models as well. The method is also suitable for generalized additive models fitted with gam (package gam and mgcv).

Usage

## S3 method for class 'glm'
fxInteractive(model, initial.values = as.list(NULL),
    preselect.var = NA, preselect.type = "link", preselect.groups = NULL,
    dev.height = 18, dev.width = 18, dev.width.legend = 8, dev.pointsize = 10,
    dev.defined = FALSE, ylim = NA, col = NA, lty = 1, lwd = 1, 
    main = NA, main.line = 1.5, xlab = NA, ylab = NA, 
    legend.add = TRUE, legend.space = legend.add, legend.only = FALSE,
    legend.pos = "center", legend.cex = 1, legend.width.factor = 1, 
    rug.ticksize = 0.02, rug.col = "black", vline.actual = TRUE, 
    pos.hlines = c(0, 0.5, 0), n.effects = 100, 
    autosave.plot = FALSE, snapshot.plot = FALSE, 
    graphics.filename = "LinRegIntPlot", graphics.numbering = !autosave.plot,
    graphics.type = "pdf", factor.sep = "|", level.sep = ".", 
    latex2console = FALSE, xtable.big.mark = ".", xtable.decimal.mark = ",", 
    xtable.digits = NULL, xtable.display = NULL, xtable.booktabs = FALSE,                 
    panel.title = "Generalized Linear Model", label.button = "Snapshot",
    label.slider.act = "Variable displayed: ", label.box.type = "Type",
    label.types = c("linear predictor", "response", "marginal effect"),
    label.box.groups = "Groups", 
    slider.width = 200, slider.height = 60, button.height = 30,
    box.type.height = 90, box.group.character.width = 7, 
    box.group.line.height = 28, dist.obj.width = 20,
    dist.obj.height = 10, ...)

Arguments

model

Object of class glm (mandatory).

initial.values

Initial values for the metric covariates in a named list, default to the means. See section 4 of the vignette and examples below.

preselect.var

Name of continuous variable to be displayed as character or NA (default) for menu selection.

preselect.type

The type of the initial plot to be displayed. Must be one of the values "link" (default), "response" or "marginal".

preselect.groups

Numeric vector with the index of the groups which are displayed in the initial plot. If NULL (the default) all groups are displayed.

dev.height

Height of graphic device in cm, default to 18.

dev.width

Width of plot area in graphic device in cm, default to 18.

dev.width.legend

Width of legend area in graphic device in cm, default to 8.

dev.pointsize

Character pointsize of graphic device, default to 10.

dev.defined

Graphic device predefined? Default to FALSE, see section 6.3 of the vignette for usage.

ylim

With a numeric vector of length 2 the plot limits in y-direction can be set. If NA (the default) these are determined automatically.

col

Vector of color specifications to represent different groups. Passed to the line commands and the legend. Actual palette and consecutive sequence if NA (default).

lty

Vector of line type specifications to represent different groups. Passed to the line commands and the legend, default to solid lines.

lwd

Vector of line width specifications to represent different groups. Passed to the line commands and the legend, default to 1.

main

Title for the plot, default to NA.

main.line

Height for plot title in lines which is passed to title(), default to 1.5.

xlab

Label for the x-axis. Name of the selected covariate, if NA (the default).

ylab

Label for the y-axis. Name of the selected plot type (see argument label.types), if NA (the default).

legend.add

Should a legend be added to the plot? Default to TRUE.

legend.space

Should the space for the legend be reserved? Default to the value of legend.add. Setting legend.add to FALSE and legend.space to TRUE plots white space instead of the legend. This can be useful when different plots are arranged in a document to ensure exact alignments and sizes, see section 6.2 of the vignette for details.

legend.only

Should just the legend be plotted? Default to FALSE. A plot with the legend alone can be useful when different plots are arranged in a document, see section 6.2 of the vignette for details.

legend.pos

Position of the legend as character, see legend for details. Default to "center".

legend.cex

Relative size of legend text. Can be reduced if the model contains many groups. Default to 1.

legend.width.factor

Factor by which the width of the legend is increased. Default to 1. Increasing this can solve the problem that the legend annotations do not fit in the surrounding box when the plots are saved as PDF or EPS files, see section 5 of the vignette for details.

rug.ticksize

Length of rugplot tickmarks, dafault to 0.02. Set to 0 or NA, if no rugplot should be drawn. For many observations the rug considerably slows down the rebuild of the plot.

rug.col

Color of rugplot tickmarks, default to "black".

vline.actual

Add vertical line at actual position of selected metric covariate? Default to TRUE.

pos.hlines

Positions of the horizontal lines for [1] the plot of the link function, [2] the plot of the response and [3] the plot of marginal effects. NA for no lines, default to c(0,0.5,0).

n.effects

Number of equally spaced points over the span of the selected metric covariate to calculate the effects for plotting, default to 100. Increase, if lines are not smooth.

autosave.plot

Directly save the initial plot? Default to FALSE. If set to TRUE the GUI-panel is immediately closed after initialization.

snapshot.plot

Save plot when snapshot button is pressed? Default to FALSE, see section 5 of the vignette for details.

graphics.filename

Filename (optionally including a path) as character for graphic file.

graphics.numbering

If TRUE (the default) a 3 digits number is automatically appended to the filenname to avoid that existing graphic files are overwritten.

graphics.type

Graphics file type argument, default to "pdf". On Windows systems all file types accepted by savePlot work. Under non Windows systems allowed values are "pdf", "eps", "png", "jpeg", "jpg", "tiff" and "bmp".

factor.sep

Character separating the factor-factor level combinations in the group names (default to "|").

level.sep

Character separating the factor name and the corresponding factor levels in the group names (default to ".").

latex2console

Should the textoutput triggered by the snapshot button be printed as LaTeX-code? Default to FALSE.

xtable.big.mark

Bigmark character for LaTeX output passed to print.xtable, default to ",".

xtable.decimal.mark

Decimal character for LaTeX output passed to print.xtable, default to ".".

xtable.digits

Number of digits for LaTeX output passed to xtable, default to NULL.

xtable.display

Display style for LaTeX output passed to xtable, default to NULL.

xtable.booktabs

Use the LaTeX package booktabs for horizontal lines in LaTeX tables, default to FALSE. Passed to print.xtable.

panel.title

Title used in the title bar of the GUI-panel of type character.

label.button

Label for the snapshot-button of type character.

label.slider.act

Additional label for the slider of the selected metric covariate of type character.

label.box.type

Title for the radiogroup box of type character.

label.types

Labels for radiogroup buttons (character vector of length 3). By default these are also used as corresponding annotations for the y-axis.

label.box.groups

Title for the checkbox of type character.

slider.width

Width of each slider in points (default to 200).

slider.height

Height of each slider in points (default to 60).

button.height

Height of snapshot button in points (default to 30).

box.type.height

Height of radiobox for type selection in points (default to 90).

box.group.character.width

The width of the boxes is basically a this value times the number of characters in points (default to 7).

box.group.line.height

The height of the checkbox is this value times the number of groups in points (default to 28).

dist.obj.width

Vertical distance between sliders and boxes and vertical margins in points (default to 20).

dist.obj.height

Horizontal distance between panel objects in points (default to 10).

...

Other graphical parameters passed to par.

Details

The only mandatory argument of the function is a fitted-model object of class glm. For this object the following prerequisites must be met:

  • The model must contain at least one metric covariate.

  • The model must be specified with the formula interface and the data frame containing the variables must be passed with the data argument.

  • The categorical variables must be factors (ordered or unordered).

Please refer to the documentation of fxInteractive or the vignette for more details.

Value

No object is returned, please refer to the documentation of fxInteractive or the vignette for more details.

Author(s)

Martin Meermeyer m.meermeyer@gmail.com

References

Hoetker, G. (2007). The use of logit and probit models in strategic management research: Critical issues. Strategic Management Journal, 28(4), 331-343.

Kleiber, C., Zeileis, A. (2008). Applied Econometrics with R. New York: Springer.

Examples

### Model specification ###
data("creditdata")

## Treat ordered factors as unordered factors.
options(contrasts=c("contr.treatment","contr.treatment"))

model.cd <- glm(credit ~ amount + I(amount^2) + age + duration*teleph + housing,
    family=binomial, data=creditdata)

## Not run: 

### Basic usage ###

## RStudio users may need to change the graphic device, see details.
options(device = "x11")

## Using defaults
fxInteractive(model.cd)

## Switch text output to LaTeX
fxInteractive(model.cd, latex2console = TRUE)

## Continental European number format in LaTeX output
fxInteractive(model.cd, latex2console = TRUE, decimal.mark = ",", big.mark = ".")

## Save plot as PDF to current working directory when 'Snapshot' is clicked
fxInteractive(model.cd, snapshot.plot = TRUE)

## Change color scheme and line types
fxInteractive(model.cd, col = rep(c(2,4),each = 3), lty = c(1,3,5))

## Change separation characters
fxInteractive(model.cd, factor.sep = "-", level.sep = ">")

## Suppress legend
fxInteractive(model.cd, legend.add = FALSE)

## Suppress rug plot
fxInteractive(model.cd, rug.ticksize = NA)

## Set initial values of metric covatiates 
fxInteractive(model.cd, initial.values = list(amount=5000, age=30, duration=24))

## Preselect covariate, plot type and groups
fxInteractive(model.cd, preselect.var = "duration", preselect.type = "response",
    preselect.groups = c(2,5))

## Preselect covariate and plot type and change axis annotations
fxInteractive(model.cd, preselect.var = "duration", preselect.type = "response", 
    xlab = "duration (months)", ylab = "probability of credit default")


### Visualization of statistical concepts ###

## Nonparametric effect 
require("splines")
model.cd.bs <- glm(credit ~ bs(amount) + age + duration*teleph + housing,
    family = binomial, data = creditdata)
fxInteractive(model.cd.bs, preselect.var = "amount")

## Generalized additive model
require("mgcv")
model.cd.mgcv <- gam(credit ~ s(amount) + age + duration*teleph + housing,
family = binomial, data = creditdata)
fxInteractive(model.cd.mgcv)

## Interaction effect (directly)
fxInteractive(model.cd, preselect.var = "duration")

## Interaction effect (indirectly)
fxInteractive(model.cd, preselect.var = "age")
# manipulate slider for 'duration'

## Quasi-complete separation
# example from Kleiber, Zeileis (2008), p. 130ff 
require("AER")
data("MurderRates")
model.mr <- glm(I(executions > 0) ~ time + income + noncauc + lfp + southern,
    family = binomial, data = MurderRates)
fxInteractive(model.mr, preselect.var = "income", preselect.type = "response")


### Additional examples ###

## Customize device for printing
fxInteractive(model.cd, 
    dev.width = 6,
    dev.width.legend = 4,
    dev.height = 6,
    dev.pointsize = 6,
    col = c("darkred","red","salmon","darkblue","blue","lightblue"),
    legend.width.factor = 1.1,
    vline.actual = FALSE,
    snapshot.plot = TRUE,
    graphics.filename = "creddefault-termplot",
    mar = c(2.5,2.5,1,1)+0.1,
    mgp = c(1.5,0.5,0),
    tcl = -0.3)

## Save predefined plot automatically
fxInteractive(model.cd,
    initial.values = list(amount=5000, duration=24, age=30),
    preselect.var = "duration",
    preselect.type = "link",
    autosave.plot = TRUE,
    graphics.filename = "fig-creddefault-duration-link",
    legend.width.factor = 1.05)

## Modifications for models with many groups
# Increase space for legend and squeeze panel controls
model.cd.moregroups <- glm(credit ~ amount + I(amount^2) + age 
    + duration*teleph + housing + job, family = binomial, data = creditdata)
fxInteractive(model.cd.moregroups, 
    dev.width.legend = 9,
    legend.cex = 1,
    box.type.height = 90,
    box.group.character.width = 6,
    box.group.line.height = 25,
    dist.obj.height = 2)

# Squeeze legend and  panel controls
model.cd.manygroups <- glm(credit ~ amount + I(amount^2) + age 
    + duration*teleph + housing + intuse, family = binomial, data = creditdata)
fxInteractive(model.cd.manygroups, 
    dev.width.legend = 6,
    legend.cex = 0.54,
    box.type.height = 90,
    box.group.character.width = 6,
    box.group.line.height = 25,
    dist.obj.height = 2)
# Note that checkbox for groups grows beyond screen

# Preselect groups and specifiy color and line types directly
model.cd.manygroups <- glm(credit ~ amount + I(amount^2) + age 
    + duration*teleph + housing + intuse, family = binomial, data = creditdata)
index.groups <- c(1,11,21,31,41,51)
vec.col <- NULL
vec.col[index.groups] <- c(1:6)
vec.lty <- NULL
vec.lty[index.groups] <- rep(c(1,2), each = 3)
fxInteractive(model.cd.manygroups,
preselect.var = "amount",
preselect.groups = index.groups,
col = vec.col,
lty = vec.lty)

## End(Not run)

Results


R version 3.3.1 (2016-06-21) -- "Bug in Your Hair"
Copyright (C) 2016 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library(LinRegInteractive)
Error in library(LinRegInteractive) : 
  there is no package called 'LinRegInteractive'
Execution halted