inorm {simEd}R Documentation

Visualization of Random Variate Generation for the Normal Distribution

Description

Generates random variates from the Normal distribution by inversion. Optionally graphs the population cumulative distribution function and associated random variates, the population probability density function and a histogram of the random variates, and the empirical cumulative distribution function versus the population cumulative distribution function.

Usage

inorm(
  u = runif(1),
  mean = 0,
  sd = 1,
  minPlotQuantile = 0.01,
  maxPlotQuantile = 0.99,
  plot = TRUE,
  showCDF = TRUE,
  showPDF = TRUE,
  showECDF = TRUE,
  show = NULL,
  maxInvPlotted = 50,
  plotDelay = 0,
  sampleColor = "red3",
  populationColor = "grey",
  showTitle = TRUE,
  respectLayout = FALSE,
  restorePar = TRUE,
  ...
)

Arguments

u

vector of uniform(0,1) random numbers, or NULL to show population figures only

mean

Mean of distribution (default 0)

sd

Standard deviation of distribution (default 1)

minPlotQuantile

minimum quantile to plot

maxPlotQuantile

maximum quantile to plot

plot

logical; if TRUE (default), one or more plots will appear (see parameters below); otherwise no plots appear

showCDF

logical; if TRUE (default), cdf plot appears, otherwise cdf plot is suppressed

showPDF

logical; if TRUE (default), PDF plot appears, otherwise PDF plot is suppressed

showECDF

logical; if TRUE (default), ecdf plot appears, otherwise ecdf plot is suppressed

show

octal number (0-7) indicating plots to display; 4: CDF, 2: PDF, 1: ECDF; sum for desired combination

maxInvPlotted

number of inversions to plot across CDF before switching to plotting quantiles only

plotDelay

delay in seconds between CDF plots

sampleColor

Color used to display random sample from distribution

populationColor

Color used to display population

showTitle

logical; if TRUE (default), displays a title in the first of any displayed plots

respectLayout

logical; if TRUE (default), respects existing settings for device layout

restorePar

logical; if TRUE (default), restores user's previous par settings on function exit

...

Possible additional arguments. Currently, additional arguments not considered.

Details

Generates random variates from the Normal distribution, and optionally, illustrates

When all of the graphics are requested,

All aspects of the random variate generation algorithm are output in red by default, which can be changed by specifying sampleColor. All aspects of the population distribution are output in gray by default, which can be changed by specifying populationColor.

The normal distribution has density

 \deqn{f(x) = \frac{1}{\sqrt{2\pi}\sigma} e^{-(x - \mu)^2/(2 \sigma^2)}}{
           f(x) = 1/(\sqrt(2\pi)\sigma) e^(-(x - \mu)^2/(2 \sigma^2))}

for -\infty < x < \infty and \sigma > 0, where \mu is the mean of the distribution and \sigma the standard deviation.

The algorithm for generating random variates from the normal distribution is synchronized (one random variate for each random number) and monotone in u. This means that the variates generated here might be useful in some variance reduction techniques used in Monte Carlo and discrete-event simulation.

Values from the u vector are plotted in the cdf plot along the vertical axis as colored dots. A horizontal, dashed, colored line extends from the dot to the population cdf. At the intersection, a vertical, dashed colored line extends downward to the horizontal axis, where a second colored dot, denoting the associated normal random variate is plotted.

This is not a particularly fast variate generation algorithm because it uses the base R qnorm function to invert the values contained in u.

All of the elements of the u vector must be between 0 and 1. Alternatively, u can be NULL in which case plot(s) of the theoretical PDF and cdf are displayed according to plotting parameter values (defaulting to display of both the PDF and cdf).

The show parameter can be used as a shortcut way to denote plots to display. The argument to show can be either:

Any valid value for show takes precedence over existing individual values for showCDF, showPDF, and showECDF.

If respectLayout is TRUE, the function respects existing settings for device layout. Note, however, that if the number of plots requested (either via show or via showCDF, showPMF, and showECDF) exceeds the number of plots available in the current layout (as determined by prod(par("mfrow"))), the function will display all requested plots but will also display a warning message indicating that the current layout does not permit simultaneous viewing of all requested plots. The most recent plot with this attribute can be further annotated after the call.

If respectLayout is FALSE, any existing user settings for device layout are ignored. That is, the function uses par to explicitly set mfrow sufficient to show all requested plots stacked vertically to align their horizontal axes, and then resets row, column, and margin settings to their prior state on exit.

The minPlotQuantile and maxPlotQuantile arguments are present in order to compress the plots horizontally. The random variates generated are not impacted by these two arguments. Vertical, dotted, black lines are plotted at the associated quantiles on the plots.

plotDelay can be used to slow down or halt the variate generation for classroom explanation.

In the plot associated with the PDF, the maximum plotting height is associated with 125\ that extends above this limit will have three dots appearing above it.

Value

A vector of Normal random variates

Author(s)

Barry Lawson (blawson@bates.edu),
Larry Leemis (leemis@math.wm.edu),
Vadim Kudlay (vkudlay@nvidia.com)

See Also

stats::rnorm

stats::runif, simEd::vunif

Examples

 inorm(0.5, mean = 3, sd = 1)

 set.seed(8675309)
 inorm(runif(10), 10, 2, showPDF = TRUE)

 set.seed(8675309)
 inorm(runif(10), 10, 2, showECDF = TRUE)

 set.seed(8675309)
 inorm(runif(10), 10, 2, showPDF = TRUE, showECDF = TRUE, sampleColor = "blue3")

 set.seed(8675309)
 inorm(runif(10), 10, 2, showPDF = TRUE, showCDF = FALSE)

 inorm(runif(100), 10, 2, showPDF = TRUE, minPlotQuantile = 0.02, maxPlotQuantile = 0.98)

 # plot the PDF and CDF without any variates
 inorm(NULL, 10, 2, showPDF = TRUE, showCDF = TRUE)

 # plot CDF with inversion and PDF using show
 inorm(runif(10), 10, 2, show = c(1,1,0))
 inorm(runif(10), 10, 2, show = 6)

 # plot CDF with inversion and ECDF using show, using vunif
 inorm(vunif(10), 10, 2, show = c(1,0,1))
 inorm(vunif(10), 10, 2, show = 5)

 # plot CDF with inversion, PDF, and ECDF using show
 inorm(vunif(10), 10, 2, show = c(1,1,1))
 inorm(vunif(10), 10, 2, show = 7)

 # plot three different CDF+PDF+ECDF horizontal displays,
 # with title only on the first display
 oldpar <- par(no.readonly = TRUE)
 par(mfrow = c(3,3))  # 3 rows, 3 cols, filling rows before columns
 set.seed(8675309)
 inorm(runif(20), 10, 2, show = 7, respectLayout = TRUE, restorePar = FALSE)
 inorm(runif(20), 10, 2, show = 7, respectLayout = TRUE, restorePar = FALSE, showTitle = FALSE)
 inorm(runif(20), 10, 2, show = 7, respectLayout = TRUE, restorePar = TRUE,  showTitle = FALSE)
 par(oldpar)

 # display animation of all components
 inorm(runif(10), 10, 2, show = 7, plotDelay = 0.1)

 # display animation of CDF and PDF components only
 inorm(runif(10), 10, 2, show = 5, plotDelay = 0.1)

 if (interactive()) {
   # interactive -- pause at each stage of inversion
   inorm(runif(10), 10, 2, show = 7, plotDelay = -1)
 }

  # overlay visual exploration of ks.test results
  oldpar <- par(no.readonly = TRUE)
  set.seed(54321)
  vals <- inorm(runif(10), 10, 2, showECDF = TRUE, restorePar = FALSE)
  D <- as.numeric(ks.test(vals, "pnorm", 10, 2)$statistic)
  for (x in seq(9.5, 10.5, by = 0.1)) {
    y <- pnorm(x, 10, 2)
    segments(x, y, x, y + D, col = "darkgreen", lwd = 2, xpd = NA)
  }
  par(oldpar) # restore original par values, since restorePar = FALSE above


[Package simEd version 2.0.1 Index]