termplot
Plot Regression Terms
Plots regression terms against their predictors, optionally with standard errors and partial residuals added.
 Keywords
 hplot, regression
Usage
termplot(model, data = NULL, envir = environment(formula(model)), partial.resid = FALSE, rug = FALSE, terms = NULL, se = FALSE, xlabs = NULL, ylabs = NULL, main = NULL, col.term = 2, lwd.term = 1.5, col.se = "orange", lty.se = 2, lwd.se = 1, col.res = "gray", cex = 1, pch = par("pch"), col.smth = "darkred", lty.smth = 2, span.smth = 2/3, ask = dev.interactive() && nb.fig < n.tms, use.factor.levels = TRUE, smooth = NULL, ylim = "common", plot = TRUE, transform.x = FALSE, ...)
Arguments
 model
 fitted model object
 data
 data frame in which variables in
model
can be found  envir
 environment in which variables in
model
can be found  partial.resid
 logical; should partial residuals be plotted?
 rug
 add rugplots (jittered 1d histograms) to the axes?
 terms
 which terms to plot (default
NULL
means all terms); a vector passed topredict(.., type = "terms", terms = *)
.  se
 plot pointwise standard errors?
 xlabs
 vector of labels for the x axes
 ylabs
 vector of labels for the y axes
 main
 logical, or vector of main titles; if
TRUE
, the model's call is taken as main title,NULL
orFALSE
mean no titles.  col.term, lwd.term
 color and line width for the ‘term curve’,
see
lines
.  col.se, lty.se, lwd.se
 color, line type and line width for the
‘twicestandarderror curve’ when
se = TRUE
.  col.res, cex, pch
 color, plotting character expansion and type
for partial residuals, when
partial.resid = TRUE
, seepoints
.  ask
 logical; if
TRUE
, the user is asked before each plot, seepar(ask=.)
.  use.factor.levels
 Should xaxis ticks use factor levels or numbers for factor terms?
 smooth
NULL
or a function with the same arguments aspanel.smooth
to draw a smooth through the partial residuals for nonfactor terms lty.smth, col.smth, span.smth
 Passed to
smooth
 ylim
 an optional range for the y axis, or
"common"
when a range sufficient for all the plot will be computed, or"free"
when limits are computed for each plot.  plot
 if set to
FALSE
plots are not produced: instead a list is returned containing the data that would have been plotted.  transform.x
 logical vector; if an element (recycled as necessary)
is
TRUE
, partial residuals for the corresponding term are plotted against transformed values. The model response is then a straight line, allowing a ready comparison against the data or against the curve obtained fromsmoothpanel.smooth
.  ...
 other graphical parameters.
Details
The model
object must have a predict
method that accepts
type = "terms"
, e.g., glm
in the stats package,
coxph
and survreg
in
the \href{https://CRAN.Rproject.org/package=#1}{\pkg{#1}}survivalsurvival package.
For the partial.resid = TRUE
option model
must have a
residuals
method that accepts type = "partial"
,
which lm
and glm
do.
The data
argument should rarely be needed, but in some cases
termplot
may be unable to reconstruct the original data
frame. Using na.action=na.exclude
makes these problems less likely.
Nothing sensible happens for interaction terms, and they may cause errors.
The plot = FALSE
option is useful when some special action is needed,
e.g.\ifelse{latex}{\out{~}}{ } to overlay the results of two different models or to plot
confidence bands.
Value

For
plot = FALSE
, a list with one element for each plot which
would have been produced. Each element of the list is a data frame
with variables x
, y
, and optionally the pointwise
standard errors se
. For continuous predictors x
will
contain the ordered unique values and for a factor it will be a factor
containing one instance of each level. The list has attribute
"constant"
copied from the predicted terms object.Otherwise, the number of terms, invisibly.
See Also
For (generalized) linear models, plot.lm
and
predict.glm
.
Examples
library(stats)
require(graphics)
had.splines < "package:splines" %in% search()
if(!had.splines) rs < require(splines)
x < 1:100
z < factor(rep(LETTERS[1:4], 25))
y < rnorm(100, sin(x/10)+as.numeric(z))
model < glm(y ~ ns(x, 6) + z)
par(mfrow = c(2,2)) ## 2 x 2 plots for same model :
termplot(model, main = paste("termplot( ", deparse(model$call)," ...)"))
termplot(model, rug = TRUE)
termplot(model, partial.resid = TRUE, se = TRUE, main = TRUE)
termplot(model, partial.resid = TRUE, smooth = panel.smooth, span.smth = 1/4)
if(!had.splines && rs) detach("package:splines")
## requires recommended package MASS
hills.lm < lm(log(time) ~ log(climb)+log(dist), data = MASS::hills)
termplot(hills.lm, partial.resid = TRUE, smooth = panel.smooth,
terms = "log(dist)", main = "Original")
termplot(hills.lm, transform.x = TRUE,
partial.resid = TRUE, smooth = panel.smooth,
terms = "log(dist)", main = "Transformed")