File: plot.merMod.Rd

package info (click to toggle)
lme4 2.0-1-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 6,860 kB
  • sloc: cpp: 2,543; makefile: 2
file content (151 lines) | stat: -rw-r--r-- 6,669 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
\name{plot.merMod}
\title{Diagnostic Plots for 'merMod' Fits}
\alias{plot.merMod}
\alias{qqmath.merMod}
\alias{diagnostics}
\alias{diagnostic.plots}
\alias{diagnosticPlots}
\alias{diagnostic_plots}
\alias{qqplot}
\usage{
\method{plot}{merMod}(x,
     form = resid(., type = "pearson") ~ fitted(.), abline,
     id = NULL, idLabels = NULL, grid, \dots)
\method{qqmath}{merMod}(x, data = NULL, id = NULL, idLabels = NULL, \dots)
}
\arguments{
  \item{x}{a fitted [ng]lmer model.}
  \item{form}{an optional formula specifying the desired
  type of plot. Any variable present in the original data
  frame used to obtain \code{x} can be referenced. In
  addition, \code{x} itself can be referenced in the
  formula using the symbol \code{"."}. Conditional
  expressions on the right of a \code{|} operator can be
  used to define separate panels in a lattice display.
  Default is \code{resid(., type = "pearson") ~ fitted(.)},
  corresponding to a plot of the standardized residuals
  versus fitted values.}

  \item{abline}{an optional numeric value, or numeric
  vector of length two. If given as a single value, a
  horizontal line will be added to the plot at that
  coordinate; else, if given as a vector, its values are
  used as the intercept and slope for a line added to the
  plot. If missing, no lines are added to the plot.}

  \item{id}{an optional numeric value, or one-sided
  formula. If given as a value, it is used as a
  significance level for a two-sided outlier test for the
  standardized, or normalized residuals. Observations with
  absolute standardized (normalized) residuals greater than
  the \eqn{1-value/2} quantile of the standard normal
  distribution are identified in the plot using
  \code{idLabels}. If given as a one-sided formula, its
  right hand side must evaluate to a logical, integer, or
  character vector which is used to identify observations
  in the plot. If missing, no observations are identified.}

  \item{idLabels}{an optional vector, or one-sided formula.
  If given as a vector, it is converted to character and
  used to label the observations identified according to
  \code{id}. If given as a vector, it is converted to
  character and used to label the observations identified
  according to \code{id}. If given as a one-sided formula,
  its right hand side must evaluate to a vector which is
  converted to character and used to label the identified
  observations. Default is the interaction of all the
  grouping variables in the data frame.  The special
  formula \code{idLabels=~.obs} will label the observations
  according to observation number.}

  \item{data}{ignored: required for S3 method compatibility.}
  \item{grid}{an optional logical value indicating whether
  a grid should be added to plot. Default depends on the
  type of lattice plot used: if \code{xyplot} defaults to
  \code{TRUE}, else defaults to \code{FALSE}.}

  \item{\dots}{optional arguments passed to the lattice
  plot function.}
}
\description{
  diagnostic plots for merMod fits.  Some of these plots may be supplemented or 
  superseded by functions from other packages.  See the \emph{See Also} section 
  below for recommended alternatives.
}
\details{
  Diagnostic plots for the linear mixed-effects fit are
  obtained. The \code{form} argument gives considerable
  flexibility in the type of plot specification. A
  conditioning expression (on the right side of a \code{|}
  operator) always implies that different panels are used
  for each level of the conditioning factor, according to a
  lattice display. If \code{form} is a one-sided formula,
  histograms of the variable on the right hand side of the
  formula, before a \code{|} operator, are displayed (the
  lattice function \code{histogram} is used). If
  \code{form} is two-sided and both its left and right hand
  side variables are numeric, scatter plots are displayed
  (the lattice function \code{xyplot} is used). Finally, if
  \code{form} is two-sided and its left had side variable
  is a factor, box-plots of the right hand side variable by
  the levels of the left hand side variable are displayed
  (the lattice function \code{bwplot} is used).

  \code{qqmath} produces a Q-Q plot of the residuals
  (see \code{\link{qqmath.ranef.mer}} for Q-Q plots of the
  conditional mode values).
}
\seealso{
  \itemize{
    \item \code{\link[performance]{check_model}} in the \CRANpkg{performance} package.
    \item \CRANpkg{DHARMa} package, which evaluates model diagnostics through 
    simulating residuals (see: \code{\link[DHARMa]{simulateResiduals}}).
    \item \code{\link[lattice]{qqmath}} in the \CRANpkg{lattice} package.
    \item \code{\link[car]{influencePlot}} in the \CRANpkg{car} package.
  }
}
\author{
  original version in \CRANpkg{nlme} package by Jose Pinheiro
  and Douglas Bates.
}
\examples{
data(Orthodont,package="nlme")
fm1 <- lmer(distance ~ age + (age|Subject), data=Orthodont)
## standardized residuals versus fitted values by gender
plot(fm1, resid(., scaled=TRUE) ~ fitted(.) | Sex, abline = 0)
## box-plots of residuals by Subject
plot(fm1, Subject ~ resid(., scaled=TRUE))
## observed versus fitted values by Subject
plot(fm1, distance ~ fitted(.) | Subject, abline = c(0,1))
## residuals by age, separated by Subject
plot(fm1, resid(., scaled=TRUE) ~ age | Sex, abline = 0)
## scale-location plot, with red smoothed line
scale_loc_plot <- function(m, line.col = "red", line.lty = 1,
                           line.lwd = 2) {
  plot(fm1, sqrt(abs(resid(.))) ~ fitted(.),
       type = c("p", "smooth"),
       par.settings = list(plot.line =
                             list(alpha=1, col = line.col,
                                  lty = line.lty, lwd = line.lwd)))
}
scale_loc_plot(fm1)
## Q-Q plot
lattice::qqmath(fm1, id=0.05)
ggp.there <- "package:ggplot2" \%in\% search()
if (ggp.there || require("ggplot2")) {
    ## we can create the same plots using ggplot2 and the fortify() function
    fm1F <- fortify.merMod(fm1)
    ggplot(fm1F, aes(.fitted, .resid)) + geom_point(colour="blue") +
           facet_grid(. ~ Sex) + geom_hline(yintercept=0)
    ## note: Subjects are ordered by mean distance
    ggplot(fm1F, aes(Subject,.resid)) + geom_boxplot() + coord_flip()
    ggplot(fm1F, aes(.fitted,distance)) + geom_point(colour="blue") +
        facet_wrap(~Subject) +geom_abline(intercept=0,slope=1)
    ggplot(fm1F, aes(age,.resid)) + geom_point(colour="blue") + facet_grid(.~Sex) +
        geom_hline(yintercept=0)+ geom_line(aes(group=Subject),alpha=0.4) +
        geom_smooth(method="loess")
    ## (warnings about loess are due to having only 4 unique x values)
    if(!ggp.there) detach("package:ggplot2")
}
}