plotPropTestDesign.Rd
Create plots involving sample size, power, difference, and significance level for a one- or two-sample proportion test.
plotPropTestDesign(x.var = "n", y.var = "power",
range.x.var = NULL, n.or.n1 = 25, n2 = n.or.n1, ratio = 1,
p.or.p1 = switch(alternative, greater = 0.6, less = 0.4,
two.sided = ifelse(two.sided.direction == "greater", 0.6, 0.4)),
p0.or.p2 = 0.5, alpha = 0.05, power = 0.95,
sample.type = ifelse(!missing(n2) || !missing(ratio), "two.sample", "one.sample"),
alternative = "two.sided", two.sided.direction = "greater",
approx = TRUE, correct = sample.type == "two.sample", round.up = FALSE,
warn = TRUE, n.min = 2, n.max = 10000, tol.alpha = 0.1 * alpha,
tol = 1e-07, maxiter = 1000, plot.it = TRUE, add = FALSE, n.points = 50,
plot.col = "black", plot.lwd = 3 * par("cex"), plot.lty = 1,
digits = .Options$digits, cex.main = par("cex"), ..., main = NULL,
xlab = NULL, ylab = NULL, type = "l")
character string indicating what variable to use for the x-axis.
Possible values are "n"
(sample size; the default),
"delta"
(minimal detectable difference), "power"
(power of the test), and "alpha"
(significance level of the test).
character string indicating what variable to use for the y-axis.
Possible values are "power"
(power of the test; the default),
"delta"
(minimal detectable difference), and "n"
(sample size).
numeric vector of length 2 indicating the range of the x-variable to use
for the plot. The default value depends on the value of x.var
.
When x.var="n"
the default value is c(20,400)
. When
x.var="delta"
and alternative="greater"
or
alternative="two.sided"
and two.sided.direction="greater"
,
the default value is c(0.05, 0.2)
. When x.var="delta"
and
alternative="less"
or alternative="two.sided"
and
two.sided.direction="less"
, the default value is -c(0.2, 0.05)
.
When x.var="power"
the default value is c(alpha + .Machine$double.eps, 0.95)
. When x.var="alpha"
, the
default value is c(0.01, 0.2)
.
numeric scalar indicating the sample size. The default value is
n.or.n1=25
. When sample.type="one.sample"
, n.or.n1
denotes the number of observations in the single sample. When
sample.type="two.sample"
, n.or.n1
denotes the number of
observations from group 1. Missing (NA
), undefined (NaN
),
and infinite (Inf
, -Inf
) values are not allowed. This
argument is ignored if either x.var="n"
or y.var="n"
.
numeric scalar indicating the sample size for group 2. The default value
is the value of n.or.n1
. Missing (NA
), undefined (NaN
),
and infinite (Inf
, -Inf
) values are not allowed. This
argument is ignored when sample.type="one.sample"
.
numeric vector indicating the ratio of sample size in group 2 to sample
size in group 1 \(n_2/n_1\). The default value is ratio=1
.
All values of ratio
must be greater than or equal to 1. This
argument is only used when x.var="n"
or y.var="n"
and
sample.type="two.sample"
.
numeric vector of proportions. When sample.type="one.sample"
,
p.or.p1
denotes the true value of \(p\), the probability of
“success”. When sample.type="two.sample"
, p.or.p1
denotes the value of \(p_1\), the probability of “success” in
group 1. When alternative="greater"
or alternative="two.sided"
and two.sided.direction="greater"
,
the default value is p.or.p1=0.6
. When alternative="less"
or alternative="two.sided"
and two.sided.direction="less"
,
the default value is p.or.p1=0.4
.
Missing (NA
), undefined (NaN
),
and infinite (Inf
, -Inf
) values are not allowed.
This argument is ignored when x.var="delta"
or y.var="delta"
.
numeric vector of proportions. When sample.type="one.sample"
,
p0.or.p2
denotes the hypothesized value of \(p\), the
probability of “success”. When sample.type="two.sample"
,
p0.or.p2
denotes the value of \(p_2\), the probability of
“success” in group 2. The default value is p0.or.p2=0.5
.
Missing (NA
), undefined (NaN
),
and infinite (Inf
, -Inf
) values are not allowed.
numeric scalar between 0 and 1 indicating the Type I error level associated
with the hypothesis test. The default value is alpha=0.05
.
This argument is ignored when x.var="alpha"
.
numeric scalar between 0 and 1 indicating the power associated with the
hypothesis test. The default value is power=0.95
. This argument is
ignored when x.var="power"
or y.var="power"
.
character string indicating whether the design is based on a one-sample or
two-sample proportion test. When sample.type="one.sample"
, the computations
for the plot are based on a one-sample proportion test. When sample.type="two.sample"
, the computations for the plot are based on a
two-sample proportion test. The default value is sample.type="one.sample"
.
character string indicating the kind of alternative hypothesis. The possible
values are "two.sided"
(the default), "less"
, and "greater"
.
character string indicating the direction (positive or negative) for the minimal
detectable difference when alternative="two.sided"
. When two.sided.direction="greater"
(the default), the minimal detectable
difference is positive. When two.sided.direction="less"
, the minimal
detectable difference is negative. This argument is ignored unless alternative="two.sided"
and either x.var="delta"
or y.var="delta"
.
logical scalar indicating whether to compute the power, sample size, or minimal
detectable difference based on the normal approximation to the binomial distribution.
The default value is approx=TRUE
. Currently, the exact method
(approx=FALSE
)
is only available for the one-sample case (i.e., sample.type="one.sample"
).
logical scalar indicating whether to use the continuity correction when approx=TRUE
. The default value is correct=TRUE
when sample.type="two.sample"
and correct=FALSE
when sample.type="one.sample"
. This argument is ignored when
approx=FALSE
.
logical scalar indicating whether to round up the values of the computed sample
size(s) to the next smallest integer. The default value is round.up=FALSE
.
This argument is ignored unless y.var="n"
.
logical scalar indicating whether to issue a warning. The default value is warn=TRUE
. When approx=TRUE
(test based on the normal approximation)
and warn=TRUE
, a warning is issued for cases when the normal approximation
to the binomial distribution probably is not accurate. When approx=FALSE
(exact test) and warn=TRUE
, a warning is issued when the user-supplied
sample size is too small to yield a significance level less than or equal to the
user-supplied value of alpha
.
integer relevant to the case when y.var="n"
and approx=FALSE
(i.e., when the power is based on the exact test). This argument indicates the
minimum allowed value for \(n\) to use in the search algorithm. The default
value is n.min=2
.
integer relevant to the case when y.var="n"
and approx=FALSE
(i.e., when the power is based on the exact test). This argument indicates the
maximum allowed value for \(n\) to use in the search algorithm. The default
value is n.max=10000
.
numeric vector relevant to the case when y.var="n"
and approx=FALSE
(i.e., when the power is based on the exact test). This argument indicates the
tolerance on alpha
to use in the search algorithm (i.e., how close the
actual Type I error level is to the value prescribed by the argument alpha
).
The default value is tol.alpha=0.1*alpha
.
numeric scalar relevant to the case when y.var="n"
and approx=FALSE
(i.e., when the power is based on the exact test), or when y.var="delta"
.
This argument is passed to the uniroot
function and indicates the tolerance
to use in the search algorithm. The default value is tol=1e-7
.
integer relevant to the case when y.var="n"
and approx=FALSE
(i.e., when the power is based on the exact test), or when y.var="delta"
.
This argument is passed to the
uniroot
function and indicates the maximum number of iterations to use
in the search algorithm. The default value is maxiter=1000
.
a logical scalar indicating whether to create a new plot or add to the existing plot
(see add
) on the current graphics device. If plot.it=FALSE
, no plot
is produced, but a list of (x,y) values is returned (see VALUE). The default value
is plot.it=TRUE
.
a logical scalar indicating whether to add the design plot to the
existing plot (add=TRUE
), or to create a plot from scratch
(add=FALSE
). The default value is add=FALSE
.
This argument is ignored if plot.it=FALSE
.
a numeric scalar specifying how many (x,y) pairs to use to produce the plot.
There are n.points
x-values evenly spaced between range.x.var[1]
and range.x.var[2]
. The default value is n.points=100
.
a numeric scalar or character string determining the color of the plotted
line or points. The default value is plot.col="black"
. See the
entry for col
in the help file for par
for more information.
a numeric scalar determining the width of the plotted line. The default value is
3*par("cex")
. See the entry for lwd
in the help file for par
for more information.
a numeric scalar determining the line type of the plotted line. The default value is
plot.lty=1
. See the entry for lty
in the help file for par
for more information.
a scalar indicating how many significant digits to print out on the plot. The default
value is the current setting of options("digits")
.
additional graphical parameters (see par
).
See the help files for propTestPower
, propTestN
, and
propTestMdd
for information on how to compute the power, sample size,
or minimal detectable difference for a one- or two-sample proportion test.
plotPropTestDesign
invisibly returns a list with components
x.var
and y.var
, giving coordinates of the points that have
been or would have been plotted.
See the help files for propTestPower
, propTestN
, and
propTestMdd
.
See the help files for propTestPower
, propTestN
, and
propTestMdd
.
# Look at the relationship between power and sample size for a
# one-sample proportion test, assuming the true proportion is 0.6, the
# hypothesized proportion is 0.5, and a 5% significance level.
# Compute the power based on the normal approximation to the binomial
# distribution.
dev.new()
plotPropTestDesign()
#----------
# For a two-sample proportion test, plot sample size vs. the minimal detectable
# difference for various levels of power, using a 5% significance level and a
# two-sided alternative:
dev.new()
plotPropTestDesign(x.var = "delta", y.var = "n", sample.type = "two",
ylim = c(0, 2800), main="")
plotPropTestDesign(x.var = "delta", y.var = "n", sample.type = "two",
power = 0.9, add = TRUE, plot.col = "red")
plotPropTestDesign(x.var = "delta", y.var = "n", sample.type = "two",
power = 0.8, add = TRUE, plot.col = "blue")
legend("topright", c("95%", "90%", "80%"), lty = 1,
lwd = 3 * par("cex"), col = c("black", "red", "blue"), bty = "n")
title(main = paste("Sample Size vs. Minimal Detectable Difference for Two-Sample",
"Proportion Test with p2=0.5, Alpha=0.05 and Various Powers", sep = "\n"))
#==========
# Example 22-3 on page 22-20 of USEPA (2009) involves determining whether more than
# 10% of chlorine gas containers are stored at pressures above a compliance limit.
# We want to test the one-sided null hypothesis that 10% or fewer of the containers
# are stored at pressures greater than the compliance limit versus the alternative
# that more than 10% are stored at pressures greater than the compliance limit.
# We want to have at least 90% power of detecting a true proportion of 30% or
# greater, using a 5% Type I error level.
# Here we will modify this example and create a plot of power versus
# sample size for various assumed minimal detactable differences,
# using a 5% Type I error level.
dev.new()
plotPropTestDesign(x.var = "n", y.var = "power",
sample.type = "one", alternative = "greater",
p0.or.p2 = 0.1, p.or.p1 = 0.25,
range.x.var = c(20, 50), ylim = c(0.6, 1), main = "")
plotPropTestDesign(x.var = "n", y.var = "power",
sample.type = "one", alternative = "greater",
p0.or.p2 = 0.1, p.or.p1 = 0.3,
range.x.var = c(20, 50), add = TRUE, plot.col = "red")
plotPropTestDesign(x.var = "n", y.var = "power",
sample.type = "one", alternative = "greater",
p0.or.p2 = 0.1, p.or.p1 = 0.35,
range.x.var = c(20, 50), add = TRUE, plot.col = "blue")
legend("bottomright", c("p=0.35", "p=0.3", "p=0.25"), lty = 1,
lwd = 3 * par("cex"), col = c("blue", "red", "black"), bty = "n")
title(main = paste("Power vs. Sample Size for One-Sided One-Sample Proportion",
"Test with p0=0.1, Alpha=0.05 and Various Detectable Differences",
sep = "\n"))
#==========
# Clean up
#---------
graphics.off()