Constructs a residual plot for lm
or nls
objects. Different symbols for different groups can be added to the plot if an indicator variable regression is used.
residPlot(object, ...) # S3 method for lm residPlot(object, ...) # S3 method for SLR residPlot(object, xlab = "Fitted Values", ylab = "Residuals", main = "", pch = 16, col = "black", lty.ref = 3, lwd.ref = 1, col.ref = "black", resid.type = c("raw", "standardized", "studentized"), outlier.test = TRUE, alpha = 0.05, loess = FALSE, lty.loess = 2, lwd.loess = 1, col.loess = "black", trans.loess = 8, inclHist = TRUE, ...) # S3 method for POLY residPlot(object, ...) # S3 method for IVR residPlot(object, legend = "topright", cex.leg = 1, box.lty.leg = 0, ...) # S3 method for ONEWAY residPlot(object, xlab = "Fitted Values", ylab = "Residuals", main = "", pch = 16, col = "black", lty.ref = 3, lwd.ref = 1, col.ref = "black", resid.type = c("raw", "standardized", "studentized"), bp = TRUE, outlier.test = TRUE, alpha = 0.05, loess = FALSE, lty.loess = 2, lwd.loess = 1, col.loess = "black", trans.loess = 8, inclHist = TRUE, ...) # S3 method for TWOWAY residPlot(object, xlab = "Fitted Values", ylab = "Residuals", main = "", pch = 16, col = "black", lty.ref = 3, lwd.ref = 1, col.ref = "black", resid.type = c("raw", "standardized", "studentized"), bp = TRUE, outlier.test = TRUE, alpha = 0.05, loess = FALSE, lty.loess = 2, lwd.loess = 1, col.loess = "black", trans.loess = 8, inclHist = TRUE, ...) # S3 method for nls residPlot(object, xlab = "Fitted Values", ylab = "Residuals", main = "", pch = 16, col = "black", lty.ref = 3, lwd.ref = 1, col.ref = "black", resid.type = c("raw", "standardized", "studentized"), loess = FALSE, lty.loess = 2, lwd.loess = 1, col.loess = "black", trans.loess = 8, inclHist = TRUE, ...) # S3 method for nlme residPlot(object, xlab = "Fitted Values", ylab = "Residuals", main = "", pch = 16, col = "black", lty.ref = 3, lwd.ref = 1, col.ref = "black", resid.type = c("raw", "standardized", "studentized"), loess = FALSE, lty.loess = 2, lwd.loess = 1, col.loess = "black", trans.loess = 8, inclHist = TRUE, ...)
object | An |
---|---|
… | Other arguments to the generic |
xlab | A string for labeling the x-axis. |
ylab | A string for labeling the y-axis. |
main | A string for the main label to the plot. See details. |
pch | A numeric that indicates the plotting character to be used or a vector of numerics that indicates what plotting character codes to use for the levels of the second factor. See |
col | A vector of color names that indicates what color of points and lines to use for the levels of the first factor. See |
lty.ref | A numeric that indicates the line type to use for the reference line at residual=0. See |
lwd.ref | A numeric that indicates the line width to use for the reference line at residual=0. See |
col.ref | A numeric or character that indicates the line color to use for the reference line at residual=0. See |
resid.type | The type of residual to use. ‘Raw’ residuals are used by default. See details. |
outlier.test | A logical that indicates if an |
alpha | A numeric that indicates the alpha level to use for the outlier test (only used if |
loess | A logical that indicates if a loess smoother line and approximate confidence interval band is fit to and shown on the residual plot ( |
lty.loess | A numeric that indicates the line type to use for loess fit line. See |
lwd.loess | A numeric that indicates the line width to use for loess fit line. See |
col.loess | A numeric or character that indicates the line color to use for loess fit line. See |
trans.loess | A single numeric that indicates how transparent the loess band should be (larger numbers are more transparent). |
inclHist | A logical that indicates if a second pane that includes the histogram of residuals should be constructed. |
legend | If |
cex.leg | A single numeric values used to represent the character expansion value for the legend. Ignored if |
box.lty.leg | A single numeric values used to indicate the type of line to use for the box around the legend. The default is to not plot a box. |
bp | A logical that indicates if the plot for the one-way and two-way ANOVA will be a boxplot ( |
None. However, a residual plot is produced.
Three types of residuals are allowed for most model types. Raw residuals are simply the difference between the observed response variable and the predicted/fitted value. Standardized residuals are internally studentized residuals returned by rstandard
for linear models and are the raw residual divided by the standard deviation of the residuals for nonlinear models (as is done by nlsResiduals
from nlstools). Studentized residuals are the externally studentized residuals returned by rstudent
for linear models and are not available for nonlinear models.
Externally Studentized residuals are not supported for nls
or nlme
objects.
If outlier.test=TRUE
then significant outliers are detected with outlierTest
from the car package. See the help for this function for more details.
The user can include the model call as a title to the residual plot by using main="MODEL"
. This only works for models created with lm()
.
If the user chooses to add a legend without identifying coordinates for the upper-left corner of the legend (i.e., legend=TRUE
) then the R console is suspended until the user places the legend by clicking on the produced graphic at the point where the upper-left corner of the legend should appear. A legend will only be placed if the mdl
is an indicator variable regression, even if legend=TRUE
.
This function is meant to allow newbie students the ability to easily construct residual plots for one-way ANOVA, two-way ANOVA, simple linear regression, and indicator variable regressions. The plots can be constructed by submitting a saved linear model to this function which allows students to interact with and visualize moderately complex linear models in a fairly easy and efficient manner.
See residualPlots
in car and nlsResiduals
in nlstools) for similar functionality and fitPlot
and outlierTest
in car for related methods.
# create year factor variable & reduce number of years for visual simplicity Mirex$fyear <- factor(Mirex$year) Mirex2 <- filterD(Mirex,fyear %in% c(1977,1992)) ## Indicator variable regression with two factors lm1 <- lm(mirex~weight*fyear*species,data=Mirex2) # defaults residPlot(lm1)# remove the histogram residPlot(lm1,inclHist=FALSE)# add the loess line residPlot(lm1,loess=TRUE,inclHist=FALSE)# modify colors used residPlot(lm1,col="rainbow",inclHist=FALSE)# use only one point type -- notice that all points are of same type residPlot(lm1,pch=16,inclHist=FALSE)# use only one point and one color (might as well not use legend also) residPlot(lm1,pch=16,col="black",legend=FALSE,inclHist=FALSE)# can accomplish same thing just by removing the legend residPlot(lm1,legend=FALSE,inclHist=FALSE) # modify the reference line residPlot(lm1,col.ref="blue",lwd.ref=5,inclHist=FALSE)# include model in the title residPlot(lm1,main="MODEL")# use Studentized residuals residPlot(lm1,resid.type="studentized",inclHist=FALSE)# use Standardized residuals residPlot(lm1,resid.type="standardized",inclHist=FALSE)## Indicator variable regression with same two factors but in different order ## (notice use of colors and symbols) lm1a <- lm(mirex~weight*species*fyear,data=Mirex2) residPlot(lm1a)## Indicator variable regression with only one factor lm2 <- lm(mirex~weight*fyear,data=Mirex) residPlot(lm2)residPlot(lm2,inclHist=FALSE)residPlot(lm2,inclHist=FALSE,pch=19)residPlot(lm2,inclHist=FALSE,pch=19,col="black")residPlot(lm2,inclHist=FALSE,legend=FALSE)residPlot(lm2,inclHist=FALSE,pch=2,col="red",legend=FALSE)## Indicator variable regression (assuming same slope) lm3 <- lm(mirex~weight+fyear,data=Mirex) residPlot(lm3)## Simple linear regression lm4 <- lm(mirex~weight,data=Mirex) residPlot(lm4)## One-way ANOVA lm5 <- lm(mirex~fyear,data=Mirex) # default (uses boxplots) residPlot(lm5)# use points rather than boxplot residPlot(lm5,bp=FALSE)## Two-Way ANOVA lm6 <- lm(mirex~species*fyear,data=Mirex) # default (uses boxplots) residPlot(lm6)# No boxplots residPlot(lm6,bp=FALSE)## Examples showing outlier detection x <- c(runif(100)) y <- c(7,runif(99)) lma <- lm(y~x) residPlot(lma)# with studentized residuals residPlot(lma,resid.type="studentized")# multiple outliers y <- c(7,runif(98),-5) lmb <- lm(y~x) residPlot(lmb)# check that NAs are handled properly ... label should be 100 y <- c(NA,NA,runif(97),7) lmc <- lm(y~x) residPlot(lmc)## Nonlinear regression # from first example in nls() DNase1 <- subset(DNase,Run==1) fm1DNase1 <- nls(density~SSlogis(log(conc),Asym,xmid,scal),DNase1) residPlot(fm1DNase1)residPlot(fm1DNase1,resid.type="standardized")