R: plot a normal or a t-curve with both x and z axes.
norm.curve
R Documentation
plot a normal or a t-curve with both x and z axes.
Description
Plot a normal curve or a t-curve with both x (with mean and se
as specified) and z or t (mean=0, se=1) axes.
Shade a region for rejection region, acceptance region, confidence
interval.
The density axis is marked in units appropriate for the z or t axis.
The existence of any of the arguments se, sd, n
forces dual x and (z or t) scales. When none of these
arguments
are used, the main title defaults to
"Standard Normal Density N(0,1)" and only the z scale is
printed. A second density curve, appropriate for an alternative
hypothesis
is displayed when the argument axis.name="z1" is specified.
The shaded area is printed on the plot.
When the optional argument df.t is specified, then a
t-distribution with df.t degrees of freedom is plotted.
norm.observed plots a vertical line with arrowhead markers at
the location of the observed xbar.
normal.and.t.dist is a driver function that uses all the
others. It's primary function is drawing a plot. It returns
an invisible list containing the values it calculated and
displayed on the graph.
norm.curve draws the curves and filled areas as requested
by the normal.and.t.dist function. Any out of bounds
errors (for example, with normal.and.t.dist(deg.free=1))
are suppressed with par(err=-1) by this function and
restored to the previous value when the norm.curve function completes.
xlim, ylim.
Defaults to correct values for standard
Normal(0,1). User must set values for other mean and standard
error.
mean
Mean of the normal distribution in xbar-scale,
used in calls to dnorm.
se
standard error of the normal distribution in xbar-scale,
used in calls to dnorm.
sd, std.dev, n
standard deviation and sample size of the normal
distribution in x-scale. These may be used as an alternate way of
specifying the standard error se.
df.t, deg.freedom
Degrees of freedom for the t distribution. When
df.t is NULL, the normal distribution is used.
critical.values
Critical values in xbar-scale.
A scalar value implies a one-sided test. A vector of two values
implies a two-sided test.
main
Main title.
z
z-values (standardized to N(0,1)) used as base of plot.
shade
Valid values for shade are "right", "left", "inside", "outside", "none".
Default is "right" for one-sided critical.values and "outside"
for two-sided critical values.
col
color of the shaded region.
col.label, col.alpha, col.alpha.label
color of the area of
the shaded rejection region and its label.
col.beta, col.beta.label
color of the area of the shaded region
For Type II error and its label.
hypoth.or.conf
"Hypoth" or "Conf"
col.conf
Color of plot within confidence limits.
col.conf.arrow
Color of arrow denoting confidence limits.
col.conf.label
Color of label giving confidence level.
col.mean.label
Color of label for observed mean.
col.crit, cex.crit
Color and cex of critical values.
axis.name, axis.name.expr
defaults to "z"
for the standard normal scale centered on
the null hypothesis value of the mean or to "t" for
the t distribution with df.t degrees of freedom.
For alternative hypotheses, the user must specify either
"z1" or "t1" for the standard normal scale,
or t distibution with df.t degrees of freedom, centered on
the alternate hypothesis value of the mean. The
axis.name.expr allows R users to say
expression(z[1]) to get real subscripts.
second.axis.label.line
Defaults to 3.
Normally not needed. When two curves are drawn, one normal and one t,
then the second curve needs a different label for the y-axis.
Set this value to 4 to avoid overprinting.
xbar, obs.mean
xbar-value of the observed data.
t.xbar
t-value of the observed data under the null hypothesis.
...
Other arguments which are ignored.
Use.obs.mean
Logical. If TRUE, then include "mean"
on the plot.
alpha.right, alpha.left
Area in tail of curve.
Use.alpha.right, Use.alpha.left
Logical. If TRUE, then
include the specified α on the plot.
t.xbar.H1
t-value under alternate hypothesis.
p.val
under specified hypothesis
p.val.x,t.or.z.position
location on x-axis to put label
t.or.z
label for axis.
cex.small
cex for left margin labels of axis.
xbar.negt
location in data scale of negative t- or z-value
corresponding to observed x-value. Used for two-sided p-values.
cex.large
cex for labels in top margin.
left.margin
distance to the left of par()$usr[1].
sided
type of test.
deg.free
degrees of freedom or NULL.
dfunction
"dnorm" or "dt"
left
left end of interval
right
right end of interval
mu.H0, mu.H1
mean under the null hypothesis and alternative hypothesis.
Use.mu.H1
Logical. If TRUE, then include mu.H1
on the plot.
col.mean
Color of outline.
polygon.density, polygon.lwd, col.border
density, lwd,
border arguments to polygon. polygon.density
is -1 by default to give a solid color filled region.
Setting polygon.density to a positive value (we recommend 10)
gives a diagonally-hatched area appropriate for printing the graph
on a black and white printer.
Value
An invisible list containing the
calculated values of probabilities and critical values in the data
scale, the null hypothesis z- or t-scale, and the alternative
hypothesis z- or t-scale, as specified. The components are:
beta.left, beta.middle, beta.right, crit.val, crit.val.H1, crit.val.H1.left, crit.val.left, crit.val.left.z, crit.val.z, obs.mean.H0.p.val, obs.mean.H0.side, obs.mean.H0.z, obs.mean.H1.z, obs.mean.x.neg, obs.mean.x.pos, obs.mean.z.pos, standard, standard.error, standard.normal
Author(s)
Richard M. Heiberger <rmh@temple.edu>
Examples
normal.and.t.dist()
normal.and.t.dist(xmin=-4)
normal.and.t.dist(std.dev=2)
normal.and.t.dist(std.dev=2, Use.alpha.left=TRUE, deg.free=6)
normal.and.t.dist(std.dev=2, Use.alpha.left=TRUE, deg.free=6, gxbar.max=.20)
normal.and.t.dist(std.dev=2, Use.alpha.left=TRUE, deg.free=6,
gxbar.max=.20, polygon.density=10)
normal.and.t.dist(std.dev=2, Use.alpha.left=FALSE, deg.free=6,
gxbar.max=.20, polygon.density=10,
mu.H1=2, Use.mu.H1=TRUE,
obs.mean=2.5, Use.obs.mean=TRUE, xmin=-7)
normal.and.t.dist(std.dev=2, hypoth.or.conf="Conf")
normal.and.t.dist(std.dev=2, hypoth.or.conf="Conf", deg.free=8)
old.par <- par(oma=c(4,0,2,5), mar=c(7,7,4,2)+.1)
norm.setup()
norm.curve()
norm.setup(xlim=c(75,125), mean=100, se=5)
norm.curve(100, 5, 100+5*(1.645))
norm.observed(112, (112-100)/5)
norm.outline("dnorm", 112, par()$usr[2], 100, 5)
norm.setup(xlim=c(75,125), mean=100, se=5)
norm.curve(100, 5, 100+5*(-1.645), shade="left")
norm.setup(xlim=c(75,125), mean=100, se=5)
norm.curve(mean=100, se=5, col='red')
norm.setup(xlim=c(75,125), mean=100, se=5)
norm.curve(100, 5, 100+5*c(-1.96, 1.96))
norm.setup(xlim=c(-3, 6))
norm.curve(critical.values=1.645, mean=1.645+1.281552, col='green',
shade="left", axis.name="z1")
norm.curve(critical.values=1.645, col='red')
norm.setup(xlim=c(-6, 12), se=2)
norm.curve(critical.values=2*1.645, se=2, mean=2*(1.645+1.281552),
col='green', shade="left", axis.name="z1")
norm.curve(critical.values=2*1.645, se=2, mean=0,
col='red', shade="right")
par(mfrow=c(2,1))
norm.setup()
norm.curve()
mtext("norm.setup(); norm.curve()", side=1, line=5)
norm.setup(n=1)
norm.curve(n=1)
mtext("norm.setup(n=1); norm.curve(n=1)", side=1, line=5)
par(mfrow=c(1,1))
par(mfrow=c(2,2))
## naively scaled,
## areas under the curve are numerically the same but visually different
norm.setup(n=1)
norm.curve(n=1)
norm.observed(1.2, 1.2/(1/sqrt(1)))
norm.setup(n=2)
norm.curve(n=2)
norm.observed(1.2, 1.2/(1/sqrt(2)))
norm.setup(n=4)
norm.curve(n=4)
norm.observed(1.2, 1.2/(1/sqrt(4)))
norm.setup(n=10)
norm.curve(n=10)
norm.observed(1.2, 1.2/(1/sqrt(10)))
mtext("areas under the curve are numerically the same but visually different",
side=3, outer=TRUE)
## scaled so all areas under the curve are numerically and visually the same
norm.setup(n=1, ylim=c(0,1.3))
norm.curve(n=1)
norm.observed(1.2, 1.2/(1/sqrt(1)))
norm.setup(n=2, ylim=c(0,1.3))
norm.curve(n=2)
norm.observed(1.2, 1.2/(1/sqrt(2)))
norm.setup(n=4, ylim=c(0,1.3))
norm.curve(n=4)
norm.observed(1.2, 1.2/(1/sqrt(4)))
norm.setup(n=10, ylim=c(0,1.3))
norm.curve(n=10)
norm.observed(1.2, 1.2/(1/sqrt(10)))
mtext("all areas under the curve are numerically and visually the same",
side=3, outer=TRUE)
par(mfrow=c(1,1))
## t distribution
mu.H0 <- 16
se.val <- .4
df.val <- 10
crit.val <- mu.H0 - qt(.95, df.val) * se.val
mu.alt <- 15
obs.mean <- 14.8
alt.t <- (mu.alt - crit.val) / se.val
norm.setup(xlim=c(12, 19), se=se.val, df.t=df.val)
norm.curve(critical.values=crit.val, se=se.val, df.t=df.val, mean=mu.alt,
col='green', shade="left", axis.name="t1")
norm.curve(critical.values=crit.val, se=se.val, df.t=df.val, mean=mu.H0,
col='gray', shade="right")
norm.observed(obs.mean, (obs.mean-mu.H0)/se.val)
## normal
norm.setup(xlim=c(12, 19), se=se.val)
norm.curve(critical.values=crit.val, se=se.val, mean=mu.alt,
col='green', shade="left", axis.name="z1")
norm.curve(critical.values=crit.val, se=se.val, mean=mu.H0,
col='gray', shade="right")
norm.observed(obs.mean, (obs.mean-mu.H0)/se.val)
## normal and t
norm.setup(xlim=c(12, 19), se=se.val, main="t(6) and normal")
norm.curve(critical.values=15.5, se=se.val, mean=16.3,
col='gray', shade="right")
norm.curve(critical.values=15.5, se.val, df.t=6, mean=14.7,
col='green', shade="left", axis.name="t1", second.axis.label.line=4)
norm.curve(critical.values=15.5, se=se.val, mean=16.3,
col='gray', shade="none")
norm.setup(xlim=c(12, 19), se=se.val, main="t(6) and normal")
norm.curve(critical.values=15.5, se=se.val, mean=15.5,
col='gray', shade="right")
norm.curve(critical.values=15.5, se=se.val, df.t=6, mean=15.5,
col='green', shade="left", axis.name="t1", second.axis.label.line=4)
norm.curve(critical.values=15.5, se=se.val, mean=15.5,
col='gray', shade="none")
par(old.par)
Results
R version 3.3.1 (2016-06-21) -- "Bug in Your Hair"
Copyright (C) 2016 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)
R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.
R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.
Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.
> library(HH)
Loading required package: lattice
Loading required package: grid
Loading required package: latticeExtra
Loading required package: RColorBrewer
Loading required package: multcomp
Loading required package: mvtnorm
Loading required package: survival
Loading required package: TH.data
Loading required package: MASS
Attaching package: 'TH.data'
The following object is masked from 'package:MASS':
geyser
Loading required package: gridExtra
> png(filename="/home/ddbj/snapshot/RGM3/R_CC/result/HH/norm.curve.Rd_%03d_medium.png", width=480, height=480)
> ### Name: norm.curve
> ### Title: plot a normal or a t-curve with both x and z axes.
> ### Aliases: norm.setup norm.curve norm.observed norm.outline
> ### normal.and.t.dist
> ### Keywords: aplot hplot distribution
>
> ### ** Examples
>
> normal.and.t.dist()
> normal.and.t.dist(xmin=-4)
> normal.and.t.dist(std.dev=2)
> normal.and.t.dist(std.dev=2, Use.alpha.left=TRUE, deg.free=6)
> normal.and.t.dist(std.dev=2, Use.alpha.left=TRUE, deg.free=6, gxbar.max=.20)
> normal.and.t.dist(std.dev=2, Use.alpha.left=TRUE, deg.free=6,
+ gxbar.max=.20, polygon.density=10)
> normal.and.t.dist(std.dev=2, Use.alpha.left=FALSE, deg.free=6,
+ gxbar.max=.20, polygon.density=10,
+ mu.H1=2, Use.mu.H1=TRUE,
+ obs.mean=2.5, Use.obs.mean=TRUE, xmin=-7)
> normal.and.t.dist(std.dev=2, hypoth.or.conf="Conf")
> normal.and.t.dist(std.dev=2, hypoth.or.conf="Conf", deg.free=8)
>
> old.par <- par(oma=c(4,0,2,5), mar=c(7,7,4,2)+.1)
>
> norm.setup()
> norm.curve()
>
> norm.setup(xlim=c(75,125), mean=100, se=5)
> norm.curve(100, 5, 100+5*(1.645))
> norm.observed(112, (112-100)/5)
> norm.outline("dnorm", 112, par()$usr[2], 100, 5)
>
> norm.setup(xlim=c(75,125), mean=100, se=5)
> norm.curve(100, 5, 100+5*(-1.645), shade="left")
>
> norm.setup(xlim=c(75,125), mean=100, se=5)
> norm.curve(mean=100, se=5, col='red')
>
> norm.setup(xlim=c(75,125), mean=100, se=5)
> norm.curve(100, 5, 100+5*c(-1.96, 1.96))
>
> norm.setup(xlim=c(-3, 6))
> norm.curve(critical.values=1.645, mean=1.645+1.281552, col='green',
+ shade="left", axis.name="z1")
> norm.curve(critical.values=1.645, col='red')
>
> norm.setup(xlim=c(-6, 12), se=2)
> norm.curve(critical.values=2*1.645, se=2, mean=2*(1.645+1.281552),
+ col='green', shade="left", axis.name="z1")
> norm.curve(critical.values=2*1.645, se=2, mean=0,
+ col='red', shade="right")
>
>
> par(mfrow=c(2,1))
> norm.setup()
> norm.curve()
> mtext("norm.setup(); norm.curve()", side=1, line=5)
> norm.setup(n=1)
> norm.curve(n=1)
> mtext("norm.setup(n=1); norm.curve(n=1)", side=1, line=5)
> par(mfrow=c(1,1))
>
>
> par(mfrow=c(2,2))
>
> ## naively scaled,
> ## areas under the curve are numerically the same but visually different
> norm.setup(n=1)
> norm.curve(n=1)
> norm.observed(1.2, 1.2/(1/sqrt(1)))
> norm.setup(n=2)
> norm.curve(n=2)
> norm.observed(1.2, 1.2/(1/sqrt(2)))
> norm.setup(n=4)
> norm.curve(n=4)
> norm.observed(1.2, 1.2/(1/sqrt(4)))
> norm.setup(n=10)
> norm.curve(n=10)
> norm.observed(1.2, 1.2/(1/sqrt(10)))
> mtext("areas under the curve are numerically the same but visually different",
+ side=3, outer=TRUE)
>
> ## scaled so all areas under the curve are numerically and visually the same
> norm.setup(n=1, ylim=c(0,1.3))
> norm.curve(n=1)
> norm.observed(1.2, 1.2/(1/sqrt(1)))
> norm.setup(n=2, ylim=c(0,1.3))
> norm.curve(n=2)
> norm.observed(1.2, 1.2/(1/sqrt(2)))
> norm.setup(n=4, ylim=c(0,1.3))
> norm.curve(n=4)
> norm.observed(1.2, 1.2/(1/sqrt(4)))
> norm.setup(n=10, ylim=c(0,1.3))
> norm.curve(n=10)
> norm.observed(1.2, 1.2/(1/sqrt(10)))
> mtext("all areas under the curve are numerically and visually the same",
+ side=3, outer=TRUE)
>
> par(mfrow=c(1,1))
>
>
> ## t distribution
> mu.H0 <- 16
> se.val <- .4
> df.val <- 10
> crit.val <- mu.H0 - qt(.95, df.val) * se.val
> mu.alt <- 15
> obs.mean <- 14.8
>
> alt.t <- (mu.alt - crit.val) / se.val
> norm.setup(xlim=c(12, 19), se=se.val, df.t=df.val)
> norm.curve(critical.values=crit.val, se=se.val, df.t=df.val, mean=mu.alt,
+ col='green', shade="left", axis.name="t1")
> norm.curve(critical.values=crit.val, se=se.val, df.t=df.val, mean=mu.H0,
+ col='gray', shade="right")
> norm.observed(obs.mean, (obs.mean-mu.H0)/se.val)
>
> ## normal
> norm.setup(xlim=c(12, 19), se=se.val)
> norm.curve(critical.values=crit.val, se=se.val, mean=mu.alt,
+ col='green', shade="left", axis.name="z1")
> norm.curve(critical.values=crit.val, se=se.val, mean=mu.H0,
+ col='gray', shade="right")
> norm.observed(obs.mean, (obs.mean-mu.H0)/se.val)
>
>
>
> ## normal and t
> norm.setup(xlim=c(12, 19), se=se.val, main="t(6) and normal")
> norm.curve(critical.values=15.5, se=se.val, mean=16.3,
+ col='gray', shade="right")
> norm.curve(critical.values=15.5, se.val, df.t=6, mean=14.7,
+ col='green', shade="left", axis.name="t1", second.axis.label.line=4)
> norm.curve(critical.values=15.5, se=se.val, mean=16.3,
+ col='gray', shade="none")
>
> norm.setup(xlim=c(12, 19), se=se.val, main="t(6) and normal")
> norm.curve(critical.values=15.5, se=se.val, mean=15.5,
+ col='gray', shade="right")
> norm.curve(critical.values=15.5, se=se.val, df.t=6, mean=15.5,
+ col='green', shade="left", axis.name="t1", second.axis.label.line=4)
> norm.curve(critical.values=15.5, se=se.val, mean=15.5,
+ col='gray', shade="none")
>
>
>
> par(old.par)
>
>
>
>
>
> dev.off()
null device
1
>