qqnorm {stats} | R Documentation |
Quantile-Quantile Plots
Description
qqnorm
is a generic function the default method of which
produces a normal QQ plot of the values in y
.
qqline
adds a line to a “theoretical”, by default
normal, quantile-quantile plot which passes through the probs
quantiles, by default the first and third quartiles.
qqplot
produces a QQ plot of two datasets. If conf.level
is
given, a confidence band for a function transforming the distribution of
x
into the distribution of y
is plotted based on
Switzer (1976). The QQ plot can be understood as an estimate of such a
treatment function. If exact = NULL
(the default), an
exact confidence band is computed if the product of
the sample sizes is less than 10000, with or
without ties. Otherwise, asymptotic distributions are used whose approximations may
be inaccurate in small samples. Monte-Carlo approximations based on
B
random permutations are computed when simulate = TRUE
.
Confidence bands are in agreement with Smirnov's test, that is, the
bisecting line is covered by the band iff the null of both samples coming
from the same distribution cannot be rejected at the same level.
Graphical parameters may be given as arguments to qqnorm
,
qqplot
and qqline
.
Usage
qqnorm(y, ...)
## Default S3 method:
qqnorm(y, ylim, main = "Normal Q-Q Plot",
xlab = "Theoretical Quantiles", ylab = "Sample Quantiles",
plot.it = TRUE, datax = FALSE, ...)
qqline(y, datax = FALSE, distribution = qnorm,
probs = c(0.25, 0.75), qtype = 7, ...)
qqplot(x, y, plot.it = TRUE,
xlab = deparse1(substitute(x)),
ylab = deparse1(substitute(y)), ...,
conf.level = NULL,
conf.args = list(exact = NULL, simulate.p.value = FALSE,
B = 2000, col = NA, border = NULL))
Arguments
x |
The first sample for |
y |
The second or only data sample. |
xlab , ylab , main |
plot labels. The |
plot.it |
logical. Should the result be plotted? |
datax |
logical. Should data values be on the x-axis? |
distribution |
quantile function for reference theoretical distribution. |
probs |
numeric vector of length two, representing probabilities. Corresponding quantile pairs define the line drawn. |
qtype |
the |
ylim , ... |
graphical parameters. |
conf.level |
confidence level of the band. The default, |
conf.args |
list of arguments defining confidence band computation
and visualisation: |
Value
For qqnorm
and qqplot
, a list with components
x |
The x coordinates of the points that were/would be plotted |
y |
The original |
References
Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Wadsworth & Brooks/Cole.
Switzer, P. (1976). Confidence procedures for two-sample problems. Biometrika, 63(1), 13–25. doi:10.1093/biomet/63.1.13.
See Also
ppoints
, used by qqnorm
to generate
approximations to expected order statistics for a normal distribution.
Examples
require(graphics)
y <- rt(200, df = 5)
qqnorm(y); qqline(y, col = 2)
qqplot(y, rt(300, df = 5))
qqnorm(precip, ylab = "Precipitation [in/yr] for 70 US cities")
## "QQ-Chisquare" : --------------------------
y <- rchisq(500, df = 3)
## Q-Q plot for Chi^2 data against true theoretical distribution:
qqplot(qchisq(ppoints(500), df = 3), y,
main = expression("Q-Q plot for" ~~ {chi^2}[nu == 3]))
qqline(y, distribution = function(p) qchisq(p, df = 3),
probs = c(0.1, 0.6), col = 2)
mtext("qqline(*, dist = qchisq(., df=3), prob = c(0.1, 0.6))")
## (Note that the above uses ppoints() with a = 1/2, giving the
## probability points for quantile type 5: so theoretically, using
## qqline(qtype = 5) might be preferable.)
## Figure 1 in Switzer (1976), knee angle data
switzer <- data.frame(
angle = c(-31, -30, -25, -25, -23, -23, -22, -20, -20, -18,
-18, -18, -16, -15, -15, -14, -13, -11, -10, - 9,
- 8, - 7, - 7, - 7, - 6, - 6, - 4, - 4, - 3, - 2,
- 2, - 1, 1, 1, 4, 5, 11, 12, 16, 34,
-31, -20, -18, -16, -16, -16, -15, -14, -14, -14,
-14, -13, -13, -11, -11, -10, - 9, - 9, - 8, - 7,
- 7, - 6, - 6, -5, - 5, - 5, - 4, - 2, - 2, - 2,
0, 0, 1, 1, 2, 4, 5, 5, 6, 17),
sex = gl(2, 40, labels = c("Female", "Male")))
ks.test(angle ~ sex, data = switzer)
d <- with(switzer, split(angle, sex))
with(d, qqplot(Female, Male, pch = 19, xlim = c(-31, 31), ylim = c(-31, 31),
conf.level = 0.945,
conf.args = list(col = "lightgrey", exact = TRUE))
)
abline(a = 0, b = 1)
## agreement with ks.test
set.seed(1)
x <- rnorm(50)
y <- rnorm(50, mean = .5, sd = .95)
ex <- TRUE
### p = 0.112
(pval <- ks.test(x, y, exact = ex)$p.value)
## 88.8% confidence band with bisecting line
## touching the lower bound
qqplot(x, y, pch = 19, conf.level = 1 - pval,
conf.args = list(exact = ex, col = "lightgrey"))
abline(a = 0, b = 1)