Learn R Programming

sjPlot (version 1.8.1)

sjp.poly: Plot polynomials for (generalized) linear regression

Description

This function plots a scatter plot of a term poly.term against a response variable x and adds - depending on the amount of numeric values in poly.degree - multiple polynomial curves. A loess-smoothed line can be added to see which of the polynomial curves fits best to the data.

Usage

sjp.poly(x, poly.term, poly.degree, poly.scale = FALSE, fun = NULL,
  axisTitle.x = NULL, axisTitle.y = NULL, showScatterPlot = TRUE,
  showLoess = TRUE, showLoessCI = TRUE, showPValues = TRUE,
  geom.colors = NULL, geom.size = 0.8, loessLineColor = "#808080",
  pointColor = "#404040", pointAlpha = 0.2, printPlot = TRUE)

Arguments

x
a vector, representing the response variable of a linear (mixed) model; or a linear (mixed) model as returned by lm or lmer.
poly.term
if x is a vector, poly.term should also be a vector, representing the polynomial term (independent variabl) in the model; if x is a fitted model, poly.term should be the polynomial term's name as chara
poly.degree
numeric, or numeric vector, indicating the degree of the polynomial. If poly.degree is a numeric vector, multiple polynomial curves for each degree are plotted. See 'Examples'.
poly.scale
logical, if TRUE, poly.term will be scaled before linear regression is computed. Default is FALSE. Scaling the polynomial term may have an impact on the resulting p-values.
fun
linear function when modelling polynomial terms. Use fun = "lm" for linear models, or fun = "glm" for generalized linear models. When x is not a vector, but a fitted model object, the function is detected automati
axisTitle.x
A label for the x axis. Use NULL to automatically detect variable names that will be used as title (see set_var_labels) for details).
axisTitle.y
A label for the y axis. Use NULL to automatically detect variable names that will be used as title (see set_var_labels) for details).
showScatterPlot
If TRUE (default), a scatter plot of response and predictor values for each predictor of the fitted model fit is plotted. Only applies if type = "lm" and fitted model has only one predictor, or if type = "pr
showLoess
If TRUE, an additional loess-smoothed line is plotted.
showLoessCI
If TRUE, a confidence region for the loess-smoothed line will be plotted.
showPValues
logical, if TRUE (default), p-values for polynomial terms are printed to the console.
geom.colors
User defined color palette for geoms. Must either be vector with two color values or a specific color palette code. See 'Note' in sjp.grpfrq.
geom.size
size resp. width of plotted lines.
loessLineColor
color of the loess-smoothed line. Only applies, if showLoess = TRUE.
pointColor
color of the scatter plot's point. Only applies, if showScatterPlot = TRUE.
pointAlpha
The alpha values of the scatter plot's point-geoms. Default is 0.2.
printPlot
If TRUE (default), plots the results as graph. Use FALSE if you don't want to plot any graphs. In either case, the ggplot-object will be returned as value.

Value

  • (insisibily) returns the ggplot-object with the complete plot (plot) as well as the data frame that was used for setting up the ggplot-object (df).

Details

For each polynomial degree, a simple linear regression on x (resp. the extracted response, if x is a fitted model) is performed, where only the polynomial term poly.term is included as independent variable. Thus, lm(y ~ x + I(x^2) + ... + I(x^i)) is repeatedly computed for all values in poly.degree, and the predicted values of the reponse are plotted against the raw values of poly.term. If x is a fitted model, other covariates are ignored when finding the best fitting polynomial. This function evaluates raw polynomials, not orthogonal polynomials. Polynomials are computed using the poly function, with parameter raw = TRUE. To find out which polynomial degree fits best to the data, a loess-smoothed line can be added (with showLoess = TRUE). The polynomial curves that comes closest to the loess-smoothed line should be the best fit to the data.

See Also

To plot marginal effects of polynomial terms, call sjp.lm with type = "poly", or sjp.lmer respectively for linear mixed models.

Examples

Run this code
library(sjmisc)
data(efc)
# linear fit. loess-smoothed line indicates a more
# or less cubic curve
sjp.poly(efc$c160age, efc$quol_5, 1)

# quadratic fit
sjp.poly(efc$c160age, efc$quol_5, 2)

# linear to cubic fit
sjp.poly(efc$c160age, efc$quol_5,
         1:4, showScatterPlot = FALSE)


library(sjmisc)
data(efc)
# fit sample model
fit <- lm(tot_sc_e ~ c12hour + e17age + e42dep, data = efc)
# inspect relationship between predictors and response
sjp.lm(fit, type = "pred",
       showLoess = TRUE, showScatterPlot = FALSE)
# "e17age" does not seem to be linear correlated to response
# try to find appropiate polynomial. Grey line (loess smoothed)
# indicates best fit. Looks like x^4 has the best fit,
# however, only x^3 has significant p-values.
sjp.poly(fit, "e17age", 2:4, showScatterPlot = FALSE)

# fit new model
fit <- lm(tot_sc_e ~ c12hour + e42dep +
          e17age + I(e17age^2) + I(e17age^3),
          data = efc)
# plot marginal effects of polynomial term
sjp.lm(fit, type = "poly", poly.term = "e17age")

Run the code above in your browser using DataLab