plot.lm                package:stats                R Documentation

Plot Diagnostics for an lm Object

Description:

     Six plots (selectable by 'which') are currently available: a plot
     of residuals against fitted values, a Scale-Location plot of
     sqrt{| residuals |} against fitted values, a Normal Q-Q plot, a
     plot of Cook's distances versus row labels, a plot of residuals
     against leverages, and a plot of Cook's distances against
     leverage/(1-leverage).  By default, the first three and '5' are
     provided.

Usage:

     ## S3 method for class 'lm':
     plot(x, which = c(1:3,5), 
          caption = c("Residuals vs Fitted", "Normal Q-Q",
               "Scale-Location", "Cook's distance",
               "Residuals vs Leverage", "Cook's distance vs Leverage"),
          panel = if(add.smooth) panel.smooth else points,
          sub.caption = NULL, main = "",
          ask = prod(par("mfcol")) < length(which) && dev.interactive(),
          ...,
          id.n = 3, labels.id = names(residuals(x)), cex.id = 0.75,
          qqline = TRUE, cook.levels = c(0.5, 1.0),
          add.smooth = getOption("add.smooth"), label.pos = c(4,2),
          cex.caption = 1)

Arguments:

       x: 'lm' object, typically result of 'lm' or 'glm'.

   which: if a subset of the plots is required, specify a subset of the
          numbers '1:6'.

 caption: captions to appear above the plots

   panel: panel function.  The useful alternative to 'points',
          'panel.smooth' can be chosen by 'add.smooth = TRUE'.

sub.caption: common title-above figures if there are multiple; used as
          'sub' (s.'title') otherwise.  If 'NULL', as by default, a
          possible shortened version of 'deparse(x$call)' is used.

    main: title to each plot-in addition to the above 'caption'.

     ask: logical; if 'TRUE', the user is _ask_ed before each plot, see
          'par(ask=.)'.

     ...: other parameters to be passed through to plotting functions.

    id.n: number of points to be labelled in each plot, starting with
          the most extreme.

labels.id: vector of labels, from which the labels for extreme points
          will be chosen.  'NULL' uses observation numbers.

  cex.id: magnification of point labels.

  qqline: logical indicating if a 'qqline()' should be added to the
          normal Q-Q plot.

cook.levels: levels of Cook's distance at which to draw contours.

add.smooth: logical indicating if a smoother should be added to most
          plots; see also 'panel' above.

label.pos: positioning of labels, for the left half and right half of
          the graph respectively, for plots 1-3.

cex.caption: controls the size of 'caption'.

Details:

     'sub.caption'-by default the function call-is shown as a subtitle
     (under the x-axis title) on each plot when plots are on separate
     pages, or as a subtitle in the outer margin (if any) when there
     are multiple plots per page.

     The 'Scale-Location' plot, also called 'Spread-Location' or 'S-L'
     plot, takes the square root of the absolute residuals in order to
     diminish skewness (sqrt{| E |} is much less skewed than | E | for
     Gaussian zero-mean E).

     The 'S-L', the Q-Q, and the Residual-Leverage plot, use
     _standardized_ residuals which have identical variance (under the
     hypothesis).  They are given as R[i] / (s*sqrt(1 - h.ii)) where
     h.ii are the diagonal entries of the hat matrix,
     'influence()''$hat', see also 'hat'.

     The Residual-Leverage plot shows contours of equal Cook's
     distance, for values of 'cook.levels' (by default 0.5 and 1) and
     omits cases with leverage one.  If the leverages are constant (as
     is typically the case in a balanced 'aov' situation) the plot uses
     factor level combinations instead of the leverages for the x-axis.
      (The factor levels are ordered by mean fitted value.)

     In the Cook's distance vs leverage/(1-leverage) plot, contours of
     standardized residuals that are equal in magnitude are lines
     through the origin.  The contour lines are labelled with the
     magnitudes.

Author(s):

     John Maindonald and Martin Maechler.

References:

     Belsley, D. A., Kuh, E. and Welsch, R. E. (1980) _Regression
     Diagnostics._  New York: Wiley.

     Cook, R. D. and Weisberg, S. (1982) _Residuals and Influence in
     Regression._ London: Chapman and Hall.

     Firth, D. (1991) Generalized Linear Models.  In Hinkley, D. V. and
     Reid, N. and Snell, E. J., eds: Pp. 55-82 in Statistical Theory
     and Modelling. In Honour of Sir David Cox, FRS.  London: Chapman
     and Hall.

     Hinkley, D. V. (1975) On power transformations to symmetry.
     _Biometrika_ *62*, 101-111.

     McCullagh, P. and Nelder, J. A. (1989) _Generalized Linear
     Models._ London: Chapman and Hall.

See Also:

     'termplot', 'lm.influence', 'cooks.distance', 'hatvalues'.

Examples:

     require(graphics)

     ## Analysis of the life-cycle savings data
     ## given in Belsley, Kuh and Welsch.
     plot(lm.SR <- lm(sr ~ pop15 + pop75 + dpi + ddpi, data = LifeCycleSavings))

     ## 4 plots on 1 page;
     ## allow room for printing model formula in outer margin:
     par(mfrow = c(2, 2), oma = c(0, 0, 2, 0))
     plot(lm.SR)
     plot(lm.SR, id.n = NULL)               # no id's
     plot(lm.SR, id.n = 5, labels.id = NULL)# 5 id numbers

     ## Was default in R <= 2.1.x:
     ## Cook's distances instead of Residual-Leverage plot
     plot(lm.SR, which = 1:4)

     ## Fit a smooth curve, where applicable:
     plot(lm.SR, panel = panel.smooth)
     ## Gives a smoother curve
     plot(lm.SR, panel = function(x,y) panel.smooth(x, y, span = 1))

     par(mfrow=c(2,1))# same oma as above
     plot(lm.SR, which = 1:2, sub.caption = "Saving Rates, n=50, p=5")

