norm.curve: plot a normal or a t-curve with both x and z axes. In HH: Statistical Analysis and Data Display: Heiberger and Holland

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.

Usage

 ``` 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``` ```normal.and.t.dist(mu.H0 = 0, mu.H1 = NA, obs.mean = 0, std.dev = 1, n = NA, deg.freedom = NA, alpha.left = alpha.right, alpha.right = .05, Use.mu.H1 = FALSE, Use.obs.mean = FALSE, Use.alpha.left = FALSE, Use.alpha.right= TRUE, hypoth.or.conf = 'Hypoth', xmin = NA, xmax = NA, gxbar.min = NA, gxbar.max = NA, cex.crit = 1.2, polygon.density= -1, polygon.lwd = 4, col.mean = 'limegreen', col.mean.label = 'limegreen', col.alpha = 'blue', col.alpha.label= 'blue', col.beta = 'red', col.beta.label = 'red', col.conf = 'palegreen', col.conf.arrow = 'darkgreen', col.conf.label = 'darkgreen' ) norm.setup(xlim=c(-2.5,2.5), ylim = c(0, 0.4)/se, mean=0, main=main.calc, se=sd/sqrt(n), sd=1, n=1, df.t=NULL, Use.obs.mean=TRUE, ...) norm.curve(mean=0, se=sd/sqrt(n), critical.values=mean + se*c(-1, 1)*z.975, z=if(se==0) 0 else do.call("seq", as.list(c((par()\$usr[1:2]-mean)/se, length=109))), shade, col="blue", axis.name=ifelse(is.null(df.t) || df.t==Inf, "z", "t"), second.axis.label.line=3, sd=1, n=1, df.t=NULL, axis.name.expr=axis.name, Use.obs.mean=TRUE, col.label=col, hypoth.or.conf="Hypoth", col.conf.arrow=par("col"), col.conf.label=par("col"), col.crit=ifelse(hypoth.or.conf=="Hypoth", 'blue', col.conf.arrow), cex.crit=1.2, polygon.density=-1, polygon.lwd=4, col.border=ifelse(is.na(polygon.density), FALSE, col), ...) norm.observed(xbar, t.xbar, t.xbar.H1=NULL, col="green", p.val=NULL, p.val.x=par()\$usr[2]+ left.margin, t.or.z=ifelse(is.null(deg.free) || deg.free==Inf, "z", "t"), t.or.z.position=par()\$usr[1]-left.margin, cex.small=par()\$cex*.7, col.label=col, xbar.negt=NULL, cex.large=par()\$cex, left.margin=.15*diff(par()\$usr[1:2]), sided="", deg.free=NULL) norm.outline(dfunction, left, right, mu.H0, se, deg.free=NULL, col.mean="green") ```

Arguments

 `xlim, ylim, xmin, xmax, gxbar.min, gxbar.max` `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 <[email protected]>

Examples

 ``` 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``` ```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) ```

HH documentation built on May 29, 2017, 7:49 p.m.