blob: 91d13cd197b143c6efeec6302ef8a2e7dfeb1f46 [file] [log] [blame]
% File src/library/graphics/man/cdplot.Rd
% Part of the R package, https://www.R-project.org
% Copyright 1995-2007 R Core Team
% Distributed under GPL 2 or later
\name{cdplot}
\alias{cdplot}
\alias{cdplot.default}
\alias{cdplot.formula}
\title{Conditional Density Plots}
\description{
Computes and plots conditional densities describing how the
conditional distribution of a categorical variable \code{y} changes over a
numerical variable \code{x}.
}
\usage{
cdplot(x, \dots)
\method{cdplot}{default}(x, y,
plot = TRUE, tol.ylab = 0.05, ylevels = NULL,
bw = "nrd0", n = 512, from = NULL, to = NULL,
col = NULL, border = 1, main = "", xlab = NULL, ylab = NULL,
yaxlabels = NULL, xlim = NULL, ylim = c(0, 1), \dots)
\method{cdplot}{formula}(formula, data = list(),
plot = TRUE, tol.ylab = 0.05, ylevels = NULL,
bw = "nrd0", n = 512, from = NULL, to = NULL,
col = NULL, border = 1, main = "", xlab = NULL, ylab = NULL,
yaxlabels = NULL, xlim = NULL, ylim = c(0, 1), \dots,
subset = NULL)
}
\arguments{
\item{x}{an object, the default method expects a single numerical
variable (or an object coercible to this).}
\item{y}{a \code{"factor"} interpreted to be the dependent variable}
\item{formula}{a \code{"formula"} of type \code{y ~ x} with a single dependent
\code{"factor"} and a single numerical explanatory variable.}
\item{data}{an optional data frame.}
\item{plot}{logical. Should the computed conditional densities be plotted?}
\item{tol.ylab}{convenience tolerance parameter for y-axis annotation.
If the distance between two labels drops under this threshold, they are
plotted equidistantly.}
\item{ylevels}{a character or numeric vector specifying in which order
the levels of the dependent variable should be plotted.}
\item{bw, n, from, to, \dots}{arguments passed to \code{\link{density}}}
\item{col}{a vector of fill colors of the same length as \code{levels(y)}.
The default is to call \code{\link{gray.colors}}.}
\item{border}{border color of shaded polygons.}
\item{main, xlab, ylab}{character strings for annotation}
\item{yaxlabels}{character vector for annotation of y axis, defaults to
\code{levels(y)}.}
\item{xlim, ylim}{the range of x and y values with sensible defaults.}
\item{subset}{an optional vector specifying a subset of observations
to be used for plotting.}
}
\details{
\code{cdplot} computes the conditional densities of \code{x} given
the levels of \code{y} weighted by the marginal distribution of \code{y}.
The densities are derived cumulatively over the levels of \code{y}.
This visualization technique is similar to spinograms (see \code{\link{spineplot}})
and plots \eqn{P(y | x)} against \eqn{x}. The conditional probabilities
are not derived by discretization (as in the spinogram), but using a smoothing
approach via \code{\link{density}}.
Note, that the estimates of the conditional densities are more reliable for
high-density regions of \eqn{x}. Conversely, the are less reliable in regions
with only few \eqn{x} observations.
}
\value{
The conditional density functions (cumulative over the levels of \code{y})
are returned invisibly.
}
\seealso{
\code{\link{spineplot}}, \code{\link{density}}
}
\references{
Hofmann, H., Theus, M. (2005), \emph{Interactive graphics for visualizing
conditional distributions}, Unpublished Manuscript.
}
\author{
Achim Zeileis \email{Achim.Zeileis@R-project.org}
}
\examples{
## NASA space shuttle o-ring failures
fail <- factor(c(2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1,
1, 2, 1, 1, 1, 1, 1),
levels = 1:2, labels = c("no", "yes"))
temperature <- c(53, 57, 58, 63, 66, 67, 67, 67, 68, 69, 70, 70,
70, 70, 72, 73, 75, 75, 76, 76, 78, 79, 81)
## CD plot
cdplot(fail ~ temperature)
cdplot(fail ~ temperature, bw = 2)
cdplot(fail ~ temperature, bw = "SJ")
## compare with spinogram
(spineplot(fail ~ temperature, breaks = 3))
## highlighting for failures
cdplot(fail ~ temperature, ylevels = 2:1)
## scatter plot with conditional density
cdens <- cdplot(fail ~ temperature, plot = FALSE)
plot(I(as.numeric(fail) - 1) ~ jitter(temperature, factor = 2),
xlab = "Temperature", ylab = "Conditional failure probability")
lines(53:81, 1 - cdens[[1]](53:81), col = 2)
}
\keyword{hplot}