plot.lm                package:stats                R Documentation

_P_l_o_t _D_i_a_g_n_o_s_t_i_c_s _f_o_r _a_n _l_m _O_b_j_e_c_t

_D_e_s_c_r_i_p_t_i_o_n:

     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.

_U_s_a_g_e:

     ## S3 method for class 'lm':
     plot(x, which = c(1:3,5), 
          caption = list("Residuals vs Fitted", "Normal Q-Q",
               "Scale-Location", "Cook's distance",
               "Residuals vs Leverage",
               expression("Cook's dist vs Leverage  " * h[ii] / (1 - h[ii]))),
          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)

_A_r_g_u_m_e_n_t_s:

       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; 'character' vector or
          'list' of valid graphics annotations, see 'as.graphicsAnnot'.
          Can be set to '""' or 'NA' to suppress all captions. 

   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'.

_D_e_t_a_i_l_s:

     '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', and where the
     Residual-Leverage uses standardized Pearson residuals
     ('residuals.glm(type = "pearson")') for R[i].

     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 with a warning.  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.

_A_u_t_h_o_r(_s):

     John Maindonald and Martin Maechler.

_R_e_f_e_r_e_n_c_e_s:

     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.

_S_e_e _A_l_s_o:

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

_E_x_a_m_p_l_e_s:

     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")

