Title: | Simulation Education |
Version: | 2.0.1 |
Imports: | graphics, grDevices, methods, stats, utils, shape |
Depends: | rstream |
Suggests: | magick |
Description: | Contains various functions to be used for simulation education, including simple Monte Carlo simulation functions, queueing simulation functions, variate generation functions capable of producing independent streams and antithetic variates, functions for illustrating random variate generation for various discrete and continuous distributions, and functions to compute time-persistent statistics. Also contains functions for visualizing: event-driven details of a single-server queue model; a Lehmer random number generator; variate generation via acceptance-rejection; and of generating a non-homogeneous Poisson process via thinning. Also contains two queueing data sets (one fabricated, one real-world) to facilitate input modeling. More details on the use of these functions can be found in Lawson and Leemis (2015) <doi:10.1109/WSC.2017.8248124>, in Kudlay, Lawson, and Leemis (2020) <doi:10.1109/WSC48552.2020.9384010>, and in Lawson and Leemis (2021) <doi:10.1109/WSC52266.2021.9715299>. |
License: | MIT + file LICENSE |
LazyData: | true |
Encoding: | UTF-8 |
RoxygenNote: | 7.2.3 |
NeedsCompilation: | no |
Packaged: | 2023-11-26 13:08:36 UTC; blawson |
Author: | Barry Lawson [aut, cre, cph], Larry Leemis [aut], Vadim Kudlay [aut] |
Maintainer: | Barry Lawson <blawson@bates.edu> |
Repository: | CRAN |
Date/Publication: | 2023-11-26 23:20:13 UTC |
Simulation Education
Description
Contains various functions to be used for simulation education, including simple Monte Carlo simulation functions, queueing simulation functions, variate generation functions capable of producing independent streams and antithetic variates, functions for illustrating random variate generation for various discrete and continuous distributions, and functions to compute time-persistent statistics. Also contains functions for visualizing: event-driven details of a single-server queue model; a Lehmer random number generator; variate generation via acceptance-rejection; and of generating a non-homogeneous Poisson process via thinning. Also contains two queueing data sets (one fabricated, one real-world) to facilitate input modeling. More details on the use of these functions can be found in Lawson and Leemis (2015) <doi:10.1109/WSC.2017.8248124>, in Kudlay, Lawson, and Leemis (2020) <doi:10.1109/WSC48552.2020.9384010>, and in Lawson and Leemis (2021) <doi:10.1109/WSC52266.2021.9715299>.
Request From Authors: If you adopt and use this package for your simulation course, we would greatly appreciate were you to email us (addresses below) to let us know, as we would like to maintain a list of adopters. Please include your name, university/affiliation, and course name/number. Thanks!
Details
The goal of this package is to facilitate use of R for an introductory course in discrete-event simulation.
This package contains animation functions for visualizing:
event-driven details of a single-server queue model (
ssqvis
);a Lehmer random number generator (
lehmer
);variate generation via acceptance-rejection (
accrej
);generation of a non-homogeneous Poisson process via thinning (
thinning
).
The package contains variate generators capable of independent streams
(based on Josef Leydold's rstream
package) and antithetic
variates for four discrete and eleven continuous distributions:
All of the variate generators use inversion, and are therefore monotone and synchronized.
The package contains functions to visualize variate generation for the same four discrete and eleven continuous distributions:
The package also contains functions that are event-driven simulation implementations of a single-server single-queue system and of a multiple-server single-queue system:
Both queueing functions are extensible in allowing the user to provide custom arrival and service process functions. As of version 2.0.0, both of these functions provide animation capability.
The package contains functions that implement Monte Carlo simulation approaches for estimating probabilities in two different dice games:
The package contains three functions for computing time-persistent statistics:
time-average mean:
meanTPS
time-average standard deviation:
sdTPS
time-average quantiles:
quantileTPS
The package also masks two functions from the stats
package:
-
set.seed
, which explicitly calls thestats
version in addition to setting up seeds for the independent streams in the package; -
sample
, which provides capability to use independent streams and antithetic variates.
Finally, the package provides two queueing data sets to facilitate input modeling:
-
queueTrace
, which contains 1000 arrival times and 1000 service times (all fabricated) for a single-server queueing system; -
tylersGrill
, which contains 1434 arrival times and 110 (sampled) service times corresponding to actual data collected during one business day at Tyler's Grill at the University of Richmond.
Acknowledgments
The authors would like to thank Dr. Barry L. Nelson, Walter P. Murphy Professor in the Department of Industrial Engineering & Management Sciences at Northwestern University, for meaningful feedback during the development of this package.
Author(s)
Barry Lawson [aut, cre, cph], Larry Leemis [aut], Vadim Kudlay [aut] Maintainer: Barry Lawson <blawson@bates.edu>
Acceptance-Rejection Algorithm Visualization
Description
This function animates the process of generating variates via acceptance-rejection for a specified density function (pdf) bounded by a specified majorizing function.
Usage
accrej(
n = 20,
pdf = function(x) dbeta(x, 3, 2),
majorizingFcn = NULL,
majorizingFcnType = NULL,
support = c(0, 1),
seed = NA,
maxTrials = Inf,
plot = TRUE,
showTitle = TRUE,
plotDelay = plot * -1
)
Arguments
n |
number of variates to generate. |
pdf |
desired probability density function from which random variates are to be drawn |
majorizingFcn |
majorizing function. Default value is NULL, corresponding to a constant majorizing function that is 1.01 times the maximum value of the pdf. May alternatively be provided as a user-specified function, or as a data frame requiring additional notation as either piecewise-constant or piecewise-linear. See examples. |
majorizingFcnType |
used to indicate whether a majorizing function that
is provided via data frame is to be interpreted as
either piecewise-constant ( |
support |
the lower and upper bounds of the support of the probability distribution of interest, specified as a two-element vector. |
seed |
initial seed for the uniform variates used during generation. |
maxTrials |
maximum number of accept-reject trials; infinite by default |
plot |
if TRUE, visual display will be produced. If FALSE, generated variates will be returned without visual display. |
showTitle |
if TRUE, display title in the main plot. |
plotDelay |
wait time, in seconds, between plots; -1 (default) for interactive mode, where the user is queried for input to progress. |
Details
There are three modes for visualizing the acceptance-rejection algorithm for generating random variates from a particular probability distribution:
interactive advance (
plotDelay = -1
), where pressing the 'ENTER' key advances to the next step (an accepted random variate) in the algorithm, typing 'j #' jumps ahead # steps, typing 'q' quits immediately, and typing 'e' proceeds to the end;automatic advance (
plotDelay
> 0); orfinal visualization only (
plotDelay = 0
).
As an alternative to visualizing, variates can be generated
Value
Returns the n generated variates accepted.
Examples
accrej(n = 20, seed = 8675309, plotDelay = 0)
accrej(n = 10, seed = 8675309, plotDelay = 0.1)
# interactive mode
if (interactive()) {
accrej(n = 10, seed = 8675309, plotDelay = -1)
}
# Piecewise-constant majorizing function
m <- function(x) {
if (x < 0.3) 1.0
else if (x < 0.85) 2.5
else 1.5
}
accrej(n = 10, seed = 8675309, majorizingFcn = m, plotDelay = 0)
# Piecewise-constant majorizing function as data frame
m <- data.frame(
x = c(0.0, 0.3, 0.85, 1.0),
y = c(1.0, 1.0, 2.5, 1.5))
accrej(n = 10, seed = 8675309, majorizingFcn = m,
majorizingFcnType = "pwc", plotDelay = 0)
# Piecewise-linear majorizing function as data frame
m <- data.frame(
x = c(0.0, 0.1, 0.3, 0.5, 0.7, 1.0),
y = c(0.0, 0.5, 1.1, 2.2, 1.9, 1.0))
accrej(n = 10, seed = 8675309, majorizingFcn = m,
majorizingFcnType = "pwl", plotDelay = 0)
# invalid majorizing function; should give warning
try(accrej(n = 20, majorizingFcn = function(x) dbeta(x, 1, 3), plotDelay = 0))
# Piecewise-linear majorizing function with power-distribution density function
m <- data.frame(x = c(0, 1, 2), y = c(0, 0.375, 1.5))
samples <- accrej(n = 10, pdf = function(x) (3 / 8) * x ^ 2, support = c(0,2),
majorizingFcn = m, majorizingFcnType = "pwl", plotDelay = 0)
Monte Carlo Simulation of the Dice Game "Craps"
Description
A Monte Carlo simulation of the dice game "craps". Returns a point estimate of the probability of winning craps using fair dice.
Usage
craps(nrep = 1000, seed = NA, showProgress = TRUE)
Arguments
nrep |
Number of replications (plays of a single game of craps) |
seed |
Initial seed to the random number generator (NA uses current
state of random number generator; |
showProgress |
If |
Details
Implements a Monte Carlo simulation of the dice game craps played with fair dice. A single play of the game proceeds as follows:
Two fair dice are rolled. If the sum is 7 or 11, the player wins immediately; if the sum is 2, 3, or 12, the player loses immediately. Otherwise the sum becomes the point.
The two dice continue to be rolled until either a sum of 7 is rolled (in which case the player loses) or a sum equal to the point is rolled (in which case the player wins).
The simulation involves nrep
replications of the game.
Note: When the value of nrep
is large, the function will execute
noticeably faster when showProgress
is set to FALSE
.
Value
Point estimate of the probability of winning at craps (a real-valued scalar).
Author(s)
Barry Lawson (blawson@bates.edu),
Larry Leemis (leemis@math.wm.edu),
Vadim Kudlay (vkudlay@nvidia.com)
See Also
Examples
# set the initial seed externally using set.seed;
# then use that current state of the generator with default nrep = 1000
set.seed(8675309)
craps() # uses state of generator set above
# explicitly set the seed in the call to the function,
# using default nrep = 1000
craps(seed = 8675309)
# use the current state of the random number generator with nrep = 10000
prob <- craps(10000)
# explicitly set nrep = 10000 and seed = 8675309
prob <- craps(10000, 8675309)
Monte Carlo Simulation of Galileo's Dice
Description
A Monte Carlo simulation of the Galileo's Dice problem.
Returns a vector containing point estimates of the probabilities of the
sum of three fair dice for sums 3, 4, \ldots
, 18.
Usage
galileo(nrep = 1000, seed = NA, showProgress = TRUE)
Arguments
nrep |
number of replications (rolls of the three dice) |
seed |
initial seed to the random number generator (NA uses current state of random number generator; NULL seeds using system clock) |
showProgress |
If TRUE, displays a progress bar on screen during execution |
Details
Implements a Monte Carlo simulation of the Galileo's Dice problem.
The simulation involves nrep
replications of rolling three dice and
summing the up-faces, and computing point estimates of the probabilities
of each possible sum 3, 4, \ldots
, 18.
Note: When the value of nrep
is large, the function will execute
noticeably faster when showProgress
is set to FALSE
.
Value
An 18-element vector of point estimates of the probabilities.
(Because a sum of 1 or 2 is not possible, the corresponding entries in the
returned vector have value NA
.)
Author(s)
Barry Lawson (blawson@bates.edu),
Larry Leemis (leemis@math.wm.edu),
Vadim Kudlay (vkudlay@nvidia.com)
Examples
# set the initial seed externally using set.seed;
# then use that current state of the generator with default nrep = 1000
set.seed(8675309)
galileo() # uses state of generator set above
# explicitly set the seed in the call to the function,
# using default nrep = 1000
galileo(seed = 8675309)
# use the current state of the random number generator with nrep = 10000
prob <- galileo(10000)
# explicitly set nrep = 10000 and seed = 8675309
prob <- galileo(10000, 8675309)
Visualization of Random Variate Generation for the Beta Distribution
Description
Generates random variates from the Beta 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
ibeta(
u = runif(1),
shape1,
shape2,
ncp = 0,
minPlotQuantile = 0.01,
maxPlotQuantile = 0.95,
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 |
shape1 |
Shape parameter 1 (alpha) |
shape2 |
Shape parameter 2 (beta) |
ncp |
Non-centrality parameter (default 0) |
minPlotQuantile |
minimum quantile to plot |
maxPlotQuantile |
maximum quantile to plot |
plot |
logical; if |
showCDF |
logical; if |
showPDF |
logical; if |
showECDF |
logical; if |
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 |
respectLayout |
logical; if |
restorePar |
logical; if |
... |
Possible additional arguments. Currently, additional arguments not considered. |
Details
Generates random variates from the Beta distribution, and optionally, illustrates
the use of the inverse-CDF technique,
the effect of random sampling variability in relation to the PDF and CDF.
When all of the graphics are requested,
the first graph illustrates the use of the inverse-CDF technique by graphing the population CDF and the transformation of the random numbers to random variates,
the second graph illustrates the effect of random sampling variability by graphing the population PDF and the histogram associated with the random variates, and
the third graph illustrates effect of random sampling variability by graphing the population CDF and the empirical CDF associated with the random variates.
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 beta distribution has density
\deqn{f(x) = \frac{\Gamma(a+b)}{\Gamma(a) \ \Gamma(b)} x^{a-1}(1-x)^{b-1}}{ f(x) = Gamma(a+b)/(Gamma(a)Gamma(b)) x^(a-1)(1-x)^(b-1)}
for a > 0
, b > 0
and 0 \leq x \leq 1
where the
boundary values at x=0
or x=1
are defined as by continuity (as limits).
The mean is \frac{a}{a+b}
and the variance is
{ab}{(a+b)^2 (a+b+1)}
The algorithm for generating random variates from the beta 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 beta random variate is plotted.
This is not a particularly fast variate generation algorithm because it uses
the base R qbeta
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:
a binary vector of length three, where the entries from left to right correspond to
showCDF
,showPDF
, andshowECDF
, respectively. For each entry, a 1 indicates the plot should be displayed, and a 0 indicates the plot should be suppressed.an integer in [0,7] interpreted similar to the Unix chmod command. That is, the integer's binary representation can be transformed into a length-three vector discussed above (e.g., 6 corresponds to c(1,1,0)). See examples.
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 Beta random variates
Author(s)
Barry Lawson (blawson@bates.edu),
Larry Leemis (leemis@math.wm.edu),
Vadim Kudlay (vkudlay@nvidia.com)
See Also
Examples
ibeta(0.5, shape1 = 3, shape2 = 1, ncp = 2)
set.seed(8675309)
ibeta(runif(10), 3, 1, showPDF = TRUE)
set.seed(8675309)
ibeta(runif(10), 3, 1, showECDF = TRUE)
set.seed(8675309)
ibeta(runif(10), 3, 1, showPDF = TRUE, showECDF = TRUE, sampleColor = "blue3")
set.seed(8675309)
ibeta(runif(10), 3, 1, showPDF = TRUE, showCDF = FALSE)
ibeta(runif(100), 3, 1, showPDF = TRUE, minPlotQuantile = 0.02, maxPlotQuantile = 0.98)
# plot the PDF and CDF without any variates
ibeta(NULL, 3, 1, showPDF = TRUE, showCDF = TRUE)
# plot CDF with inversion and PDF using show
ibeta(runif(10), 3, 1, show = c(1,1,0))
ibeta(runif(10), 3, 1, show = 6)
# plot CDF with inversion and ECDF using show, using vunif
ibeta(vunif(10), 3, 1, show = c(1,0,1))
ibeta(vunif(10), 3, 1, show = 5)
# plot CDF with inversion, PDF, and ECDF using show
ibeta(vunif(10), 3, 1, show = c(1,1,1))
ibeta(vunif(10), 3, 1, 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)
ibeta(runif(20), 3, 1, show = 7, respectLayout = TRUE, restorePar = FALSE)
ibeta(runif(20), 3, 1, show = 7, respectLayout = TRUE, restorePar = FALSE, showTitle = FALSE)
ibeta(runif(20), 3, 1, show = 7, respectLayout = TRUE, restorePar = TRUE, showTitle = FALSE)
par(oldpar)
# display animation of all components
ibeta(runif(10), 3, 1, show = 7, plotDelay = 0.1)
# display animation of CDF and PDF components only
ibeta(runif(10), 3, 1, show = 5, plotDelay = 0.1)
if (interactive()) {
# interactive -- pause at each stage of inversion
ibeta(runif(10), 3, 1, show = 7, plotDelay = -1)
}
Visualization of Random Variate Generation for the Binomial Distribution
Description
Generates random variates from the Binomial distribution by inversion. Optionally graphs the population cumulative distribution function and associated random variates, the population probability mass function and a histogram of the random variates, and the empirical cumulative distribution function versus the population cumulative distribution function.
Usage
ibinom(
u = runif(1),
size,
prob,
minPlotQuantile = 0,
maxPlotQuantile = 1,
plot = TRUE,
showCDF = TRUE,
showPMF = 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 |
size |
number of trials (zero or more) |
prob |
probability of success on each trial (0 |
minPlotQuantile |
minimum quantile to plot |
maxPlotQuantile |
maximum quantile to plot |
plot |
logical; if |
showCDF |
logical; if |
showPMF |
logical; if |
showECDF |
logical; if |
show |
octal number (0-7) indicating plots to display; 4: CDF, 2: PMF, 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 |
respectLayout |
logical; if |
restorePar |
logical; if |
... |
Possible additional arguments. Currently, additional arguments not considered. |
Details
Generates random variates from the Binomial distribution, and optionally, illustrates
the use of the inverse-CDF technique,
the effect of random sampling variability in relation to the PMF and CDF.
When all of the graphics are requested,
the first graph illustrates the use of the inverse-CDF technique by graphing the population CDF and the transformation of the random numbers to random variates,
the second graph illustrates the effect of random sampling variability by graphing the population PMF and the histogram associated with the random variates, and
the third graph illustrates effect of random sampling variability by graphing the population CDF and the empirical CDF associated with the random variates.
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 binomial distribution with parameters size
= n
and
prob
= p
has pmf
p(x) = {n \choose x} p^x (1-p)^{(n-x)}
for x = 0, \ldots, n
.
The algorithm for generating random variates from the binomial 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 binomial random variate is plotted.
This is not a particularly fast variate generation algorithm because it uses
the base R qbinom
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 PMF and cdf are displayed according to plotting parameter
values (defaulting to display of both the PMF and cdf).
The show
parameter can be used as a shortcut way to denote plots to
display. The argument to show
can be either:
a binary vector of length three, where the entries from left to right correspond to
showCDF
,showPMF
, andshowECDF
, respectively. For each entry, a 1 indicates the plot should be displayed, and a 0 indicates the plot should be suppressed.an integer in [0,7] interpreted similar to the Unix chmod command. That is, the integer's binary representation can be transformed into a length-three vector discussed above (e.g., 6 corresponds to c(1,1,0)). See examples.
Any valid value for show
takes precedence over existing individual
values for showCDF
, showPMF
, 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 PMF, the maximum plotting height is associated with 125\ that extends above this limit will have three dots appearing above it.
Value
A vector of Binomial random variates
Author(s)
Barry Lawson (blawson@bates.edu),
Larry Leemis (leemis@math.wm.edu),
Vadim Kudlay (vkudlay@nvidia.com)
See Also
Examples
ibinom(0.5, size = 7, prob = 0.4,)
set.seed(8675309)
ibinom(runif(10), 10, 0.3, showPMF = TRUE)
set.seed(8675309)
ibinom(runif(10), 10, 0.3, showECDF = TRUE)
set.seed(8675309)
ibinom(runif(10), 10, 0.3, showPMF = TRUE, showECDF = TRUE, sampleColor = "blue3")
set.seed(8675309)
ibinom(runif(10), 10, 0.3, showPMF = TRUE, showCDF = FALSE)
ibinom(runif(100), 10, 0.3, showPMF = TRUE, minPlotQuantile = 0.02, maxPlotQuantile = 0.98)
# plot the PMF and CDF without any variates
ibinom(NULL, 10, 0.3, showPMF = TRUE, showCDF = TRUE)
# plot CDF with inversion and PMF using show
ibinom(runif(10), 10, 0.3, show = c(1,1,0))
ibinom(runif(10), 10, 0.3, show = 6)
# plot CDF with inversion and ECDF using show, using vunif
ibinom(vunif(10), 10, 0.3, show = c(1,0,1))
ibinom(vunif(10), 10, 0.3, show = 5)
# plot CDF with inversion, PMF, and ECDF using show
ibinom(vunif(10), 10, 0.3, show = c(1,1,1))
ibinom(vunif(10), 10, 0.3, show = 7)
# plot three different CDF+PMF+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)
ibinom(runif(20), 10, 0.3, show = 7, respectLayout = TRUE, restorePar = FALSE)
ibinom(runif(20), 10, 0.3, show = 7, respectLayout = TRUE, restorePar = FALSE, showTitle = FALSE)
ibinom(runif(20), 10, 0.3, show = 7, respectLayout = TRUE, restorePar = TRUE, showTitle = FALSE)
par(oldpar)
# display animation of all components
ibinom(runif(10), 10, 0.3, show = 7, plotDelay = 0.1)
# display animation of CDF and PMF components only
ibinom(runif(10), 10, 0.3, show = 5, plotDelay = 0.1)
if (interactive()) {
# interactive -- pause at each stage of inversion
ibinom(runif(10), 10, 0.3, show = 7, plotDelay = -1)
}
Visualization of Random Variate Generation for the Cauchy Distribution
Description
Generates random variates from the Cauchy 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
icauchy(
u = runif(1),
location = 0,
scale = 1,
minPlotQuantile = 0.05,
maxPlotQuantile = 0.95,
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 |
location |
Location parameter (default 0) |
scale |
Scale parameter (default 1) |
minPlotQuantile |
minimum quantile to plot |
maxPlotQuantile |
maximum quantile to plot |
plot |
logical; if |
showCDF |
logical; if |
showPDF |
logical; if |
showECDF |
logical; if |
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 |
respectLayout |
logical; if |
restorePar |
logical; if |
... |
Possible additional arguments. Currently, additional arguments not considered. |
Details
Generates random variates from the Cauchy distribution, and optionally, illustrates
the use of the inverse-CDF technique,
the effect of random sampling variability in relation to the PDF and CDF.
When all of the graphics are requested,
the first graph illustrates the use of the inverse-CDF technique by graphing the population CDF and the transformation of the random numbers to random variates,
the second graph illustrates the effect of random sampling variability by graphing the population PDF and the histogram associated with the random variates, and
the third graph illustrates effect of random sampling variability by graphing the population CDF and the empirical CDF associated with the random variates.
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 Cauchy distribution has density \deqn{f(x) = \frac{1}{\pi s} \ \left(1 + \left( \frac{x - l}{s} \right)^2 \right)^{-1}}{ f(x) = 1 / (\pi s (1 + ((x-l)/s)^2))}
for all x
.
The mean is a/(a+b)
and the variance is ab/((a+b)^2 (a+b+1))
.
The algorithm for generating random variates from the Cauchy 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 Cauchy random variate is plotted.
This is not a particularly fast variate generation algorithm because it uses
the base R qcauchy
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:
a binary vector of length three, where the entries from left to right correspond to
showCDF
,showPDF
, andshowECDF
, respectively. For each entry, a 1 indicates the plot should be displayed, and a 0 indicates the plot should be suppressed.an integer in [0,7] interpreted similar to the Unix chmod command. That is, the integer's binary representation can be transformed into a length-three vector discussed above (e.g., 6 corresponds to c(1,1,0)). See examples.
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 Cauchy random variates
Author(s)
Barry Lawson (blawson@bates.edu),
Larry Leemis (leemis@math.wm.edu),
Vadim Kudlay (vkudlay@nvidia.com)
See Also
Examples
icauchy(0.5, location = 3, scale = 1)
set.seed(8675309)
icauchy(runif(10), 0, 3, showPDF = TRUE)
set.seed(8675309)
icauchy(runif(10), 0, 3, showECDF = TRUE)
set.seed(8675309)
icauchy(runif(10), 0, 3, showPDF = TRUE, showECDF = TRUE, sampleColor = "blue3")
set.seed(8675309)
icauchy(runif(10), 0, 3, showPDF = TRUE, showCDF = FALSE)
icauchy(runif(100), 0, 3, showPDF = TRUE, minPlotQuantile = 0.02, maxPlotQuantile = 0.98)
# plot the PDF and CDF without any variates
icauchy(NULL, 0, 3, showPDF = TRUE, showCDF = TRUE)
# plot CDF with inversion and PDF using show
icauchy(runif(10), 0, 3, show = c(1,1,0))
icauchy(runif(10), 0, 3, show = 6)
# plot CDF with inversion and ECDF using show, using vunif
icauchy(vunif(10), 0, 3, show = c(1,0,1))
icauchy(vunif(10), 0, 3, show = 5)
# plot CDF with inversion, PDF, and ECDF using show
icauchy(vunif(10), 0, 3, show = c(1,1,1))
icauchy(vunif(10), 0, 3, 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)
icauchy(runif(20), 0, 3, show = 7, respectLayout = TRUE, restorePar = FALSE)
icauchy(runif(20), 0, 3, show = 7, respectLayout = TRUE, restorePar = FALSE, showTitle = FALSE)
icauchy(runif(20), 0, 3, show = 7, respectLayout = TRUE, restorePar = TRUE, showTitle = FALSE)
par(oldpar)
# display animation of all components
icauchy(runif(10), 0, 3, show = 7, plotDelay = 0.1)
# display animation of CDF and PDF components only
icauchy(runif(10), 0, 3, show = 5, plotDelay = 0.1)
if (interactive()) {
# interactive -- pause at each stage of inversion
icauchy(runif(10), 0, 3, show = 7, plotDelay = -1)
}
Visualization of Random Variate Generation for the Chi-Squared Distribution
Description
Generates random variates from the Chi-Squared 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
ichisq(
u = runif(1),
df,
ncp = 0,
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 |
df |
Degrees of freedom (non-negative, but can be non-integer) |
ncp |
Non-centrality parameter (non-negative) |
minPlotQuantile |
minimum quantile to plot |
maxPlotQuantile |
maximum quantile to plot |
plot |
logical; if |
showCDF |
logical; if |
showPDF |
logical; if |
showECDF |
logical; if |
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 |
respectLayout |
logical; if |
restorePar |
logical; if |
... |
Possible additional arguments. Currently, additional arguments not considered. |
Details
Generates random variates from the Chi-Squared distribution, and optionally, illustrates
the use of the inverse-CDF technique,
the effect of random sampling variability in relation to the PDF and CDF.
When all of the graphics are requested,
the first graph illustrates the use of the inverse-CDF technique by graphing the population CDF and the transformation of the random numbers to random variates,
the second graph illustrates the effect of random sampling variability by graphing the population PDF and the histogram associated with the random variates, and
the third graph illustrates effect of random sampling variability by graphing the population CDF and the empirical CDF associated with the random variates.
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 chi-squared distribution with df
= n \geq 0
degrees
of freedom has density
\deqn{f_n(x) = \frac{1}{2^{n/2} \ \Gamma(n/2)} x^{n/2-1} e^{-x/2}}{ f_n(x) = 1 / (2^(n/2) \Gamma(n/2)) x^(n/2-1) e^(-x/2)}
for x > 0
. The mean and variance are n
and 2n
.
The non-central chi-squared distribution with df
= n degrees of
freedom and non-centrality parameter ncp
= \lambda
has density
\deqn{f(x) = e^{-\lambda/2} \sum_{r=0}^\infty \frac{(\lambda/2)^r}{r!} f_{n + 2r}(x)}{ f(x) = exp(-\lambda/2) SUM_{r=0}^\infty ((\lambda/2)^r / r!) dchisq(x, df + 2r)}
for x \geq 0
.
The algorithm for generating random variates from the chi-squared 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 chi-squared random variate is plotted.
This is not a particularly fast variate generation algorithm because it uses
the base R qchisq
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:
a binary vector of length three, where the entries from left to right correspond to
showCDF
,showPDF
, andshowECDF
, respectively. For each entry, a 1 indicates the plot should be displayed, and a 0 indicates the plot should be suppressed.an integer in [0,7] interpreted similar to the Unix chmod command. That is, the integer's binary representation can be transformed into a length-three vector discussed above (e.g., 6 corresponds to c(1,1,0)). See examples.
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 Chi-Squared random variates
Author(s)
Barry Lawson (blawson@bates.edu),
Larry Leemis (leemis@math.wm.edu),
Vadim Kudlay (vkudlay@nvidia.com)
See Also
Examples
ichisq(0.5, df = 3, ncp = 2)
set.seed(8675309)
ichisq(runif(10), 3, showPDF = TRUE)
set.seed(8675309)
ichisq(runif(10), 3, showECDF = TRUE)
set.seed(8675309)
ichisq(runif(10), 3, showPDF = TRUE, showECDF = TRUE, sampleColor = "blue3")
set.seed(8675309)
ichisq(runif(10), 3, showPDF = TRUE, showCDF = FALSE)
ichisq(runif(100), 3, showPDF = TRUE, minPlotQuantile = 0.02, maxPlotQuantile = 0.98)
# plot the PDF and CDF without any variates
ichisq(NULL, 3, showPDF = TRUE, showCDF = TRUE)
# plot CDF with inversion and PDF using show
ichisq(runif(10), 3, show = c(1,1,0))
ichisq(runif(10), 3, show = 6)
# plot CDF with inversion and ECDF using show, using vunif
ichisq(vunif(10), 3, show = c(1,0,1))
ichisq(vunif(10), 3, show = 5)
# plot CDF with inversion, PDF, and ECDF using show
ichisq(vunif(10), 3, show = c(1,1,1))
ichisq(vunif(10), 3, 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)
ichisq(runif(20), 3, show = 7, respectLayout = TRUE, restorePar = FALSE)
ichisq(runif(20), 3, show = 7, respectLayout = TRUE, restorePar = FALSE, showTitle = FALSE)
ichisq(runif(20), 3, show = 7, respectLayout = TRUE, restorePar = TRUE, showTitle = FALSE)
par(oldpar)
# display animation of all components
ichisq(runif(10), 3, show = 7, plotDelay = 0.1)
# display animation of CDF and PDF components only
ichisq(runif(10), 3, show = 5, plotDelay = 0.1)
if (interactive()) {
# interactive -- pause at each stage of inversion
ichisq(runif(10), 3, show = 7, plotDelay = -1)
}
Visualization of Random Variate Generation for the Exponential Distribution
Description
Generates random variates from the Exponential 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
iexp(
u = runif(1),
rate = 1,
minPlotQuantile = 0,
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 |
rate |
Rate of distribution (default 1) |
minPlotQuantile |
minimum quantile to plot |
maxPlotQuantile |
maximum quantile to plot |
plot |
logical; if |
showCDF |
logical; if |
showPDF |
logical; if |
showECDF |
logical; if |
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 |
respectLayout |
logical; if |
restorePar |
logical; if |
... |
Possible additional arguments. Currently, additional arguments not considered. |
Details
Generates random variates from the Exponential distribution, and optionally, illustrates
the use of the inverse-CDF technique,
the effect of random sampling variability in relation to the PDF and CDF.
When all of the graphics are requested,
the first graph illustrates the use of the inverse-CDF technique by graphing the population CDF and the transformation of the random numbers to random variates,
the second graph illustrates the effect of random sampling variability by graphing the population PDF and the histogram associated with the random variates, and
the third graph illustrates effect of random sampling variability by graphing the population CDF and the empirical CDF associated with the random variates.
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 exponential distribution with rate \eqn{\lambda} has density \deqn{f(x) = \lambda e^{-\lambda x}}{ f(x) = \lambda e^(-\lambda x)} for \eqn{x \geq 0}.
The algorithm for generating random variates from the exponential 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 exponential random variate is plotted.
This is not a particularly fast variate generation algorithm because it uses
the base R qexp
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:
a binary vector of length three, where the entries from left to right correspond to
showCDF
,showPDF
, andshowECDF
, respectively. For each entry, a 1 indicates the plot should be displayed, and a 0 indicates the plot should be suppressed.an integer in [0,7] interpreted similar to the Unix chmod command. That is, the integer's binary representation can be transformed into a length-three vector discussed above (e.g., 6 corresponds to c(1,1,0)). See examples.
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 Exponential random variates
Author(s)
Barry Lawson (blawson@bates.edu),
Larry Leemis (leemis@math.wm.edu),
Vadim Kudlay (vkudlay@nvidia.com)
See Also
Examples
iexp(0.5, rate = 3)
set.seed(8675309)
iexp(runif(10), 2, showPDF = TRUE)
set.seed(8675309)
iexp(runif(10), 2, showECDF = TRUE)
set.seed(8675309)
iexp(runif(10), 2, showPDF = TRUE, showECDF = TRUE, sampleColor = "blue3")
set.seed(8675309)
iexp(runif(10), 2, showPDF = TRUE, showCDF = FALSE)
iexp(runif(100), 2, showPDF = TRUE, minPlotQuantile = 0.02, maxPlotQuantile = 0.98)
# plot the PDF and CDF without any variates
iexp(NULL, 2, showPDF = TRUE, showCDF = TRUE)
# plot CDF with inversion and PDF using show
iexp(runif(10), 2, show = c(1,1,0))
iexp(runif(10), 2, show = 6)
# plot CDF with inversion and ECDF using show, using vunif
iexp(vunif(10), 2, show = c(1,0,1))
iexp(vunif(10), 2, show = 5)
# plot CDF with inversion, PDF, and ECDF using show
iexp(vunif(10), 2, show = c(1,1,1))
iexp(vunif(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)
iexp(runif(20), 2, show = 7, respectLayout = TRUE, restorePar = FALSE)
iexp(runif(20), 2, show = 7, respectLayout = TRUE, restorePar = FALSE, showTitle = FALSE)
iexp(runif(20), 2, show = 7, respectLayout = TRUE, restorePar = TRUE, showTitle = FALSE)
par(oldpar)
# display animation of all components
iexp(runif(10), 2, show = 7, plotDelay = 0.1)
# display animation of CDF and PDF components only
iexp(runif(10), 2, show = 5, plotDelay = 0.1)
if (interactive()) {
# interactive -- pause at each stage of inversion
iexp(runif(10), 2, show = 7, plotDelay = -1)
}
# overlay visual exploration of ks.test results
oldpar <- par(no.readonly = TRUE)
set.seed(54321)
vals <- iexp(runif(10), 2, showECDF = TRUE, restorePar = FALSE)
D <- as.numeric(ks.test(vals, "pexp", 2)$statistic)
for (x in seq(0.25, 0.65, by = 0.05)) {
y <- pexp(x, 2)
segments(x, y, x, y + D, col = "darkgreen", lwd = 2, xpd = NA)
}
par(oldpar) # restore original par values, since restorePar = FALSE above
Visualization of Random Variate Generation for the FALSE Distribution
Description
Generates random variates from the FALSE 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
ifd(
u = runif(1),
df1,
df2,
ncp = 0,
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 |
df1 |
Degrees of freedom > 0 |
df2 |
Degrees of freedom > 0 |
ncp |
Non-centrality parameter >= 0 |
minPlotQuantile |
minimum quantile to plot |
maxPlotQuantile |
maximum quantile to plot |
plot |
logical; if |
showCDF |
logical; if |
showPDF |
logical; if |
showECDF |
logical; if |
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 |
respectLayout |
logical; if |
restorePar |
logical; if |
... |
Possible additional arguments. Currently, additional arguments not considered. |
Details
Generates random variates from the FALSE distribution, and optionally, illustrates
the use of the inverse-CDF technique,
the effect of random sampling variability in relation to the PDF and CDF.
When all of the graphics are requested,
the first graph illustrates the use of the inverse-CDF technique by graphing the population CDF and the transformation of the random numbers to random variates,
the second graph illustrates the effect of random sampling variability by graphing the population PDF and the histogram associated with the random variates, and
the third graph illustrates effect of random sampling variability by graphing the population CDF and the empirical CDF associated with the random variates.
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 F distribution with df1
= n_1
and df2
= n_2
degrees of freedom has density
f(x) = \frac {\Gamma(n_1/2 + n_2/2)} {\Gamma(n_1/2) \ \Gamma(n_2/2)}
\left( \frac{n_1}{n_2} \right)^{n_1/2} x^{n_1/2 - 1}
\left( 1 + \frac{n_1x}{n_2} \right) ^ {-(n_1 + n_2)/2}
for x > 0
.
The algorithm for generating random variates from the FALSE 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 FALSE random variate is plotted.
This is not a particularly fast variate generation algorithm because it uses
the base R qf
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:
a binary vector of length three, where the entries from left to right correspond to
showCDF
,showPDF
, andshowECDF
, respectively. For each entry, a 1 indicates the plot should be displayed, and a 0 indicates the plot should be suppressed.an integer in [0,7] interpreted similar to the Unix chmod command. That is, the integer's binary representation can be transformed into a length-three vector discussed above (e.g., 6 corresponds to c(1,1,0)). See examples.
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 FALSE random variates
Author(s)
Barry Lawson (blawson@bates.edu),
Larry Leemis (leemis@math.wm.edu),
Vadim Kudlay (vkudlay@nvidia.com)
See Also
Examples
ifd(0.5, df1 = 1, df2 = 2, ncp = 10)
set.seed(8675309)
ifd(runif(10), 5, 5, showPDF = TRUE)
set.seed(8675309)
ifd(runif(10), 5, 5, showECDF = TRUE)
set.seed(8675309)
ifd(runif(10), 5, 5, showPDF = TRUE, showECDF = TRUE, sampleColor = "blue3")
set.seed(8675309)
ifd(runif(10), 5, 5, showPDF = TRUE, showCDF = FALSE)
ifd(runif(100), 5, 5, showPDF = TRUE, minPlotQuantile = 0.02, maxPlotQuantile = 0.98)
# plot the PDF and CDF without any variates
ifd(NULL, 5, 5, showPDF = TRUE, showCDF = TRUE)
# plot CDF with inversion and PDF using show
ifd(runif(10), 5, 5, show = c(1,1,0))
ifd(runif(10), 5, 5, show = 6)
# plot CDF with inversion and ECDF using show, using vunif
ifd(vunif(10), 5, 5, show = c(1,0,1))
ifd(vunif(10), 5, 5, show = 5)
# plot CDF with inversion, PDF, and ECDF using show
ifd(vunif(10), 5, 5, show = c(1,1,1))
ifd(vunif(10), 5, 5, 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)
ifd(runif(20), 5, 5, show = 7, respectLayout = TRUE, restorePar = FALSE)
ifd(runif(20), 5, 5, show = 7, respectLayout = TRUE, restorePar = FALSE, showTitle = FALSE)
ifd(runif(20), 5, 5, show = 7, respectLayout = TRUE, restorePar = TRUE, showTitle = FALSE)
par(oldpar)
# display animation of all components
ifd(runif(10), 5, 5, show = 7, plotDelay = 0.1)
# display animation of CDF and PDF components only
ifd(runif(10), 5, 5, show = 5, plotDelay = 0.1)
if (interactive()) {
# interactive -- pause at each stage of inversion
ifd(runif(10), 5, 5, show = 7, plotDelay = -1)
}
Visualization of Random Variate Generation for the Gamma Distribution
Description
Generates random variates from the Gamma 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
igamma(
u = runif(1),
shape,
rate = 1,
scale = 1/rate,
minPlotQuantile = 0,
maxPlotQuantile = 0.95,
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 |
shape |
Shape parameter |
rate |
Alternate parameterization for scale |
scale |
Scale parameter |
minPlotQuantile |
minimum quantile to plot |
maxPlotQuantile |
maximum quantile to plot |
plot |
logical; if |
showCDF |
logical; if |
showPDF |
logical; if |
showECDF |
logical; if |
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 |
respectLayout |
logical; if |
restorePar |
logical; if |
... |
Possible additional arguments. Currently, additional arguments not considered. |
Details
Generates random variates from the Gamma distribution, and optionally, illustrates
the use of the inverse-CDF technique,
the effect of random sampling variability in relation to the PDF and CDF.
When all of the graphics are requested,
the first graph illustrates the use of the inverse-CDF technique by graphing the population CDF and the transformation of the random numbers to random variates,
the second graph illustrates the effect of random sampling variability by graphing the population PDF and the histogram associated with the random variates, and
the third graph illustrates effect of random sampling variability by graphing the population CDF and the empirical CDF associated with the random variates.
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 gamma distribution with parameters \code{shape} = \eqn{a} and \code{scale} = \eqn{s} has density \deqn{f(x) = \frac{1}{s^a\, \Gamma(a)} x^{a-1} e^{-x/s}}{ f(x) = 1/(s^a Gamma(a)) x^(a-1) e^(-x/s)} for \eqn{x \ge 0}, \eqn{a > 0}, and \eqn{s > 0}. (Here \eqn{\Gamma(a)}{Gamma(a)} is the function implemented by R's \code{\link[base:Special]{gamma}()} and defined in its help.) The population mean and variance are \eqn{E(X) = as} and \eqn{Var(X) = as^2}.
The algorithm for generating random variates from the gamma 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 gamma random variate is plotted.
This is not a particularly fast variate generation algorithm because it uses
the base R qgamma
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:
a binary vector of length three, where the entries from left to right correspond to
showCDF
,showPDF
, andshowECDF
, respectively. For each entry, a 1 indicates the plot should be displayed, and a 0 indicates the plot should be suppressed.an integer in [0,7] interpreted similar to the Unix chmod command. That is, the integer's binary representation can be transformed into a length-three vector discussed above (e.g., 6 corresponds to c(1,1,0)). See examples.
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 Gamma random variates
Author(s)
Barry Lawson (blawson@bates.edu),
Larry Leemis (leemis@math.wm.edu),
Vadim Kudlay (vkudlay@nvidia.com)
See Also
Examples
igamma(0.5, shape = 5, scale = 3)
set.seed(8675309)
igamma(runif(10), 3, 2, showPDF = TRUE)
set.seed(8675309)
igamma(runif(10), 3, 2, showECDF = TRUE)
set.seed(8675309)
igamma(runif(10), 3, 2, showPDF = TRUE, showECDF = TRUE, sampleColor = "blue3")
set.seed(8675309)
igamma(runif(10), 3, 2, showPDF = TRUE, showCDF = FALSE)
igamma(runif(100), 3, 2, showPDF = TRUE, minPlotQuantile = 0.02, maxPlotQuantile = 0.98)
# plot the PDF and CDF without any variates
igamma(NULL, 3, 2, showPDF = TRUE, showCDF = TRUE)
# plot CDF with inversion and PDF using show
igamma(runif(10), 3, 2, show = c(1,1,0))
igamma(runif(10), 3, 2, show = 6)
# plot CDF with inversion and ECDF using show, using vunif
igamma(vunif(10), 3, 2, show = c(1,0,1))
igamma(vunif(10), 3, 2, show = 5)
# plot CDF with inversion, PDF, and ECDF using show
igamma(vunif(10), 3, 2, show = c(1,1,1))
igamma(vunif(10), 3, 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)
igamma(runif(20), 3, 2, show = 7, respectLayout = TRUE, restorePar = FALSE)
igamma(runif(20), 3, 2, show = 7, respectLayout = TRUE, restorePar = FALSE, showTitle = FALSE)
igamma(runif(20), 3, 2, show = 7, respectLayout = TRUE, restorePar = TRUE, showTitle = FALSE)
par(oldpar)
# display animation of all components
igamma(runif(10), 3, 2, show = 7, plotDelay = 0.1)
# display animation of CDF and PDF components only
igamma(runif(10), 3, 2, show = 5, plotDelay = 0.1)
if (interactive()) {
# interactive -- pause at each stage of inversion
igamma(runif(10), 3, 2, show = 7, plotDelay = -1)
}
# overlay visual exploration of ks.test results
oldpar <- par(no.readonly = TRUE)
set.seed(54321)
vals <- igamma(runif(10), 3, 2, showECDF = TRUE, restorePar = FALSE)
D <- as.numeric(ks.test(vals, "pgamma", 3, 2)$statistic)
for (x in seq(1.20, 1.60, by = 0.05)) {
y <- pgamma(x, 3, 2)
segments(x, y, x, y + D, col = "darkgreen", lwd = 2, xpd = NA)
}
par(oldpar) # restore original par values, since restorePar = FALSE above
Visualization of Random Variate Generation for the Geometric Distribution
Description
Generates random variates from the Geometric distribution by inversion. Optionally graphs the population cumulative distribution function and associated random variates, the population probability mass function and a histogram of the random variates, and the empirical cumulative distribution function versus the population cumulative distribution function.
Usage
igeom(
u = runif(1),
prob,
minPlotQuantile = 0,
maxPlotQuantile = 0.95,
plot = TRUE,
showCDF = TRUE,
showPMF = 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 |
prob |
Probability of success in each trial (0 |
minPlotQuantile |
minimum quantile to plot |
maxPlotQuantile |
maximum quantile to plot |
plot |
logical; if |
showCDF |
logical; if |
showPMF |
logical; if |
showECDF |
logical; if |
show |
octal number (0-7) indicating plots to display; 4: CDF, 2: PMF, 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 |
respectLayout |
logical; if |
restorePar |
logical; if |
... |
Possible additional arguments. Currently, additional arguments not considered. |
Details
Generates random variates from the Geometric distribution, and optionally, illustrates
the use of the inverse-CDF technique,
the effect of random sampling variability in relation to the PMF and CDF.
When all of the graphics are requested,
the first graph illustrates the use of the inverse-CDF technique by graphing the population CDF and the transformation of the random numbers to random variates,
the second graph illustrates the effect of random sampling variability by graphing the population PMF and the histogram associated with the random variates, and
the third graph illustrates effect of random sampling variability by graphing the population CDF and the empirical CDF associated with the random variates.
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 geometric distribution with parameter prob
= p
has density
p(x) = p (1-p)^x
for x = 0, 1, 2, \ldots
, where 0 < p \le 1
.
The algorithm for generating random variates from the geometric 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 geometric random variate is plotted.
This is not a particularly fast variate generation algorithm because it uses
the base R qgeom
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 PMF and cdf are displayed according to plotting parameter
values (defaulting to display of both the PMF and cdf).
The show
parameter can be used as a shortcut way to denote plots to
display. The argument to show
can be either:
a binary vector of length three, where the entries from left to right correspond to
showCDF
,showPMF
, andshowECDF
, respectively. For each entry, a 1 indicates the plot should be displayed, and a 0 indicates the plot should be suppressed.an integer in [0,7] interpreted similar to the Unix chmod command. That is, the integer's binary representation can be transformed into a length-three vector discussed above (e.g., 6 corresponds to c(1,1,0)). See examples.
Any valid value for show
takes precedence over existing individual
values for showCDF
, showPMF
, 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 PMF, the maximum plotting height is associated with 125\ that extends above this limit will have three dots appearing above it.
Value
A vector of Geometric random variates
Author(s)
Barry Lawson (blawson@bates.edu),
Larry Leemis (leemis@math.wm.edu),
Vadim Kudlay (vkudlay@nvidia.com)
See Also
Examples
igeom(0.5, prob = 0.25)
set.seed(8675309)
igeom(runif(10), 0.4, showPMF = TRUE)
set.seed(8675309)
igeom(runif(10), 0.4, showECDF = TRUE)
set.seed(8675309)
igeom(runif(10), 0.4, showPMF = TRUE, showECDF = TRUE, sampleColor = "blue3")
set.seed(8675309)
igeom(runif(10), 0.4, showPMF = TRUE, showCDF = FALSE)
igeom(runif(100), 0.4, showPMF = TRUE, minPlotQuantile = 0.02, maxPlotQuantile = 0.98)
# plot the PMF and CDF without any variates
igeom(NULL, 0.4, showPMF = TRUE, showCDF = TRUE)
# plot CDF with inversion and PMF using show
igeom(runif(10), 0.4, show = c(1,1,0))
igeom(runif(10), 0.4, show = 6)
# plot CDF with inversion and ECDF using show, using vunif
igeom(vunif(10), 0.4, show = c(1,0,1))
igeom(vunif(10), 0.4, show = 5)
# plot CDF with inversion, PMF, and ECDF using show
igeom(vunif(10), 0.4, show = c(1,1,1))
igeom(vunif(10), 0.4, show = 7)
# plot three different CDF+PMF+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)
igeom(runif(20), 0.4, show = 7, respectLayout = TRUE, restorePar = FALSE)
igeom(runif(20), 0.4, show = 7, respectLayout = TRUE, restorePar = FALSE, showTitle = FALSE)
igeom(runif(20), 0.4, show = 7, respectLayout = TRUE, restorePar = TRUE, showTitle = FALSE)
par(oldpar)
# display animation of all components
igeom(runif(10), 0.4, show = 7, plotDelay = 0.1)
# display animation of CDF and PMF components only
igeom(runif(10), 0.4, show = 5, plotDelay = 0.1)
if (interactive()) {
# interactive -- pause at each stage of inversion
igeom(runif(10), 0.4, show = 7, plotDelay = -1)
}
Visualization of Random Variate Generation for the Log-Normal Distribution
Description
Generates random variates from the Log-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
ilnorm(
u = runif(1),
meanlog = 0,
sdlog = 1,
minPlotQuantile = 0,
maxPlotQuantile = 0.95,
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 |
meanlog |
Mean of distribution on log scale (default 0) |
sdlog |
Standard deviation of distribution on log scale (default 1) |
minPlotQuantile |
minimum quantile to plot |
maxPlotQuantile |
maximum quantile to plot |
plot |
logical; if |
showCDF |
logical; if |
showPDF |
logical; if |
showECDF |
logical; if |
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 |
respectLayout |
logical; if |
restorePar |
logical; if |
... |
Possible additional arguments. Currently, additional arguments not considered. |
Details
Generates random variates from the Log-Normal distribution, and optionally, illustrates
the use of the inverse-CDF technique,
the effect of random sampling variability in relation to the PDF and CDF.
When all of the graphics are requested,
the first graph illustrates the use of the inverse-CDF technique by graphing the population CDF and the transformation of the random numbers to random variates,
the second graph illustrates the effect of random sampling variability by graphing the population PDF and the histogram associated with the random variates, and
the third graph illustrates effect of random sampling variability by graphing the population CDF and the empirical CDF associated with the random variates.
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 log-normal distribution has density
\deqn{f(x) = \frac{1}{\sqrt{2 \pi} \sigma x} e^{-(\log{x} - \mu)^2 / (2 \sigma^2)} }{ f(x) = 1/(\sqrt(2 \pi) \sigma x) e^-((log x - \mu)^2 / (2 \sigma^2))}
where \mu
and \sigma
are the mean and standard deviation
of the logarithm.
The mean is
E(X) = \exp(\mu + 1/2 \sigma^2)
,
the median is
med(X) = \exp(\mu)
,
and the variance is
Var(X) = \exp(2\times \mu +\sigma^2)\times (\exp(\sigma^2)-1)
and hence the coefficient of variation is
sqrt(\exp(\sigma^2)-1)
which is approximately \sigma
when small
(e.g., \sigma < 1/2
).
The algorithm for generating random variates from the log-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 log-normal random variate is plotted.
This is not a particularly fast variate generation algorithm because it uses
the base R qlnorm
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:
a binary vector of length three, where the entries from left to right correspond to
showCDF
,showPDF
, andshowECDF
, respectively. For each entry, a 1 indicates the plot should be displayed, and a 0 indicates the plot should be suppressed.an integer in [0,7] interpreted similar to the Unix chmod command. That is, the integer's binary representation can be transformed into a length-three vector discussed above (e.g., 6 corresponds to c(1,1,0)). See examples.
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 Log-Normal random variates
Author(s)
Barry Lawson (blawson@bates.edu),
Larry Leemis (leemis@math.wm.edu),
Vadim Kudlay (vkudlay@nvidia.com)
See Also
Examples
ilnorm(0.5, meanlog = 5, sdlog = 0.5)
set.seed(8675309)
ilnorm(runif(10), 8, 2, showPDF = TRUE)
set.seed(8675309)
ilnorm(runif(10), 8, 2, showECDF = TRUE)
set.seed(8675309)
ilnorm(runif(10), 8, 2, showPDF = TRUE, showECDF = TRUE, sampleColor = "blue3")
set.seed(8675309)
ilnorm(runif(10), 8, 2, showPDF = TRUE, showCDF = FALSE)
ilnorm(runif(100), 8, 2, showPDF = TRUE, minPlotQuantile = 0.02, maxPlotQuantile = 0.98)
# plot the PDF and CDF without any variates
ilnorm(NULL, 8, 2, showPDF = TRUE, showCDF = TRUE)
# plot CDF with inversion and PDF using show
ilnorm(runif(10), 8, 2, show = c(1,1,0))
ilnorm(runif(10), 8, 2, show = 6)
# plot CDF with inversion and ECDF using show, using vunif
ilnorm(vunif(10), 8, 2, show = c(1,0,1))
ilnorm(vunif(10), 8, 2, show = 5)
# plot CDF with inversion, PDF, and ECDF using show
ilnorm(vunif(10), 8, 2, show = c(1,1,1))
ilnorm(vunif(10), 8, 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)
ilnorm(runif(20), 8, 2, show = 7, respectLayout = TRUE, restorePar = FALSE)
ilnorm(runif(20), 8, 2, show = 7, respectLayout = TRUE, restorePar = FALSE, showTitle = FALSE)
ilnorm(runif(20), 8, 2, show = 7, respectLayout = TRUE, restorePar = TRUE, showTitle = FALSE)
par(oldpar)
# display animation of all components
ilnorm(runif(10), 8, 2, show = 7, plotDelay = 0.1)
# display animation of CDF and PDF components only
ilnorm(runif(10), 8, 2, show = 5, plotDelay = 0.1)
if (interactive()) {
# interactive -- pause at each stage of inversion
ilnorm(runif(10), 8, 2, show = 7, plotDelay = -1)
}
Visualization of Random Variate Generation for the Logistic Distribution
Description
Generates random variates from the Logistic 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
ilogis(
u = runif(1),
location = 0,
scale = 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 |
location |
Location parameter |
scale |
Scale parameter (default 1) |
minPlotQuantile |
minimum quantile to plot |
maxPlotQuantile |
maximum quantile to plot |
plot |
logical; if |
showCDF |
logical; if |
showPDF |
logical; if |
showECDF |
logical; if |
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 |
respectLayout |
logical; if |
restorePar |
logical; if |
... |
Possible additional arguments. Currently, additional arguments not considered. |
Details
Generates random variates from the Logistic distribution, and optionally, illustrates
the use of the inverse-CDF technique,
the effect of random sampling variability in relation to the PDF and CDF.
When all of the graphics are requested,
the first graph illustrates the use of the inverse-CDF technique by graphing the population CDF and the transformation of the random numbers to random variates,
the second graph illustrates the effect of random sampling variability by graphing the population PDF and the histogram associated with the random variates, and
the third graph illustrates effect of random sampling variability by graphing the population CDF and the empirical CDF associated with the random variates.
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 logistic distribution with location
= \mu
and
scale
= \sigma
has distribution function
F(x) = \frac{1}{1 + e^{-(x - \mu) / \sigma}}
and density
f(x) = \frac{1}{\sigma} \frac{e^{(x-\mu)/\sigma}}
{(1 + e^{(x-\mu)/\sigma})^2}
It is a long-tailed distribution with mean \mu
and
variance \pi^2 / 3 \sigma^2
.
The algorithm for generating random variates from the logistic 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 logistic random variate is plotted.
This is not a particularly fast variate generation algorithm because it uses
the base R qlogis
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:
a binary vector of length three, where the entries from left to right correspond to
showCDF
,showPDF
, andshowECDF
, respectively. For each entry, a 1 indicates the plot should be displayed, and a 0 indicates the plot should be suppressed.an integer in [0,7] interpreted similar to the Unix chmod command. That is, the integer's binary representation can be transformed into a length-three vector discussed above (e.g., 6 corresponds to c(1,1,0)). See examples.
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 Logistic random variates
Author(s)
Barry Lawson (blawson@bates.edu),
Larry Leemis (leemis@math.wm.edu),
Vadim Kudlay (vkudlay@nvidia.com)
See Also
Examples
ilogis(0.5, location = 5, scale = 0.5)
set.seed(8675309)
ilogis(runif(10), 5, 1.5, showPDF = TRUE)
set.seed(8675309)
ilogis(runif(10), 5, 1.5, showECDF = TRUE)
set.seed(8675309)
ilogis(runif(10), 5, 1.5, showPDF = TRUE, showECDF = TRUE, sampleColor = "blue3")
set.seed(8675309)
ilogis(runif(10), 5, 1.5, showPDF = TRUE, showCDF = FALSE)
ilogis(runif(100), 5, 1.5, showPDF = TRUE, minPlotQuantile = 0.02, maxPlotQuantile = 0.98)
# plot the PDF and CDF without any variates
ilogis(NULL, 5, 1.5, showPDF = TRUE, showCDF = TRUE)
# plot CDF with inversion and PDF using show
ilogis(runif(10), 5, 1.5, show = c(1,1,0))
ilogis(runif(10), 5, 1.5, show = 6)
# plot CDF with inversion and ECDF using show, using vunif
ilogis(vunif(10), 5, 1.5, show = c(1,0,1))
ilogis(vunif(10), 5, 1.5, show = 5)
# plot CDF with inversion, PDF, and ECDF using show
ilogis(vunif(10), 5, 1.5, show = c(1,1,1))
ilogis(vunif(10), 5, 1.5, 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)
ilogis(runif(20), 5, 1.5, show = 7, respectLayout = TRUE, restorePar = FALSE)
ilogis(runif(20), 5, 1.5, show = 7, respectLayout = TRUE, restorePar = FALSE, showTitle = FALSE)
ilogis(runif(20), 5, 1.5, show = 7, respectLayout = TRUE, restorePar = TRUE, showTitle = FALSE)
par(oldpar)
# display animation of all components
ilogis(runif(10), 5, 1.5, show = 7, plotDelay = 0.1)
# display animation of CDF and PDF components only
ilogis(runif(10), 5, 1.5, show = 5, plotDelay = 0.1)
if (interactive()) {
# interactive -- pause at each stage of inversion
ilogis(runif(10), 5, 1.5, show = 7, plotDelay = -1)
}
Visualization of Random Variate Generation for the Negative Binomial Distribution
Description
Generates random variates from the Negative Binomial distribution by inversion. Optionally graphs the population cumulative distribution function and associated random variates, the population probability mass function and a histogram of the random variates, and the empirical cumulative distribution function versus the population cumulative distribution function.
Usage
inbinom(
u = runif(1),
size,
prob,
mu,
minPlotQuantile = 0,
maxPlotQuantile = 0.95,
plot = TRUE,
showCDF = TRUE,
showPMF = 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 |
size |
target for number of successful trials, or dispersion parameter (the shape parameter of the gamma mixing distribution). Must be strictly positive, need not be integer. |
prob |
Probability of success in each trial; '0 < prob <= 1' |
mu |
alternative parameterization via mean |
minPlotQuantile |
minimum quantile to plot |
maxPlotQuantile |
maximum quantile to plot |
plot |
logical; if |
showCDF |
logical; if |
showPMF |
logical; if |
showECDF |
logical; if |
show |
octal number (0-7) indicating plots to display; 4: CDF, 2: PMF, 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 |
respectLayout |
logical; if |
restorePar |
logical; if |
... |
Possible additional arguments. Currently, additional arguments not considered. |
Details
Generates random variates from the Negative Binomial distribution, and optionally, illustrates
the use of the inverse-CDF technique,
the effect of random sampling variability in relation to the PMF and CDF.
When all of the graphics are requested,
the first graph illustrates the use of the inverse-CDF technique by graphing the population CDF and the transformation of the random numbers to random variates,
the second graph illustrates the effect of random sampling variability by graphing the population PMF and the histogram associated with the random variates, and
the third graph illustrates effect of random sampling variability by graphing the population CDF and the empirical CDF associated with the random variates.
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 negative binomial distribution with size
= n
and
prob
= p
has density
\deqn{p(x) = \frac{\Gamma(x+n)}{\Gamma(n) \ x!} p^n (1-p)^x}{ p(x) = Gamma(x+n)/(Gamma(n) x!) p^n (1-p)^x}
for x = 0, 1, 2, \ldots, n > 0
and 0 < p \leq 1
. This represents the
number of failures which occur in a sequence of Bernoulli trials before a
target number of successes is reached.
The mean is \mu = n(1 - p)/p
and variance n(1 - p)/p^2
The algorithm for generating random variates from the negative binomial 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 negative binomial random variate is plotted.
This is not a particularly fast variate generation algorithm because it uses
the base R qnbinom
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 PMF and cdf are displayed according to plotting parameter
values (defaulting to display of both the PMF and cdf).
The show
parameter can be used as a shortcut way to denote plots to
display. The argument to show
can be either:
a binary vector of length three, where the entries from left to right correspond to
showCDF
,showPMF
, andshowECDF
, respectively. For each entry, a 1 indicates the plot should be displayed, and a 0 indicates the plot should be suppressed.an integer in [0,7] interpreted similar to the Unix chmod command. That is, the integer's binary representation can be transformed into a length-three vector discussed above (e.g., 6 corresponds to c(1,1,0)). See examples.
Any valid value for show
takes precedence over existing individual
values for showCDF
, showPMF
, 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 PMF, the maximum plotting height is associated with 125\ that extends above this limit will have three dots appearing above it.
Value
A vector of Negative Binomial random variates
Author(s)
Barry Lawson (blawson@bates.edu),
Larry Leemis (leemis@math.wm.edu),
Vadim Kudlay (vkudlay@nvidia.com)
See Also
Examples
inbinom(0.5, size = 10, mu = 10)
set.seed(8675309)
inbinom(runif(10), 10, 0.25, showPMF = TRUE)
set.seed(8675309)
inbinom(runif(10), 10, 0.25, showECDF = TRUE)
set.seed(8675309)
inbinom(runif(10), 10, 0.25, showPMF = TRUE, showECDF = TRUE, sampleColor = "blue3")
set.seed(8675309)
inbinom(runif(10), 10, 0.25, showPMF = TRUE, showCDF = FALSE)
inbinom(runif(100), 10, 0.25, showPMF = TRUE, minPlotQuantile = 0.02, maxPlotQuantile = 0.98)
# plot the PMF and CDF without any variates
inbinom(NULL, 10, 0.25, showPMF = TRUE, showCDF = TRUE)
# plot CDF with inversion and PMF using show
inbinom(runif(10), 10, 0.25, show = c(1,1,0))
inbinom(runif(10), 10, 0.25, show = 6)
# plot CDF with inversion and ECDF using show, using vunif
inbinom(vunif(10), 10, 0.25, show = c(1,0,1))
inbinom(vunif(10), 10, 0.25, show = 5)
# plot CDF with inversion, PMF, and ECDF using show
inbinom(vunif(10), 10, 0.25, show = c(1,1,1))
inbinom(vunif(10), 10, 0.25, show = 7)
# plot three different CDF+PMF+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)
inbinom(runif(20), 10, 0.25, show = 7, respectLayout = TRUE, restorePar = FALSE)
inbinom(runif(20), 10, 0.25, show = 7, respectLayout = TRUE, restorePar = FALSE, showTitle = FALSE)
inbinom(runif(20), 10, 0.25, show = 7, respectLayout = TRUE, restorePar = TRUE, showTitle = FALSE)
par(oldpar)
# display animation of all components
inbinom(runif(10), 10, 0.25, show = 7, plotDelay = 0.1)
# display animation of CDF and PMF components only
inbinom(runif(10), 10, 0.25, show = 5, plotDelay = 0.1)
if (interactive()) {
# interactive -- pause at each stage of inversion
inbinom(runif(10), 10, 0.25, show = 7, plotDelay = -1)
}
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 |
showCDF |
logical; if |
showPDF |
logical; if |
showECDF |
logical; if |
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 |
respectLayout |
logical; if |
restorePar |
logical; if |
... |
Possible additional arguments. Currently, additional arguments not considered. |
Details
Generates random variates from the Normal distribution, and optionally, illustrates
the use of the inverse-CDF technique,
the effect of random sampling variability in relation to the PDF and CDF.
When all of the graphics are requested,
the first graph illustrates the use of the inverse-CDF technique by graphing the population CDF and the transformation of the random numbers to random variates,
the second graph illustrates the effect of random sampling variability by graphing the population PDF and the histogram associated with the random variates, and
the third graph illustrates effect of random sampling variability by graphing the population CDF and the empirical CDF associated with the random variates.
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:
a binary vector of length three, where the entries from left to right correspond to
showCDF
,showPDF
, andshowECDF
, respectively. For each entry, a 1 indicates the plot should be displayed, and a 0 indicates the plot should be suppressed.an integer in [0,7] interpreted similar to the Unix chmod command. That is, the integer's binary representation can be transformed into a length-three vector discussed above (e.g., 6 corresponds to c(1,1,0)). See examples.
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
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
Visualization of Random Variate Generation for the Poisson Distribution
Description
Generates random variates from the Poisson distribution by inversion. Optionally graphs the population cumulative distribution function and associated random variates, the population probability mass function and a histogram of the random variates, and the empirical cumulative distribution function versus the population cumulative distribution function.
Usage
ipois(
u = runif(1),
lambda,
minPlotQuantile = 0,
maxPlotQuantile = 0.95,
plot = TRUE,
showCDF = TRUE,
showPMF = 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 |
lambda |
Rate of distribution |
minPlotQuantile |
minimum quantile to plot |
maxPlotQuantile |
maximum quantile to plot |
plot |
logical; if |
showCDF |
logical; if |
showPMF |
logical; if |
showECDF |
logical; if |
show |
octal number (0-7) indicating plots to display; 4: CDF, 2: PMF, 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 |
respectLayout |
logical; if |
restorePar |
logical; if |
... |
Possible additional arguments. Currently, additional arguments not considered. |
Details
Generates random variates from the Poisson distribution, and optionally, illustrates
the use of the inverse-CDF technique,
the effect of random sampling variability in relation to the PMF and CDF.
When all of the graphics are requested,
the first graph illustrates the use of the inverse-CDF technique by graphing the population CDF and the transformation of the random numbers to random variates,
the second graph illustrates the effect of random sampling variability by graphing the population PMF and the histogram associated with the random variates, and
the third graph illustrates effect of random sampling variability by graphing the population CDF and the empirical CDF associated with the random variates.
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 Poisson distribution has density
p(x) = \frac{\lambda^x e^{-\lambda}}{x!}
for x = 0, 1, 2, \ldots
.
The mean and variance are E(X) = Var(X) = \lambda
The algorithm for generating random variates from the Poisson 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 Poisson random variate is plotted.
This is not a particularly fast variate generation algorithm because it uses
the base R qpois
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 PMF and cdf are displayed according to plotting parameter
values (defaulting to display of both the PMF and cdf).
The show
parameter can be used as a shortcut way to denote plots to
display. The argument to show
can be either:
a binary vector of length three, where the entries from left to right correspond to
showCDF
,showPMF
, andshowECDF
, respectively. For each entry, a 1 indicates the plot should be displayed, and a 0 indicates the plot should be suppressed.an integer in [0,7] interpreted similar to the Unix chmod command. That is, the integer's binary representation can be transformed into a length-three vector discussed above (e.g., 6 corresponds to c(1,1,0)). See examples.
Any valid value for show
takes precedence over existing individual
values for showCDF
, showPMF
, 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 PMF, the maximum plotting height is associated with 125\ that extends above this limit will have three dots appearing above it.
Value
A vector of Poisson random variates
Author(s)
Barry Lawson (blawson@bates.edu),
Larry Leemis (leemis@math.wm.edu),
Vadim Kudlay (vkudlay@nvidia.com)
See Also
Examples
ipois(0.5, lambda = 5)
set.seed(8675309)
ipois(runif(10), 3, showPMF = TRUE)
set.seed(8675309)
ipois(runif(10), 3, showECDF = TRUE)
set.seed(8675309)
ipois(runif(10), 3, showPMF = TRUE, showECDF = TRUE, sampleColor = "blue3")
set.seed(8675309)
ipois(runif(10), 3, showPMF = TRUE, showCDF = FALSE)
ipois(runif(100), 3, showPMF = TRUE, minPlotQuantile = 0.02, maxPlotQuantile = 0.98)
# plot the PMF and CDF without any variates
ipois(NULL, 3, showPMF = TRUE, showCDF = TRUE)
# plot CDF with inversion and PMF using show
ipois(runif(10), 3, show = c(1,1,0))
ipois(runif(10), 3, show = 6)
# plot CDF with inversion and ECDF using show, using vunif
ipois(vunif(10), 3, show = c(1,0,1))
ipois(vunif(10), 3, show = 5)
# plot CDF with inversion, PMF, and ECDF using show
ipois(vunif(10), 3, show = c(1,1,1))
ipois(vunif(10), 3, show = 7)
# plot three different CDF+PMF+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)
ipois(runif(20), 3, show = 7, respectLayout = TRUE, restorePar = FALSE)
ipois(runif(20), 3, show = 7, respectLayout = TRUE, restorePar = FALSE, showTitle = FALSE)
ipois(runif(20), 3, show = 7, respectLayout = TRUE, restorePar = TRUE, showTitle = FALSE)
par(oldpar)
# display animation of all components
ipois(runif(10), 3, show = 7, plotDelay = 0.1)
# display animation of CDF and PMF components only
ipois(runif(10), 3, show = 5, plotDelay = 0.1)
if (interactive()) {
# interactive -- pause at each stage of inversion
ipois(runif(10), 3, show = 7, plotDelay = -1)
}
Visualization of Random Variate Generation for the Student T Distribution
Description
Generates random variates from the Student T 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
it(
u = runif(1),
df,
ncp,
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 |
df |
Degrees of freedom > 0 |
ncp |
Non-centrality parameter delta (default NULL) |
minPlotQuantile |
minimum quantile to plot |
maxPlotQuantile |
maximum quantile to plot |
plot |
logical; if |
showCDF |
logical; if |
showPDF |
logical; if |
showECDF |
logical; if |
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 |
respectLayout |
logical; if |
restorePar |
logical; if |
... |
Possible additional arguments. Currently, additional arguments not considered. |
Details
Generates random variates from the Student T distribution, and optionally, illustrates
the use of the inverse-CDF technique,
the effect of random sampling variability in relation to the PDF and CDF.
When all of the graphics are requested,
the first graph illustrates the use of the inverse-CDF technique by graphing the population CDF and the transformation of the random numbers to random variates,
the second graph illustrates the effect of random sampling variability by graphing the population PDF and the histogram associated with the random variates, and
the third graph illustrates effect of random sampling variability by graphing the population CDF and the empirical CDF associated with the random variates.
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 t-distribution with df
= v
degrees of freedom has density
f(x) = \frac{\Gamma((v+1)/2)}{\sqrt{v\pi} \
\Gamma(v/2)} \ (1 + x^2/v)^{-(v+1)/2}
for all real x
. It has mean 0 (for v > 1
) and variance
v/(v-2)
(for v > 2
).
The general non-central t with parameters (\nu, \delta)
=
(df, ncp)
is defined as the distribution of
T_{\nu}(\delta) := (U + \delta) \ / \ \sqrt{(V/\nu)}
where U
and V
are
independent random variables, U \sim \mathcal{N}(0,1)
and V \sim \chi^2(\nu)
.
The algorithm for generating random variates from the Student t 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 Student t random variate is plotted.
This is not a particularly fast variate generation algorithm because it uses
the base R qt
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:
a binary vector of length three, where the entries from left to right correspond to
showCDF
,showPDF
, andshowECDF
, respectively. For each entry, a 1 indicates the plot should be displayed, and a 0 indicates the plot should be suppressed.an integer in [0,7] interpreted similar to the Unix chmod command. That is, the integer's binary representation can be transformed into a length-three vector discussed above (e.g., 6 corresponds to c(1,1,0)). See examples.
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 Student T random variates
Author(s)
Barry Lawson (blawson@bates.edu),
Larry Leemis (leemis@math.wm.edu),
Vadim Kudlay (vkudlay@nvidia.com)
See Also
Examples
it(0.5, df = 5, ncp = 10)
set.seed(8675309)
it(runif(10), 4, showPDF = TRUE)
set.seed(8675309)
it(runif(10), 4, showECDF = TRUE)
set.seed(8675309)
it(runif(10), 4, showPDF = TRUE, showECDF = TRUE, sampleColor = "blue3")
set.seed(8675309)
it(runif(10), 4, showPDF = TRUE, showCDF = FALSE)
it(runif(100), 4, showPDF = TRUE, minPlotQuantile = 0.02, maxPlotQuantile = 0.98)
# plot the PDF and CDF without any variates
it(NULL, 4, showPDF = TRUE, showCDF = TRUE)
# plot CDF with inversion and PDF using show
it(runif(10), 4, show = c(1,1,0))
it(runif(10), 4, show = 6)
# plot CDF with inversion and ECDF using show, using vunif
it(vunif(10), 4, show = c(1,0,1))
it(vunif(10), 4, show = 5)
# plot CDF with inversion, PDF, and ECDF using show
it(vunif(10), 4, show = c(1,1,1))
it(vunif(10), 4, 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)
it(runif(20), 4, show = 7, respectLayout = TRUE, restorePar = FALSE)
it(runif(20), 4, show = 7, respectLayout = TRUE, restorePar = FALSE, showTitle = FALSE)
it(runif(20), 4, show = 7, respectLayout = TRUE, restorePar = TRUE, showTitle = FALSE)
par(oldpar)
# display animation of all components
it(runif(10), 4, show = 7, plotDelay = 0.1)
# display animation of CDF and PDF components only
it(runif(10), 4, show = 5, plotDelay = 0.1)
if (interactive()) {
# interactive -- pause at each stage of inversion
it(runif(10), 4, show = 7, plotDelay = -1)
}
Visualization of Random Variate Generation for the Uniform Distribution
Description
Generates random variates from the Uniform 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
iunif(
u = runif(1),
min = 0,
max = 1,
minPlotQuantile = 0,
maxPlotQuantile = 1,
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 |
min |
lower limit of distribution (default 0) |
max |
upper limit of distribution (default 1) |
minPlotQuantile |
minimum quantile to plot |
maxPlotQuantile |
maximum quantile to plot |
plot |
logical; if |
showCDF |
logical; if |
showPDF |
logical; if |
showECDF |
logical; if |
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 |
respectLayout |
logical; if |
restorePar |
logical; if |
... |
Possible additional arguments. Currently, additional arguments not considered. |
Details
Generates random variates from the Uniform distribution, and optionally, illustrates
the use of the inverse-CDF technique,
the effect of random sampling variability in relation to the PDF and CDF.
When all of the graphics are requested,
the first graph illustrates the use of the inverse-CDF technique by graphing the population CDF and the transformation of the random numbers to random variates,
the second graph illustrates the effect of random sampling variability by graphing the population PDF and the histogram associated with the random variates, and
the third graph illustrates effect of random sampling variability by graphing the population CDF and the empirical CDF associated with the random variates.
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 uniform distribution has density
\deqn{f(x) = \frac{1}{max-min}}{ f(x) = 1/(max-min)}
for min \le x \le max
.
The algorithm for generating random variates from the uniform 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 uniform random variate is plotted.
This is not a particularly fast variate generation algorithm because it uses
the base R qunif
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:
a binary vector of length three, where the entries from left to right correspond to
showCDF
,showPDF
, andshowECDF
, respectively. For each entry, a 1 indicates the plot should be displayed, and a 0 indicates the plot should be suppressed.an integer in [0,7] interpreted similar to the Unix chmod command. That is, the integer's binary representation can be transformed into a length-three vector discussed above (e.g., 6 corresponds to c(1,1,0)). See examples.
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 Uniform random variates
Author(s)
Barry Lawson (blawson@bates.edu),
Larry Leemis (leemis@math.wm.edu),
Vadim Kudlay (vkudlay@nvidia.com)
See Also
Examples
iunif(0.5, min = -10, max = 10)
set.seed(8675309)
iunif(runif(10), 0, 10, showPDF = TRUE)
set.seed(8675309)
iunif(runif(10), 0, 10, showECDF = TRUE)
set.seed(8675309)
iunif(runif(10), 0, 10, showPDF = TRUE, showECDF = TRUE, sampleColor = "blue3")
set.seed(8675309)
iunif(runif(10), 0, 10, showPDF = TRUE, showCDF = FALSE)
iunif(runif(100), 0, 10, showPDF = TRUE, minPlotQuantile = 0.02, maxPlotQuantile = 0.98)
# plot the PDF and CDF without any variates
iunif(NULL, 0, 10, showPDF = TRUE, showCDF = TRUE)
# plot CDF with inversion and PDF using show
iunif(runif(10), 0, 10, show = c(1,1,0))
iunif(runif(10), 0, 10, show = 6)
# plot CDF with inversion and ECDF using show, using vunif
iunif(vunif(10), 0, 10, show = c(1,0,1))
iunif(vunif(10), 0, 10, show = 5)
# plot CDF with inversion, PDF, and ECDF using show
iunif(vunif(10), 0, 10, show = c(1,1,1))
iunif(vunif(10), 0, 10, 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)
iunif(runif(20), 0, 10, show = 7, respectLayout = TRUE, restorePar = FALSE)
iunif(runif(20), 0, 10, show = 7, respectLayout = TRUE, restorePar = FALSE, showTitle = FALSE)
iunif(runif(20), 0, 10, show = 7, respectLayout = TRUE, restorePar = TRUE, showTitle = FALSE)
par(oldpar)
# display animation of all components
iunif(runif(10), 0, 10, show = 7, plotDelay = 0.1)
# display animation of CDF and PDF components only
iunif(runif(10), 0, 10, show = 5, plotDelay = 0.1)
if (interactive()) {
# interactive -- pause at each stage of inversion
iunif(runif(10), 0, 10, show = 7, plotDelay = -1)
}
# overlay visual exploration of ks.test results
oldpar <- par(no.readonly = TRUE)
set.seed(54321)
vals <- iunif(runif(10), 0, 10, showECDF = TRUE, restorePar = FALSE)
D <- as.numeric(ks.test(vals, "punif", 0, 10)$statistic)
for (x in seq(4.0, 6.0, by = 0.1)) {
y <- punif(x, 0, 10)
segments(x, y, x, y + D, col = "darkgreen", lwd = 2, xpd = NA)
}
par(oldpar) # restore original par values, since restorePar = FALSE above
Visualization of Random Variate Generation for the Weibull Distribution
Description
Generates random variates from the Weibull 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
iweibull(
u = runif(1),
shape,
scale = 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 |
shape |
Shape parameter |
scale |
Scale parameter (default 1) |
minPlotQuantile |
minimum quantile to plot |
maxPlotQuantile |
maximum quantile to plot |
plot |
logical; if |
showCDF |
logical; if |
showPDF |
logical; if |
showECDF |
logical; if |
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 |
respectLayout |
logical; if |
restorePar |
logical; if |
... |
Possible additional arguments. Currently, additional arguments not considered. |
Details
Generates random variates from the Weibull distribution, and optionally, illustrates
the use of the inverse-CDF technique,
the effect of random sampling variability in relation to the PDF and CDF.
When all of the graphics are requested,
the first graph illustrates the use of the inverse-CDF technique by graphing the population CDF and the transformation of the random numbers to random variates,
the second graph illustrates the effect of random sampling variability by graphing the population PDF and the histogram associated with the random variates, and
the third graph illustrates effect of random sampling variability by graphing the population CDF and the empirical CDF associated with the random variates.
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 Weibull distribution with parameters shape
= a
and
scale
= b
has density
\deqn{f(x) = \frac{a}{b} \left(\frac{x}{b}\right)^{a-1} e^{-(x/b)^a}}{ f(x) = (a/b) (x/b)^(a-1) exp(-(x/b)^a)}
for x \ge 0
, a > 0
, and b > 0
.
The algorithm for generating random variates from the Weibull 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 Weibull random variate is plotted.
This is not a particularly fast variate generation algorithm because it uses
the base R qweibull
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:
a binary vector of length three, where the entries from left to right correspond to
showCDF
,showPDF
, andshowECDF
, respectively. For each entry, a 1 indicates the plot should be displayed, and a 0 indicates the plot should be suppressed.an integer in [0,7] interpreted similar to the Unix chmod command. That is, the integer's binary representation can be transformed into a length-three vector discussed above (e.g., 6 corresponds to c(1,1,0)). See examples.
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 Weibull random variates
Author(s)
Barry Lawson (blawson@bates.edu),
Larry Leemis (leemis@math.wm.edu),
Vadim Kudlay (vkudlay@nvidia.com)
See Also
Examples
iweibull(0.5, shape = 2, scale = 0.5)
set.seed(8675309)
iweibull(runif(10), 1, 2, showPDF = TRUE)
set.seed(8675309)
iweibull(runif(10), 1, 2, showECDF = TRUE)
set.seed(8675309)
iweibull(runif(10), 1, 2, showPDF = TRUE, showECDF = TRUE, sampleColor = "blue3")
set.seed(8675309)
iweibull(runif(10), 1, 2, showPDF = TRUE, showCDF = FALSE)
iweibull(runif(100), 1, 2, showPDF = TRUE, minPlotQuantile = 0.02, maxPlotQuantile = 0.98)
# plot the PDF and CDF without any variates
iweibull(NULL, 1, 2, showPDF = TRUE, showCDF = TRUE)
# plot CDF with inversion and PDF using show
iweibull(runif(10), 1, 2, show = c(1,1,0))
iweibull(runif(10), 1, 2, show = 6)
# plot CDF with inversion and ECDF using show, using vunif
iweibull(vunif(10), 1, 2, show = c(1,0,1))
iweibull(vunif(10), 1, 2, show = 5)
# plot CDF with inversion, PDF, and ECDF using show
iweibull(vunif(10), 1, 2, show = c(1,1,1))
iweibull(vunif(10), 1, 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)
iweibull(runif(20), 1, 2, show = 7, respectLayout = TRUE, restorePar = FALSE)
iweibull(runif(20), 1, 2, show = 7, respectLayout = TRUE, restorePar = FALSE, showTitle = FALSE)
iweibull(runif(20), 1, 2, show = 7, respectLayout = TRUE, restorePar = TRUE, showTitle = FALSE)
par(oldpar)
# display animation of all components
iweibull(runif(10), 1, 2, show = 7, plotDelay = 0.1)
# display animation of CDF and PDF components only
iweibull(runif(10), 1, 2, show = 5, plotDelay = 0.1)
if (interactive()) {
# interactive -- pause at each stage of inversion
iweibull(runif(10), 1, 2, show = 7, plotDelay = -1)
}
Lehmer Generator Visualization
Description
This function animates the processes of a basic Lehmer pseudo-random number generator (PRNG). Also known in the literature as a multiplicative linear congruential generator (MLCG), the generator is based on the formula:
X_{k+1} \equiv a \cdot X_k \pmod{m}
where 'm' is the prime modulus, 'a' is the multiplier chosen from {1, m-1}, and 'X_0' is the initial seed chosen from {1, m-1}. The random numbers generated in (0,1) are X_{k+1}/m.
Usage
lehmer(
a = 13,
m = 31,
seed = 1,
animate = TRUE,
numSteps = NA,
title = NA,
showTitle = TRUE,
plotDelay = -1
)
Arguments
a |
multiplier in MLCG equation. |
m |
prime modulus in MLCG equation. |
seed |
initial seed for the generator, i.e., the initial value X_0 |
animate |
should the visual output be displayed. |
numSteps |
number of steps to animate; default value is Inf if
|
title |
optional title to display in plot (NA uses default title) |
showTitle |
if TRUE, display title in the main plot. |
plotDelay |
wait time between transitioning; -1 (default) for interactive mode, where the user is queried for input to progress. |
Value
the entire period from the PRNG cycle, as a vector of integers in {1, m-1}.
References
Lehmer, D.H. (1951). Mathematical Models in Large-Scale Computing Units. Ann. Comput. Lab. Harvard University, 26, 141-146.
Examples
# Default case (m, a = 31, 13); small full period
lehmer(plotDelay = 0, numSteps = 16)
lehmer(numSteps = 10, plotDelay = 0.1) # auto-advance mode
if (interactive()) {
lehmer(plotDelay = -1) # plotDelay -1 uses interactive mode
}
# multiplier producing period of length 5, with different seeds
lehmer(a = 8, m = 31, seed = 1, numSteps = 5, plotDelay = 0.1)
lehmer(a = 8, m = 31, seed = 24, numSteps = 5, plotDelay = 0.1)
# degenerate cases where seed does not appear in the final period
lehmer(a = 12, m = 20, seed = 7, numSteps = 4, plotDelay = 0.1) # length 4
lehmer(a = 4, m = 6, seed = 1, numSteps = 1, plotDelay = 0.1) # length 1
Mean of Time-Persistent Statistics (TPS)
Description
Computes the sample mean of a time-persistent function.
Usage
meanTPS(times = NULL, numbers = NULL)
Arguments
times |
A numeric vector of non-decreasing time observations |
numbers |
A numeric vector containing the values of the time-persistent statistic between the time observation |
Details
The lengths of times
and numbers
either must be the
same, or times
may have one more entry than numbers
(interval endpoints vs. interval counts). The sample mean is the area
under the step-function created by the values in numbers
between
the first and last element in times
divided by the length of the
observation period.
Value
the sample mean of the time-persistent function provided
Author(s)
Barry Lawson (blawson@bates.edu),
Larry Leemis (leemis@math.wm.edu),
Vadim Kudlay (vkudlay@nvidia.com)
Examples
times <- c(1,2,3,4,5)
counts <- c(1,2,1,1,2)
meanTPS(times, counts)
output <- ssq(seed = 54321, maxTime = 100, saveServerStatus = TRUE)
utilization <- meanTPS(output$serverStatusT, output$serverStatusN)
# compute and graphically display mean of number in system vs time
output <- ssq(maxArrivals = 60, seed = 54321, saveAllStats = TRUE)
plot(output$numInSystemT, output$numInSystemN, type = "s", bty = "l",
las = 1, xlab = "time", ylab = "number in system")
timeAvgNumInSysMean <- meanTPS(output$numInSystemT, output$numInSystemN)
abline(h = timeAvgNumInSysMean, lty = "solid", col = "red", lwd = 2)
Multi-Server Queue Simulation
Description
A next-event simulation of a single-queue multiple-server service node, with extensible arrival and service processes.
Usage
msq(
maxArrivals = Inf,
seed = NA,
numServers = 2,
serverSelection = c("LRU", "LFU", "CYC", "RAN", "ORD"),
interarrivalFcn = NULL,
serviceFcn = NULL,
interarrivalType = "M",
serviceType = "M",
maxTime = Inf,
maxDepartures = Inf,
maxInSystem = Inf,
maxEventsPerSkyline = 15,
saveAllStats = FALSE,
saveInterarrivalTimes = FALSE,
saveServiceTimes = FALSE,
saveWaitTimes = FALSE,
saveSojournTimes = FALSE,
saveNumInQueue = FALSE,
saveNumInSystem = FALSE,
saveServerStatus = FALSE,
showOutput = TRUE,
animate = FALSE,
showQueue = NULL,
showSkyline = NULL,
showSkylineSystem = FALSE,
showSkylineQueue = FALSE,
showSkylineServer = FALSE,
showTitle = TRUE,
showProgress = TRUE,
plotQueueFcn = defaultPlotMSQ,
plotSkylineFcn = defaultPlotSkyline,
jobImage = NA,
plotDelay = NA,
respectLayout = FALSE
)
Arguments
maxArrivals |
maximum number of customer arrivals allowed to enter the system |
seed |
initial seed to the random number generator (NA uses current state of random number generator; NULL seeds using system clock) |
numServers |
Number of servers to simulation (an integer between 1 and 24) |
serverSelection |
Algorithm to use for selecting among idle servers (default is "LRU") |
interarrivalFcn |
Function for generating interarrival times for queue simulation.
Default value ( |
serviceFcn |
Function for generating service times for queue simulation.
Default value ( |
interarrivalType |
string representation of desired interarrival process. Options are "M" – exponential with rate 1; "G" – uniform(0,2), having mean 1; and "D" – deterministic with constant value 1. Default is "M". |
serviceType |
string representation of desired service process . Options are "M" – exponential with rate 10/9; "G" – uniform(0, 1.8), having mean 9/10; and "D" – deterministic with constant value 9/10. Default is "M". |
maxTime |
maximum time to simulate |
maxDepartures |
maximum number of customer departures to process |
maxInSystem |
maximum number of customers that the system can hold (server(s) plus queue). Infinite by default. |
maxEventsPerSkyline |
maximum number of events viewable at a time in the skyline plot. A large value for this parameter may result in plotting delays. This parameter does not impact the final plotting, which will show all end-of-simulation results. |
saveAllStats |
if |
saveInterarrivalTimes |
if |
saveServiceTimes |
if |
saveWaitTimes |
if |
saveSojournTimes |
if |
saveNumInQueue |
if |
saveNumInSystem |
if |
saveServerStatus |
if |
showOutput |
if |
animate |
If FALSE, no animation will be shown. |
showQueue |
if TRUE, displays a visualization of the queue |
showSkyline |
If |
showSkylineSystem |
logical; if |
showSkylineQueue |
logical; if |
showSkylineServer |
logical; if |
showTitle |
if |
showProgress |
if TRUE, displays a progress bar on screen during no-animation execution |
plotQueueFcn |
Plotting function to display Queue visualization.
By default, this is provided by |
plotSkylineFcn |
Plotting function to display Skyline visualization.
By default, this is provided by |
jobImage |
a vector of URLs/local addresses of images to use as jobs. Requires
package |
plotDelay |
a positive numeric value indicating seconds between plots. A value of -1 enters 'interactive' mode, where the state will pause for user input at each step. A value of 0 will display only the final end-of-simulation plot. |
respectLayout |
If TRUE, plot layout (i.e., par, device, etc.) settings will be respected. Not recommended except for specialized use. |
Details
Implements a next-event implementation of a single-queue multiple-server queue simulation.
The seed
parameter can take one of three valid
argument types:
-
NA
(default), which will use the current state of the random number generator without explicitly setting a new seed (see examples); a positive integer, which will be used as the initial seed passed in an explicit call to
set.seed
; or-
NULL
, which will be passed in an explicit call to toset.seed
, thereby setting the initial seed using the system clock.
The server selection mechanism can be chosen from among five options, with
"LRU"
being the default:
-
"LRU"
(least recently used): from among the currently available (idle) servers, selects the server who has been idle longest. -
"LFU"
(least frequently used): from among the currently available servers, selects the server having the lowest computed utilization. -
"CYC"
(cyclic): selects a server in a cyclic manner; i.e, indexing the servers 1, 2,\ldots
,numServers
and incrementing cyclically, starts from one greater than the index of the most recently engaged server and selects the first idle server encountered. -
"RAN"
(random): selects a server at random from among the currently available servers. -
"ORD"
(in order): indexing the servers 1, 2,\ldots
,numServers
, selects the idle server having the lowest index.
Value
The function returns a list containing:
the number of arrivals to the system (
customerArrivals
),the number of customers processed (
customerDepartures
),the ending time of the simulation (
simulationEndTime
),average wait time in the queue (
avgWait
),average time in the system (
avgSojourn
),average number in the system (
avgNumInSystem
),average number in the queue (
avgNumInQueue
), andserver utilization (
utilization
).
of the queue as computed by the simulation. When requested via the “save...” parameters, the list may also contain:
a vector of interarrival times (
interarrivalTimes
),a vector of wait times (
waitTimes
),a vector of service times (
serviceTimes
),a vector of sojourn times (
sojournTimes
),two vectors (time and count) noting changes to number in the system (
numInSystemT
,numInSystemN
),two vectors (time and count) noting changes to number in the queue (
numInQueueT
,numInQueueN
), andtwo vectors (time and status) noting changes to server status (
serverStatusT
,serverStatusN
).
Author(s)
Barry Lawson (blawson@bates.edu),
Larry Leemis (leemis@math.wm.edu),
Vadim Kudlay (vkudlay@nvidia.com)
See Also
rstream
, set.seed
,
stats::runif
Examples
# process 100 arrivals, R-provided seed (via NULL seed), default 2 servers
msq(100, NULL)
# process 100 arrivals, seed 8675309, 3 servers, LFU server selection
msq(100, 8675309, 3, 'LFU')
msq(maxArrivals = 100, seed = 8675309)
msq(maxTime = 100, seed = 8675309)
############################################################################
# example to show use of seed = NA (default) to rely on current state of generator
output1 <- msq(200, 8675309, showOutput = FALSE, saveAllStats = TRUE)
output2 <- msq(300, showOutput = FALSE, saveAllStats = TRUE)
set.seed(8675309)
output3 <- msq(200, showOutput = FALSE, saveAllStats = TRUE)
output4 <- msq(300, showOutput = FALSE, saveAllStats = TRUE)
sum(output1$sojournTimes != output3$sojournTimes) # should be zero
sum(output2$sojournTimes != output4$sojournTimes) # should be zero
############################################################################
# use same service function for (default) two servers
myArrFcn <- function() { vexp(1, rate = 1/4, stream = 1) } # mean is 4
mySvcFcn <- function() { vgamma(1, shape = 1, rate = 0.3, stream = 2) } # mean is 3.3
output <- msq(maxArrivals = 100, interarrivalFcn = myArrFcn,
serviceFcn = mySvcFcn, saveAllStats = TRUE)
mean(output$interarrivalTimes)
mean(output$serviceTimes)
############################################################################
# use different service function for (default) two servers
myArrFcn <- function() { vexp(1, rate = 1/4, stream = 1) } # mean is 4
mySvcFcn1 <- function() { vgamma(1, shape = 3, scale = 1.1, stream = 2) } # mean is 3.3
mySvcFcn2 <- function() { vgamma(1, shape = 3, scale = 1.2, stream = 3) } # mean is 3.6
output <- msq(maxArrivals = 100, interarrivalFcn = myArrFcn,
serviceFcn = list(mySvcFcn1, mySvcFcn2), saveAllStats = TRUE)
mean(output$interarrivalTimes)
meanTPS(output$numInQueueT, output$numInQueueN) # compute time-averaged num in queue
mean(output$serviceTimesPerServer[[1]]) # compute avg service time for server 1
mean(output$serviceTimesPerServer[[2]]) # compute avg service time for server 2
meanTPS(output$serverStatusT[[1]], output$serverStatusN[[1]]) # compute server 1 utilization
meanTPS(output$serverStatusT[[2]], output$serverStatusN[[2]]) # compute server 2 utilization
############################################################################
# example to show use of (simple) trace data for arrivals and service times,
# allowing for reuse of trace data times
smallQueueTrace <- list()
smallQueueTrace$arrivalTimes <- c(15, 47, 71, 111, 123, 152, 166, 226, 310, 320)
smallQueueTrace$serviceTimes <- c(43, 36, 34, 30, 38, 40, 31, 29, 36, 30)
interarrivalTimes <- NULL
serviceTimes <- NULL
getInterarr <- function()
{
if (length(interarrivalTimes) == 0) {
interarrivalTimes <<- c(smallQueueTrace$arrivalTimes[1],
diff(smallQueueTrace$arrivalTimes))
}
nextInterarr <- interarrivalTimes[1]
interarrivalTimes <<- interarrivalTimes[-1] # remove 1st element globally
return(nextInterarr)
}
getService <- function()
{
if (length(serviceTimes) == 0) {
serviceTimes <<- smallQueueTrace$serviceTimes
}
nextService <- serviceTimes[1]
serviceTimes <<- serviceTimes[-1] # remove 1st element globally
return(nextService)
}
output <- msq(maxArrivals = 100, numServers = 2, interarrivalFcn = getInterarr,
serviceFcn = getService, saveAllStats = TRUE)
mean(output$interarrivalTimes)
mean(output$serviceTimes)
mean(output$serviceTimesPerServer[[1]]) # compute avg service time for server 1
mean(output$serviceTimesPerServer[[2]]) # compute avg service time for server 2
############################################################################
# Testing with visualization
# Visualizing msq with a set seed, infinite queue capacity, 10 arrivals,
# and showing queue (default) and skyline for all 3 attributes
msq(seed = 1234, numServers = 5, maxArrivals = 10, showSkyline = 7,
plotDelay = 0.1)
# Same simulation as above but using default interactive mode
if (interactive()) {
msq(seed = 1234, numServers = 5, maxArrivals = 10, showSkyline = 7)
}
# Visualizing msq with a set seed, finite queue capacity, 20 arrivals,
# and showing queue (default) and skyline for all 3 attributes
msq(seed = 1234, numServers = 5, maxArrivals = 25, showSkyline = 7,
maxInSystem = 5, plotDelay = 0)
# Using default distributions to simulate an M/G/2 queue
msq(seed = 1234, maxDepartures = 10,
interarrivalType = "M", serviceType = "G", plotDelay = 0)
Sample Quantiles of Time-Persistent Statistics (TPS)
Description
Computes the sample quantiles of a time-persistent function, corresponding to the given probabilities.
Usage
quantileTPS(times = NULL, numbers = NULL, probs = c(0, 0.25, 0.5, 0.75, 1))
Arguments
times |
A numeric vector of non-decreasing time observations |
numbers |
A numeric vector containing the values of the time-persistent statistic between the time observation |
probs |
A numeric vector of probabilities with values in [0,1] |
Details
The lengths of \code{times} and \code{numbers} either must be the same, or \code{times} may have one more entry than \code{numbers} (interval endpoints vs. interval counts). The sample quantiles are calculated by determining the length of time spent in each state, sorting these times, then calculating the quantiles associated with the values in the \code{prob} vector in the same fashion as one would calculate quantiles associated with a univariate discrete probability distribution.
Value
a vector of the sample quantiles of the time-persistent function provided
Author(s)
Barry Lawson (blawson@bates.edu),
Larry Leemis (leemis@math.wm.edu),
Vadim Kudlay (vkudlay@nvidia.com)
Examples
times <- c(1,2,3,4,5)
counts <- c(1,2,1,1,2)
meanTPS(times, counts)
sdTPS(times, counts)
quantileTPS(times, counts)
output <- ssq(seed = 54321, maxTime = 100, saveNumInSystem = TRUE)
utilization <- meanTPS(output$numInSystemT, output$numInSystemN)
sdServerStatus <- sdTPS(output$numInSystemT, output$numInSystemN)
quantileServerStatus <- quantileTPS(output$numInSystemT, output$numInSystemN)
# compute and graphically display quantiles of number in system vs time
output <- ssq(maxArrivals = 60, seed = 54321, saveAllStats = TRUE)
quantileSys <- quantileTPS(output$numInSystemT, output$numInSystemN)
plot(output$numInSystemT, output$numInSystemN, type = "s", bty = "l",
las = 1, xlab = "time", ylab = "number in system")
labels <- c("0%", "25%", "50%", "75%", "100%")
mtext(text = labels, side = 4, at = quantileSys, las = 1, col = "red")
abline(h = quantileSys, lty = "dashed", col = "red", lwd = 2)
Trace Data for Single-Server Queue Simulation
Description
This data set contains the arrival and service times for 1000 jobs arriving to a generic single-server queue.
Usage
queueTrace
Format
A list of two vectors, arrivalTimes
and serviceTimes
.
Details
This trace data could be used as input for the ssq function, but not directly. That is, ssq expects interarrival and service functions as input, not vectors of arrival times and service times. Accordingly, the user will need to write functions to extract the interarrival and service times from this trace, which can then be passed to ssq. See examples below.
Source
Discrete-Event Simulation: A First Course (2006). L.M. Leemis and S.K. Park. Pearson/Prentice Hall, Upper Saddle River, NJ. ISBN-13: 978-0131429178
Examples
interarrivalTimes <- c(queueTrace$arrivalTimes[1], diff(queueTrace$arrivalTimes))
serviceTimes <- queueTrace$serviceTimes
avgInterarrivalTime <- mean(interarrivalTimes)
avgServiceTime <- mean(serviceTimes)
# functions to use this trace data for the ssq() function;
# note that the functions below destroy the global values of the copied
# interarrivalTimes and serviceTimes vectors along the way...
#
interarrivalTimes <- NULL
serviceTimes <- NULL
getInterarr <- function(...)
{
if (length(interarrivalTimes) == 0) {
interarrivalTimes <- c(queueTrace$arrivalTimes[1],
diff(queueTrace$arrivalTimes))
}
nextInterarr <- interarrivalTimes[1]
interarrivalTimes <- interarrivalTimes[-1]
return(nextInterarr)
}
getService <- function(...)
{
if (length(serviceTimes) == 0) {
serviceTimes <- queueTrace$serviceTimes
}
nextService <- serviceTimes[1]
serviceTimes <- serviceTimes[-1]
return(nextService)
}
ssq(maxArrivals = 1000, interarrivalFcn = getInterarr, serviceFcn = getService)
Random Samples
Description
sample
takes a sample of the specified size from the
elements of x
, either with or without replacement, and with
capability to use independent streams and antithetic variates in the draws.
Usage
sample(
x,
size,
replace = FALSE,
prob = NULL,
stream = NULL,
antithetic = FALSE
)
Arguments
x |
Either a vector of one or more elements from which to choose, or a positive integer |
size |
A non-negative integer giving the number of items to choose |
replace |
If |
prob |
A vector of probability weights for obtaining the elements of the vector being sampled |
stream |
If |
antithetic |
If |
Details
If stream
is NULL
, sampling is done by direct call to
base::sample
(refer to its documentation for details).
In this case, a value of TRUE
for antithetic
is ignored.
The remainder of details below presume that stream
has a positive
integer value, corresponding to use of the vunif
variate
generator for generating the random sample.
If x
has length 1 and is numeric, sampling takes place from 1:x
only if x
is a positive integer; otherwise, sampling takes place using
the single value of x
provided (either a floating-point value or a
non-positive integer). Otherwise x
can be a valid R vector, list, or
data frame from which to sample.
The default for size
is the number of items inferred from x
,
so that sample(x, stream =
m
)
generates a
random permutation of the elements of x
(or 1:x
) using random
number stream m
.
It is allowed to ask for size = 0
samples (and only then is a
zero-length x
permitted), in which case
base::sample
is invoked to return the correct
(empty) data type.
The optional prob
argument can be used to give a vector of probabilities
for obtaining the elements of the vector being sampled. Unlike
base::sample
, the weights here must sum to one.
If replace
is false, these probabilities are applied successively;
that is the probability of choosing the next item is proportional to the
weights among the remaining items. The number of nonzero probabilities must
be at least size
in this case.
Value
If x
is a single positive integer, sample
returns a vector
drawn from the integers 1:x
.
Otherwise, sample
returns a vector, list, or data frame consistent
with typeof(x)
.
Author(s)
Barry Lawson (blawson@bates.edu),
Larry Leemis (leemis@math.wm.edu),
Vadim Kudlay (vkudlay@nvidia.com)
See Also
Examples
set.seed(8675309)
# use base::sample (since stream is NULL) to generate a permutation of 1:5
sample(5)
# use vunif(1, stream = 1) to generate a permutation of 1:5
sample(5, stream = 1)
# generate a (boring) sample of identical values drawn using the single value 867.5309
sample(867.5309, size = 10, replace = TRUE, stream = 1)
# use vunif(1, stream = 1) to generate a size-10 sample drawn from 7:9
sample(7:9, size = 10, replace = TRUE, stream = 1)
# use vunif(1, stream = 1) to generate a size-10 sample drawn from c('x','y','z')
sample(c('x','y','z'), size = 10, replace = TRUE, stream = 1)
# use vunif(1, stream = 1) to generate a size-5 sample drawn from a list
mylist <- list()
mylist$a <- 1:5
mylist$b <- 2:6
mylist$c <- 3:7
sample(mylist, size = 5, replace = TRUE, stream = 1)
# use vunif(1, stream = 1) to generate a size-5 sample drawn from a data frame
mydf <- data.frame(a = 1:6, b = c(1:3, 1:3))
sample(mydf, size = 5, replace = TRUE, stream = 1)
Standard Deviation of Time-Persistent Statistics (TPS)
Description
Computes the sample standard deviation of a time-persistent function.
Usage
sdTPS(times = NULL, numbers = NULL)
Arguments
times |
A numeric vector of non-decreasing time observations |
numbers |
A numeric vector containing the values of the time-persistent statistic between the time observation |
Details
The lengths of \code{times} and \code{numbers} either must be the same, or \code{times} may have one more entry than \code{numbers} (interval endpoints vs. interval counts). The sample variance is the area under the square of the step-function created by the values in \code{numbers} between the first and last element in \code{times} divided by the length of the observation period, less the square of the sample mean. The sample standard deviation is the square root of the sample variance.
Value
the sample standard deviation of the time-persistent function provided
Author(s)
Barry Lawson (blawson@bates.edu),
Larry Leemis (leemis@math.wm.edu),
Vadim Kudlay (vkudlay@nvidia.com)
Examples
times <- c(1,2,3,4,5)
counts <- c(1,2,1,1,2)
meanTPS(times, counts)
sdTPS(times, counts)
output <- ssq(seed = 54321, maxTime = 100, saveServerStatus = TRUE)
utilization <- meanTPS(output$serverStatusT, output$serverStatusN)
sdServerStatus <- sdTPS(output$serverStatusT, output$serverStatusN)
# compute and graphically display mean and sd of number in system vs time
output <- ssq(maxArrivals = 60, seed = 54321, saveAllStats = TRUE)
plot(output$numInSystemT, output$numInSystemN, type = "s", bty = "l",
las = 1, xlab = "time", ylab = "number in system")
meanSys <- meanTPS(output$numInSystemT, output$numInSystemN)
sdSys <- sdTPS(output$numInSystemT, output$numInSystemN)
abline(h = meanSys, lty = "solid", col = "red", lwd = 2)
abline(h = c(meanSys - sdSys, meanSys + sdSys),
lty = "dashed", col = "red", lwd = 2)
Seeding Random Variate Generators
Description
set.seed
in the simEd
package allows the user to simultaneously
set the initial seed for both the stats
and simEd
variate
generators.
Usage
set.seed(seed, kind = NULL, normal.kind = NULL)
Arguments
seed |
A single value, interpreted as an integer, or |
kind |
Character or |
normal.kind |
Character or |
Details
This function intentionally masks the base::set.seed
function,
allowing the user to simultaneously set the initial seed for the
stats
variate generators (by explicitly calling base::set.seed
)
and for the simEd
variate generators (by explicitly setting up
10 streams using the rstream.mrg32k3a
generator from the
rstream
package).
Any call to set.seed
re-initializes the seed for the stats
and simEd
generators as if no seed had been set.
If called with seed = NULL
, both the stats
and simEd
variate generators are re-initialized using a random seed based on the
system clock.
If the user wishes to set the seed for the stats
generators without
affecting the seeds of the simEd
generators, an explicit call to
base::set.seed
can be made.
Note that once set.seed
is called, advancing the simEd
generator
state using any of the stream-based simEd
variate generators will not
affect the state of the non-stream-based stats
generators, and
vice-versa.
As soon as the simEd
package is attached (i.e., when simEd
is
the parent of the global environment), simEd::set.seed
becomes the
default for a call to set.seed
. When the simEd
package is
detached, base::set.seed
will revert to the default.
Value
set.seed
returns NULL
, invisibly, consistent with
base::set.seed
.
Author(s)
Barry Lawson (blawson@bates.edu),
Larry Leemis (leemis@math.wm.edu),
Vadim Kudlay (vkudlay@nvidia.com)
See Also
Examples
set.seed(8675309)
rexp(3, rate = 2) # explicit call of stats::rexp
set.seed(8675309)
vexp(3, rate = 2) # also uses stats::rexp
set.seed(8675309)
vexp(3, rate = 2, stream = 1) # uses rstream and stats::qexp
vexp(3, rate = 2, stream = 2)
rexp(3, rate = 2) # explicit call of stats::rexp, starting with seed 8675309
set.seed(8675309)
vexp(1, rate = 2, stream = 1) # uses rstream and stats::qexp
vexp(1, rate = 2, stream = 2)
vexp(1, rate = 2, stream = 1)
vexp(1, rate = 2, stream = 2)
vexp(1, rate = 2, stream = 1)
vexp(1, rate = 2, stream = 2)
vexp(3, rate = 2) # calls stats::rexp, starting with seed 8675309
Single-Server Queue Simulation
Description
A next-event simulation of a single-server queue, with extensible arrival and service processes.
Usage
ssq(
maxArrivals = Inf,
seed = NA,
interarrivalFcn = NULL,
serviceFcn = NULL,
interarrivalType = "M",
serviceType = "M",
maxTime = Inf,
maxDepartures = Inf,
maxInSystem = Inf,
maxEventsPerSkyline = 15,
saveAllStats = FALSE,
saveInterarrivalTimes = FALSE,
saveServiceTimes = FALSE,
saveWaitTimes = FALSE,
saveSojournTimes = FALSE,
saveNumInQueue = FALSE,
saveNumInSystem = FALSE,
saveServerStatus = FALSE,
showOutput = TRUE,
animate = FALSE,
showQueue = NULL,
showSkyline = NULL,
showSkylineSystem = FALSE,
showSkylineQueue = FALSE,
showSkylineServer = FALSE,
showTitle = TRUE,
showProgress = TRUE,
plotQueueFcn = defaultPlotSSQ,
plotSkylineFcn = defaultPlotSkyline,
jobImage = NA,
plotDelay = NA,
respectLayout = FALSE
)
Arguments
maxArrivals |
maximum number of customer arrivals allowed to enter the system |
seed |
initial seed to the random number generator (NA uses current state of random number generator; NULL seeds using system clock) |
interarrivalFcn |
function for generating interarrival times for queue simulation.
Default value ( |
serviceFcn |
function for generating service times for queue simulation.
Default value ( |
interarrivalType |
string representation of desired interarrival process. Options are "M" – exponential with rate 1; "G" – uniform(0,2), having mean 1; and "D" – deterministic with constant value 1. Default is "M". |
serviceType |
string representation of desired service process . Options are "M" – exponential with rate 10/9; "G" – uniform(0, 1.8), having mean 9/10; and "D" – deterministic with constant value 9/10. Default is "M". |
maxTime |
maximum time to simulate |
maxDepartures |
maximum number of customer departures to process |
maxInSystem |
maximum number of customers that the system can hold (server(s) plus queue). Infinite by default. |
maxEventsPerSkyline |
maximum number of events viewable at a time in the skyline plot. A large value for this parameter may result in plotting delays. This parameter does not impact the final plotting, which will show all end-of-simulation results. |
saveAllStats |
if |
saveInterarrivalTimes |
if |
saveServiceTimes |
if |
saveWaitTimes |
if |
saveSojournTimes |
if |
saveNumInQueue |
if |
saveNumInSystem |
if |
saveServerStatus |
if |
showOutput |
if |
animate |
logical; if |
showQueue |
logical; if |
showSkyline |
If |
showSkylineSystem |
logical; if |
showSkylineQueue |
logical; if |
showSkylineServer |
logical; if |
showTitle |
if |
showProgress |
if TRUE, displays a progress bar on screen during no-animation execution |
plotQueueFcn |
plotting function to display queue visualization.
By default, this is provided by |
plotSkylineFcn |
plotting function to display Skyline visualization.
By default, this is provided by |
jobImage |
a vector of URLs/local addresses of images to use as jobs. Requires
package |
plotDelay |
a positive numeric value indicating seconds between plots. A value of -1 enters 'interactive' mode, where the state will pause for user input at each step. A value of 0 will display only the final end-of-simulation plot. |
respectLayout |
logical; if |
Details
Implements a next-event implementation of a single-server queue simulation.
The seed
parameter can take one of three valid
argument types:
-
NA
(default), which will use the current state of the random number generator without explicitly setting a new seed (see examples); a positive integer, which will be used as the initial seed passed in an explicit call to
set.seed
; or-
NULL
, which will be passed in an explicit call to toset.seed
, thereby setting the initial seed using the system clock.
Value
The function returns a list containing:
the number of arrivals to the system (
customerArrivals
),the number of customers processed (
customerDepartures
),the ending time of the simulation (
simulationEndTime
),average wait time in the queue (
avgWait
),average time in the system (
avgSojourn
),average number in the system (
avgNumInSystem
),average number in the queue (
avgNumInQueue
), andserver utilization (
utilization
).
of the queue as computed by the simulation. When requested via the “save...” parameters, the list may also contain:
a vector of interarrival times (
interarrivalTimes
),a vector of wait times (
waitTimes
),a vector of service times (
serviceTimes
),a vector of sojourn times (
sojournTimes
),two vectors (time and count) noting changes to number in the system (
numInSystemT
,numInSystemN
),two vectors (time and count) noting changes to number in the queue (
numInQueueT
,numInQueueN
), andtwo vectors (time and status) noting changes to server status (
serverStatusT
,serverStatusN
).
Author(s)
Barry Lawson (blawson@bates.edu),
Larry Leemis (leemis@math.wm.edu),
Vadim Kudlay (vkudlay@nvidia.com)
See Also
rstream
, set.seed
,
stats::runif
Examples
# process 100 arrivals, R-provided seed (via NULL seed)
ssq(100, NULL)
ssq(maxArrivals = 100, seed = 54321)
ssq(maxDepartures = 100, seed = 54321)
ssq(maxTime = 100, seed = 54321)
############################################################################
# example to show use of seed = NA (default) to rely on current state of generator
output1 <- ssq(200, 8675309, showOutput = FALSE, saveAllStats = TRUE)
output2 <- ssq(300, showOutput = FALSE, saveAllStats = TRUE)
set.seed(8675309)
output3 <- ssq(200, showOutput = FALSE, saveAllStats = TRUE)
output4 <- ssq(300, showOutput = FALSE, saveAllStats = TRUE)
sum(output1$sojournTimes != output3$sojournTimes) # should be zero
sum(output2$sojournTimes != output4$sojournTimes) # should be zero
myArrFcn <- function() { vexp(1, rate = 1/4, stream = 1) } # mean is 4
mySvcFcn <- function() { vgamma(1, shape = 1, rate = 0.3) } # mean is 3.3
output <- ssq(maxArrivals = 100, interarrivalFcn = myArrFcn, serviceFcn = mySvcFcn,
saveAllStats = TRUE)
mean(output$interarrivalTimes)
mean(output$serviceTimes)
meanTPS(output$numInQueueT, output$numInQueueN) # compute time-averaged num in queue
meanTPS(output$serverStatusT, output$serverStatusN) # compute server utilization
############################################################################
# example to show use of (simple) trace data for arrivals and service times;
# ssq() will need one more interarrival (arrival) time than jobs processed
#
arrivalTimes <- NULL
interarrivalTimes <- NULL
serviceTimes <- NULL
initTimes <- function() {
arrivalTimes <<- c(15, 47, 71, 111, 123, 152, 232, 245, 99999)
interarrivalTimes <<- c(arrivalTimes[1], diff(arrivalTimes))
serviceTimes <<- c(43, 36, 34, 30, 38, 30, 31, 29)
}
getInterarr <- function() {
nextInterarr <- interarrivalTimes[1]
interarrivalTimes <<- interarrivalTimes[-1] # remove 1st element globally
return(nextInterarr)
}
getService <- function() {
nextService <- serviceTimes[1]
serviceTimes <<- serviceTimes[-1] # remove 1st element globally
return(nextService)
}
initTimes()
numJobs <- length(serviceTimes)
output <- ssq(maxArrivals = numJobs, interarrivalFcn = getInterarr,
serviceFcn = getService, saveAllStats = TRUE)
mean(output$interarrivalTimes)
mean(output$serviceTimes)
############################################################################
# example to show use of (simple) trace data for arrivals and service times,
# allowing for reuse (recycling) of trace data times
arrivalTimes <- NULL
interarrivalTimes <- NULL
serviceTimes <- NULL
initArrivalTimes <- function() {
arrivalTimes <<- c(15, 47, 71, 111, 123, 152, 232, 245)
interarrivalTimes <<- c(arrivalTimes[1], diff(arrivalTimes))
}
initServiceTimes <- function() {
serviceTimes <<- c(43, 36, 34, 30, 38, 30, 31, 29)
}
getInterarr <- function() {
if (length(interarrivalTimes) == 0) initArrivalTimes()
nextInterarr <- interarrivalTimes[1]
interarrivalTimes <<- interarrivalTimes[-1] # remove 1st element globally
return(nextInterarr)
}
getService <- function() {
if (length(serviceTimes) == 0) initServiceTimes()
nextService <- serviceTimes[1]
serviceTimes <<- serviceTimes[-1] # remove 1st element globally
return(nextService)
}
initArrivalTimes()
initServiceTimes()
output <- ssq(maxArrivals = 100, interarrivalFcn = getInterarr,
serviceFcn = getService, saveAllStats = TRUE)
mean(output$interarrivalTimes)
mean(output$serviceTimes)
############################################################################
# Testing with visualization
# Visualizing ssq with a set seed, infinite queue capacity, 20 arrivals,
# interactive mode (default), showing skyline for all 3 attributes (default)
if (interactive()) {
ssq(seed = 1234, maxArrivals = 20, animate = TRUE)
}
# Same as above, but jump to final queue visualization using plotDelay 0
ssq(seed = 1234, maxArrivals = 20, animate = TRUE, plotDelay = 0)
# Perform simulation again with finite queue of low capacity. Note same
# variate generation but different outcomes due to rejection pathway
ssq(seed = 1234, maxArrivals = 25, animate = TRUE, maxInSystem = 5, plotDelay = 0)
# Using default distributions to simulate a default M/G/1 Queue
ssq(seed = 1234, maxDepartures = 10, interarrivalType = "M", serviceType = "G",
animate = TRUE, plotDelay = 0)
Single-Server Queue Simulation Visualization
Description
A modified ssq implementation that illustrates event-driven details, including the event calendar, inversion for interarrival and service time variate generation, the simulation clock, the status of the queueing system, and statistics collection. The function plots step-by-step in either an interactive mode or time-delayed automatic mode.
Usage
ssqvis(
maxArrivals = Inf,
seed = NA,
interarrivalType = "M",
serviceType = "M",
maxTime = Inf,
maxDepartures = Inf,
maxEventsPerSkyline = 15,
saveAllStats = FALSE,
saveInterarrivalTimes = FALSE,
saveServiceTimes = FALSE,
saveWaitTimes = FALSE,
saveSojournTimes = FALSE,
saveNumInQueue = FALSE,
saveNumInSystem = FALSE,
saveServerStatus = FALSE,
showOutput = TRUE,
showSkyline = NULL,
showSkylineQueue = TRUE,
showSkylineSystem = TRUE,
showSkylineServer = TRUE,
showTitle = TRUE,
jobImage = NA,
plotDelay = -1
)
Arguments
maxArrivals |
maximum number of customer arrivals allowed to enter the system |
seed |
initial seed to the random number generator (NA uses current state of random number generator; NULL seeds using system clock) |
interarrivalType |
string representation of desired interarrival process. Options are "M" – exponential with rate 1; "G" – uniform(0,2), having mean 1; and "D" – deterministic with constant value 1. Default is "M". |
serviceType |
string representation of desired service process . Options are "M" – exponential with rate 10/9; "G" – uniform(0, 1.8), having mean 9/10; and "D" – deterministic with constant value 9/10. Default is "M". |
maxTime |
maximum time to simulate |
maxDepartures |
maximum number of customer departures to process |
maxEventsPerSkyline |
maximum number of events viewable at a time in the skyline plot. A large value for this parameter may result in plotting delays. This parameter does not impact the final plotting, which will show all end-of-simulation results. |
saveAllStats |
if |
saveInterarrivalTimes |
if |
saveServiceTimes |
if |
saveWaitTimes |
if |
saveSojournTimes |
if |
saveNumInQueue |
if |
saveNumInSystem |
if |
saveServerStatus |
if |
showOutput |
if |
showSkyline |
If |
showSkylineQueue |
logical; if |
showSkylineSystem |
logical; if |
showSkylineServer |
logical; if |
showTitle |
if |
jobImage |
a vector of URLs/local addresses of images to use as jobs. Requires
package |
plotDelay |
a positive numeric value indicating seconds between plots. A value of -1 enters 'interactive' mode, where the state will pause for user input at each step. A value of 0 will display only the final end-of-simulation plot. |
Details
Animates the details of an event-driven implementation of a single-server queue simulation.
The event calendar, inversion for interarrival and service time variates, and an abbreviated (current) timeline are animated in the top pane of the window. In this pane, blue corresponds to the arrival process, orange corresponds to the service process, and purple corresponds to uniform variates used in inversion. Yellow is used to highlight recent updates.
The state of the queueing system is animated in the middle pane of the
window. In this pane, red indicates an idle server, orange indicates that
a new customer has just arrived to the server and a corresponding service
time is being generated, and green indicates a busy server. By default,
customers are depicted as black rectangles and identified by increasing
arrival number, but this depiction can be overridden by the jobImage
parameter.
Statistics are displayed in the bottom pane of the window. Time-persistent statistics are shown as "skyline functions" in the left portion of this pane. Both time-persistent and based-on-observation statistics are shown in respective tables in the right portion of this pane. In the tables, yellow is used to highlight recent updates.
The seed
parameter can take one of three valid
argument types:
-
NA
(default), which will use the current state of the random number generator without explicitly setting a new seed (see examples); a positive integer, which will be used as the initial seed passed in an explicit call to
set.seed
; or-
NULL
, which will be passed in an explicit call to toset.seed
, thereby setting the initial seed using the system clock.
Value
The function returns a list containing:
the number of arrivals to the system (
customerArrivals
),the number of customers processed (
customerDepartures
),the ending time of the simulation (
simulationEndTime
),average wait time in the queue (
avgWait
),average time in the system (
avgSojourn
),average number in the system (
avgNumInSystem
),average number in the queue (
avgNumInQueue
), andserver utilization (
utilization
).
of the queue as computed by the simulation. When requested via the “save...” parameters, the list may also contain:
a vector of interarrival times (
interarrivalTimes
),a vector of wait times (
waitTimes
),a vector of service times (
serviceTimes
),a vector of sojourn times (
sojournTimes
),two vectors (time and count) noting changes to number in the system (
numInSystemT
,numInSystemN
),two vectors (time and count) noting changes to number in the queue (
numInQueueT
,numInQueueN
), andtwo vectors (time and status) noting changes to server status (
serverStatusT
,serverStatusN
).
Author(s)
Barry Lawson (blawson@bates.edu),
Larry Leemis (leemis@math.wm.edu),
Vadim Kudlay (vkudlay@nvidia.com)
See Also
rstream
, set.seed
,
stats::runif
Examples
# Visualizing ssq with a set seed, infinite queue capacity, 4 arrivals,
# and showing skyline with number in system, queue, and server.
ssqvis(seed = 1234, maxArrivals = 4, showSkyline = 7, plotDelay = 0.01)
Thinning Algorithm Visualization
Description
This function animates the "thinning" approach the generation of the random event times for a non-homogeneous Poisson process with a specified intensity function, given a majorizing function that dominates the intensity function.
Usage
thinning(
maxTime = 24,
intensityFcn = function(x) (5 - sin(x/0.955) - (4 * cos(x/3.82)))/0.5,
majorizingFcn = NULL,
majorizingFcnType = NULL,
seed = NA,
maxTrials = Inf,
plot = TRUE,
showTitle = TRUE,
plotDelay = plot * -1
)
Arguments
maxTime |
maximum time of the non-homogeneous Poisson process. (The minimum time is assumed to be zero.) |
intensityFcn |
intensity function corresponding to rate of arrivals across time. |
majorizingFcn |
majorizing function. Default value is NULL, corresponding to a constant majorizing function that is 1.01 times the maximum value of the intensity function. May alternatively be provided as a user-specified function, or as a data frame requiring additional notation as either piecewise-constant or piecewise-linear. See examples. |
majorizingFcnType |
used to indicate whether a majorizing function that
is provided via data frame is to be interpreted as
either piecewise-constant ( |
seed |
initial seed for the uniform variates used during generation. |
maxTrials |
maximum number of accept-reject trials; infinite by default. |
plot |
if TRUE, visual display will be produced. If FALSE, generated event times will be returned without visual display. |
showTitle |
if TRUE, display title in the main plot. |
plotDelay |
wait time, in seconds, between plots; -1 (default) for interactive mode, where the user is queried for input to progress. |
Details
There are three modes for visualizing Lewis and Shedler's thinning algorithm for generating random event times for a non-homogeneous Poisson process with a particular intensity function:
interactive advance (
plotDelay = -1
), where pressing the 'ENTER' key advances to the next step (an accepted random variate) in the algorithm, typing 'j #' jumps ahead # steps, typing 'q' quits immediately, and typing 'e' proceeds to the end;automatic advance (
plotDelay
> 0); orfinal visualization only (
plotDelay = 0
).
As an alternative to visualizing, event times can be generated
Value
returns a vector of the generated random event times
References
Lewis, P.A.W. and Shedler, G.S. (1979). Simulation of non-homogeneous Poisson processes by thinning. Naval Research Logistics, 26, 403–413.
Examples
nhpp <- thinning(maxTime = 12, seed = 8675309, plotDelay = 0)
nhpp <- thinning(maxTime = 24, seed = 8675309, plotDelay = 0)
nhpp <- thinning(maxTime = 48, seed = 8675309, plotDelay = 0)
# thinning with custom intensity function and default majorizing function
intensity <- function(x) {
day <- 24 * floor(x/24)
return(80 * (dnorm(x, day + 6, 2.5) +
dnorm(x, day + 12.5, 1.5) +
dnorm(x, day + 19, 2.0)))
}
nhpp <- thinning(maxTime = 24, plotDelay = 0, intensityFcn = intensity)
# thinning with custom intensity and constant majorizing functions
major <- function(x) { 25 }
nhpp <- thinning(maxTime = 24, plotDelay = 0, intensityFcn = intensity,
majorizingFcn = major)
# piecewise-constant data.frame for bounding default intensity function
fpwc <- data.frame(
x = c(0, 2, 20, 30, 44, 48),
y = c(5, 5, 20, 12, 20, 5)
)
nhpp <- thinning(maxTime = 24, plotDelay = 0, majorizingFcn = fpwc, majorizingFcnType = "pwc")
# piecewise-linear data.frame for bounding default intensity function
fpwl <- data.frame(
x = c(0, 12, 24, 36, 48),
y = c(5, 25, 10, 25, 5)
)
nhpp <- thinning(maxTime = 24, plotDelay = 0, majorizingFcn = fpwl, majorizingFcnType = "pwl")
# piecewise-linear closure/function bounding default intensity function
fclo <- function(x) {
if (x <= 12) (5/3)*x + 5
else if (x <= 24) 40 - (5/4)*x
else if (x <= 36) (5/4)*x - 20
else 85 - (5/3) * x
}
nhpp <- thinning(maxTime = 48, plotDelay = 0, majorizingFcn = fclo)
# thinning with fancy custom intensity function and default majorizing
intensity <- function(x) {
day <- 24 * floor(x/24)
return(80 * (dnorm(x, day + 6, 2.5) +
dnorm(x, day + 12.5, 1.5) +
dnorm(x, day + 19, 2.0)))
}
nhpp <- thinning(maxTime = 24, plotDelay = 0, intensityFcn = intensity)
# piecewise-linear data.frame for bounding custom intensity function
fpwl <- data.frame(
x = c(0, 6, 9, 12, 16, 19, 24, 30, 33, 36, 40, 43, 48),
y = c(5, 17, 12, 28, 14, 18, 7, 17, 12, 28, 14, 18, 7)
)
nhpp <- thinning(maxTime = 48, plotDelay = 0, intensityFcn = intensity,
majorizingFcn = fpwl, majorizingFcnType = "pwl")
# thinning with simple custom intensity function and custom majorizing
intensity <- function(t) {
if (t < 12) t
else if (t < 24) 24 - t
else if (t < 36) t - 24
else 48 - t
}
majorizing <- data.frame(
x = c(0, 12, 24, 36, 48),
y = c(1, 13, 1, 13, 1))
times <- thinning(plotDelay = 0, intensityFcn = intensity,
majorizingFcn = majorizing , majorizingFcnType = "pwl", maxTime = 48)
Arrival and Service Data for Tyler's Grill (University of Richmond)
Description
This data set contains a list of two vectors of data.
The first vector in the list contains the arrival times for 1434 customers arriving to Tyler's Grill at the University of Richmond during a single day in 2005. The arrival times were collected during operating hours, from 07:30 until 21:00. Arrival times are provided in seconds from opening (07:30).
The second vector contains service times sample for 110 customers at Tyler's Grill in 2005. Service times are provided in seconds.
Usage
tylersGrill
Format
tylersGrill$arrivalTimes
returns the vector of 1434 arrival times.
tylersGrill$serviceTimes
returns the vector of 110 service times.
Source
CMSC 326 Simulation course at the University of Richmond, 2005.
Examples
interarr <- c(0, diff(tylersGrill$arrivalTimes))
svc <- tylersGrill$serviceTimes
avgInterarrivalTime <- mean(interarr)
avgServiceTime <- mean(svc)
# use method of moments to fit gamma to Tyler's Grill service times
aHat <- mean(svc)^2 / var(svc)
bHat <- var(svc) / mean(svc)
hist(svc, freq = FALSE, las = 1, xlab = "service time", ylab = "density")
x <- 1:max(svc)
curve(dgamma(x, shape = aHat, scale = bHat), add = TRUE, col = "red", lwd = 2)
Variate Generation for Beta Distribution
Description
Variate Generation for Beta Distribution
Usage
vbeta(
n,
shape1,
shape2,
ncp = 0,
stream = NULL,
antithetic = FALSE,
asList = FALSE
)
Arguments
n |
number of observations |
shape1 |
Shape parameter 1 (alpha) |
shape2 |
Shape parameter 2 (beta) |
ncp |
Non-centrality parameter (default 0) |
stream |
if |
antithetic |
if |
asList |
if |
Details
Generates random variates from the beta distribution.
Beta variates are generated by inverting uniform(0,1) variates
produced either by stats::runif
(if stream
is
NULL
) or by rstream::rstream.sample
(if stream
is not NULL
).
In either case, stats::qbeta
is used to
invert the uniform(0,1) variate(s).
In this way, using vbeta
provides a monotone and synchronized
binomial variate generator, although not particularly fast.
The stream indicated must be an integer between 1 and 25 inclusive.
The beta distribution has density
\deqn{f(x) = \frac{\Gamma(a+b)}{\Gamma(a) \ \Gamma(b)} x^{a-1}(1-x)^{b-1}}{ f(x) = Gamma(a+b)/(Gamma(a)Gamma(b)) x^(a-1)(1-x)^(b-1)}
for a > 0
, b > 0
and 0 \leq x \leq 1
where the
boundary values at x=0
or x=1
are defined as by continuity (as limits).
The mean is \frac{a}{a+b}
and the variance is
{ab}{(a+b)^2 (a+b+1)}
Value
If asList
is FALSE (default), return a vector of random variates.
Otherwise, return a list with components suitable for visualizing inversion, specifically:
u |
A vector of generated U(0,1) variates |
x |
A vector of beta random variates |
quantile |
Parameterized quantile function |
text |
Parameterized title of distribution |
Author(s)
Barry Lawson (blawson@bates.edu),
Larry Leemis (leemis@math.wm.edu),
Vadim Kudlay (vkudlay@nvidia.com)
See Also
rstream
, set.seed
,
stats::runif
Examples
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qbeta
vbeta(3, shape1 = 3, shape2 = 1, ncp = 2)
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qbeta
vbeta(3, 3, 1, stream = 1)
vbeta(3, 3, 1, stream = 2)
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qbeta
vbeta(1, 3, 1, stream = 1)
vbeta(1, 3, 1, stream = 2)
vbeta(1, 3, 1, stream = 1)
vbeta(1, 3, 1, stream = 2)
vbeta(1, 3, 1, stream = 1)
vbeta(1, 3, 1, stream = 2)
set.seed(8675309)
variates <- vbeta(100, 3, 1, stream = 1)
set.seed(8675309)
variates <- vbeta(100, 3, 1, stream = 1, antithetic = TRUE)
Variate Generation for Binomial Distribution
Description
Variate Generation for Binomial Distribution
Usage
vbinom(n, size, prob, stream = NULL, antithetic = FALSE, asList = FALSE)
Arguments
n |
number of observations |
size |
number of trials (zero or more) |
prob |
probability of success on each trial (0 |
stream |
if |
antithetic |
if |
asList |
if |
Details
Generates random variates from the binomial distribution.
Binomial variates are generated by inverting uniform(0,1) variates
produced either by stats::runif
(if stream
is
NULL
) or by rstream::rstream.sample
(if stream
is not NULL
).
In either case, stats::qbinom
is used to
invert the uniform(0,1) variate(s).
In this way, using vbinom
provides a monotone and synchronized
binomial variate generator, although not particularly fast.
The stream indicated must be an integer between 1 and 25 inclusive.
The binomial distribution with parameters size
= n
and
prob
= p
has pmf
p(x) = {n \choose x} p^x (1-p)^{(n-x)}
for x = 0, \ldots, n
.
Value
If asList
is FALSE (default), return a vector of random variates.
Otherwise, return a list with components suitable for visualizing inversion, specifically:
u |
A vector of generated U(0,1) variates |
x |
A vector of binomial random variates |
quantile |
Parameterized quantile function |
text |
Parameterized title of distribution |
Author(s)
Barry Lawson (blawson@bates.edu),
Larry Leemis (leemis@math.wm.edu),
Vadim Kudlay (vkudlay@nvidia.com)
See Also
rstream
, set.seed
,
stats::runif
Examples
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qbinom
vbinom(3, size = 10, prob = 0.25)
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qbinom
vbinom(3, 10, 0.25, stream = 1)
vbinom(3, 10, 0.25, stream = 2)
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qbinom
vbinom(1, 10, 0.25, stream = 1)
vbinom(1, 10, 0.25, stream = 2)
vbinom(1, 10, 0.25, stream = 1)
vbinom(1, 10, 0.25, stream = 2)
vbinom(1, 10, 0.25, stream = 1)
vbinom(1, 10, 0.25, stream = 2)
set.seed(8675309)
variates <- vbinom(100, 10, 0.25, stream = 1)
set.seed(8675309)
variates <- vbinom(100, 10, 0.25, stream = 1, antithetic = TRUE)
Variate Generation for Cauchy Distribution
Description
Variate Generation for Cauchy Distribution
Usage
vcauchy(
n,
location = 0,
scale = 1,
stream = NULL,
antithetic = FALSE,
asList = FALSE
)
Arguments
n |
number of observations |
location |
Location parameter (default 0) |
scale |
Scale parameter (default 1) |
stream |
if |
antithetic |
if |
asList |
if |
Details
Generates random variates from the Cauchy distribution.
Cauchy variates are generated by inverting uniform(0,1) variates
produced either by stats::runif
(if stream
is
NULL
) or by rstream::rstream.sample
(if stream
is not NULL
).
In either case, stats::qcauchy
is used to
invert the uniform(0,1) variate(s).
In this way, using vcauchy
provides a monotone and synchronized
binomial variate generator, although not particularly fast.
The stream indicated must be an integer between 1 and 25 inclusive.
The Cauchy distribution has density \deqn{f(x) = \frac{1}{\pi s} \ \left(1 + \left( \frac{x - l}{s} \right)^2 \right)^{-1}}{ f(x) = 1 / (\pi s (1 + ((x-l)/s)^2))}
for all x
.
The mean is a/(a+b)
and the variance is ab/((a+b)^2 (a+b+1))
.
Value
If asList
is FALSE (default), return a vector of random variates.
Otherwise, return a list with components suitable for visualizing inversion, specifically:
u |
A vector of generated U(0,1) variates |
x |
A vector of Cauchy random variates |
quantile |
Parameterized quantile function |
text |
Parameterized title of distribution |
Author(s)
Barry Lawson (blawson@bates.edu),
Larry Leemis (leemis@math.wm.edu),
Vadim Kudlay (vkudlay@nvidia.com)
See Also
rstream
, set.seed
,
stats::runif
Examples
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qcauchy
vcauchy(3, location = 3, scale = 1)
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qcauchy
vcauchy(3, 0, 3, stream = 1)
vcauchy(3, 0, 3, stream = 2)
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qcauchy
vcauchy(1, 0, 3, stream = 1)
vcauchy(1, 0, 3, stream = 2)
vcauchy(1, 0, 3, stream = 1)
vcauchy(1, 0, 3, stream = 2)
vcauchy(1, 0, 3, stream = 1)
vcauchy(1, 0, 3, stream = 2)
set.seed(8675309)
variates <- vcauchy(100, 0, 3, stream = 1)
set.seed(8675309)
variates <- vcauchy(100, 0, 3, stream = 1, antithetic = TRUE)
Variate Generation for Chi-Squared Distribution
Description
Variate Generation for Chi-Squared Distribution
Usage
vchisq(n, df, ncp = 0, stream = NULL, antithetic = FALSE, asList = FALSE)
Arguments
n |
number of observations |
df |
Degrees of freedom (non-negative, but can be non-integer) |
ncp |
Non-centrality parameter (non-negative) |
stream |
if |
antithetic |
if |
asList |
if |
Details
Generates random variates from the chi-squared distribution.
Chi-Squared variates are generated by inverting uniform(0,1) variates
produced either by stats::runif
(if stream
is
NULL
) or by rstream::rstream.sample
(if stream
is not NULL
).
In either case, stats::qchisq
is used to
invert the uniform(0,1) variate(s).
In this way, using vchisq
provides a monotone and synchronized
binomial variate generator, although not particularly fast.
The stream indicated must be an integer between 1 and 25 inclusive.
The chi-squared distribution with df
= n \geq 0
degrees
of freedom has density
\deqn{f_n(x) = \frac{1}{2^{n/2} \ \Gamma(n/2)} x^{n/2-1} e^{-x/2}}{ f_n(x) = 1 / (2^(n/2) \Gamma(n/2)) x^(n/2-1) e^(-x/2)}
for x > 0
. The mean and variance are n
and 2n
.
The non-central chi-squared distribution with df
= n degrees of
freedom and non-centrality parameter ncp
= \lambda
has density
\deqn{f(x) = e^{-\lambda/2} \sum_{r=0}^\infty \frac{(\lambda/2)^r}{r!} f_{n + 2r}(x)}{ f(x) = exp(-\lambda/2) SUM_{r=0}^\infty ((\lambda/2)^r / r!) dchisq(x, df + 2r)}
for x \geq 0
.
Value
If asList
is FALSE (default), return a vector of random variates.
Otherwise, return a list with components suitable for visualizing inversion, specifically:
u |
A vector of generated U(0,1) variates |
x |
A vector of chi-squared random variates |
quantile |
Parameterized quantile function |
text |
Parameterized title of distribution |
Author(s)
Barry Lawson (blawson@bates.edu),
Larry Leemis (leemis@math.wm.edu),
Vadim Kudlay (vkudlay@nvidia.com)
See Also
rstream
, set.seed
,
stats::runif
Examples
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qchisq
vchisq(3, df = 3, ncp = 2)
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qchisq
vchisq(3, 3, stream = 1)
vchisq(3, 3, stream = 2)
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qchisq
vchisq(1, 3, stream = 1)
vchisq(1, 3, stream = 2)
vchisq(1, 3, stream = 1)
vchisq(1, 3, stream = 2)
vchisq(1, 3, stream = 1)
vchisq(1, 3, stream = 2)
set.seed(8675309)
variates <- vchisq(100, 3, stream = 1)
set.seed(8675309)
variates <- vchisq(100, 3, stream = 1, antithetic = TRUE)
Variate Generation for Exponential Distribution
Description
Variate Generation for Exponential Distribution
Usage
vexp(n, rate = 1, stream = NULL, antithetic = FALSE, asList = FALSE)
Arguments
n |
number of observations |
rate |
Rate of distribution (default 1) |
stream |
if |
antithetic |
if |
asList |
if |
Details
Generates random variates from the exponential distribution.
Exponential variates are generated by inverting uniform(0,1) variates
produced either by stats::runif
(if stream
is
NULL
) or by rstream::rstream.sample
(if stream
is not NULL
).
In either case, stats::qexp
is used to
invert the uniform(0,1) variate(s).
In this way, using vexp
provides a monotone and synchronized
binomial variate generator, although not particularly fast.
The stream indicated must be an integer between 1 and 25 inclusive.
The exponential distribution with rate \eqn{\lambda} has density \deqn{f(x) = \lambda e^{-\lambda x}}{ f(x) = \lambda e^(-\lambda x)} for \eqn{x \geq 0}.
Value
If asList
is FALSE (default), return a vector of random variates.
Otherwise, return a list with components suitable for visualizing inversion, specifically:
u |
A vector of generated U(0,1) variates |
x |
A vector of exponential random variates |
quantile |
Parameterized quantile function |
text |
Parameterized title of distribution |
Author(s)
Barry Lawson (blawson@bates.edu),
Larry Leemis (leemis@math.wm.edu),
Vadim Kudlay (vkudlay@nvidia.com)
See Also
rstream
, set.seed
,
stats::runif
Examples
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qexp
vexp(3, rate = 2)
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qexp
vexp(3, 2, stream = 1)
vexp(3, 2, stream = 2)
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qexp
vexp(1, 2, stream = 1)
vexp(1, 2, stream = 2)
vexp(1, 2, stream = 1)
vexp(1, 2, stream = 2)
vexp(1, 2, stream = 1)
vexp(1, 2, stream = 2)
set.seed(8675309)
variates <- vexp(100, 2, stream = 1)
set.seed(8675309)
variates <- vexp(100, 2, stream = 1, antithetic = TRUE)
set.seed(8675309)
# NOTE: Default functions for M/M/1 ssq(), ignoring fixed n
interarrivals <- vexp(1000, rate = 1, stream = 1)
services <- vexp(1000, rate = 10/9, stream = 2)
Variate Generation for FALSE Distribution
Description
Variate Generation for FALSE Distribution
Usage
vfd(n, df1, df2, ncp = 0, stream = NULL, antithetic = FALSE, asList = FALSE)
Arguments
n |
number of observations |
df1 |
Degrees of freedom > 0 |
df2 |
Degrees of freedom > 0 |
ncp |
Non-centrality parameter >= 0 |
stream |
if |
antithetic |
if |
asList |
if |
Details
Generates random variates from the FALSE distribution.
FALSE variates are generated by inverting uniform(0,1) variates
produced either by stats::runif
(if stream
is
NULL
) or by rstream::rstream.sample
(if stream
is not NULL
).
In either case, stats::qf
is used to
invert the uniform(0,1) variate(s).
In this way, using vfd
provides a monotone and synchronized
binomial variate generator, although not particularly fast.
The stream indicated must be an integer between 1 and 25 inclusive.
The F distribution with df1
= n_1
and df2
= n_2
degrees of freedom has density
f(x) = \frac {\Gamma(n_1/2 + n_2/2)} {\Gamma(n_1/2) \ \Gamma(n_2/2)}
\left( \frac{n_1}{n_2} \right)^{n_1/2} x^{n_1/2 - 1}
\left( 1 + \frac{n_1x}{n_2} \right) ^ {-(n_1 + n_2)/2}
for x > 0
.
Value
If asList
is FALSE (default), return a vector of random variates.
Otherwise, return a list with components suitable for visualizing inversion, specifically:
u |
A vector of generated U(0,1) variates |
x |
A vector of FALSE random variates |
quantile |
Parameterized quantile function |
text |
Parameterized title of distribution |
Author(s)
Barry Lawson (blawson@bates.edu),
Larry Leemis (leemis@math.wm.edu),
Vadim Kudlay (vkudlay@nvidia.com)
See Also
rstream
, set.seed
,
stats::runif
Examples
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qf
vfd(3, df1 = 1, df2 = 2, ncp = 10)
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qf
vfd(3, 5, 5, stream = 1)
vfd(3, 5, 5, stream = 2)
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qf
vfd(1, 5, 5, stream = 1)
vfd(1, 5, 5, stream = 2)
vfd(1, 5, 5, stream = 1)
vfd(1, 5, 5, stream = 2)
vfd(1, 5, 5, stream = 1)
vfd(1, 5, 5, stream = 2)
set.seed(8675309)
variates <- vfd(100, 5, 5, stream = 1)
set.seed(8675309)
variates <- vfd(100, 5, 5, stream = 1, antithetic = TRUE)
Variate Generation for Gamma Distribution
Description
Variate Generation for Gamma Distribution
Usage
vgamma(
n,
shape,
rate = 1,
scale = 1/rate,
stream = NULL,
antithetic = FALSE,
asList = FALSE
)
Arguments
n |
number of observations |
shape |
Shape parameter |
rate |
Alternate parameterization for scale |
scale |
Scale parameter |
stream |
if |
antithetic |
if |
asList |
if |
Details
Generates random variates from the gamma distribution.
Gamma variates are generated by inverting uniform(0,1) variates
produced either by stats::runif
(if stream
is
NULL
) or by rstream::rstream.sample
(if stream
is not NULL
).
In either case, stats::qgamma
is used to
invert the uniform(0,1) variate(s).
In this way, using vgamma
provides a monotone and synchronized
binomial variate generator, although not particularly fast.
The stream indicated must be an integer between 1 and 25 inclusive.
The gamma distribution with parameters \code{shape} = \eqn{a} and \code{scale} = \eqn{s} has density \deqn{f(x) = \frac{1}{s^a\, \Gamma(a)} x^{a-1} e^{-x/s}}{ f(x) = 1/(s^a Gamma(a)) x^(a-1) e^(-x/s)} for \eqn{x \ge 0}, \eqn{a > 0}, and \eqn{s > 0}. (Here \eqn{\Gamma(a)}{Gamma(a)} is the function implemented by R's \code{\link[base:Special]{gamma}()} and defined in its help.) The population mean and variance are \eqn{E(X) = as} and \eqn{Var(X) = as^2}.
Value
If asList
is FALSE (default), return a vector of random variates.
Otherwise, return a list with components suitable for visualizing inversion, specifically:
u |
A vector of generated U(0,1) variates |
x |
A vector of gamma random variates |
quantile |
Parameterized quantile function |
text |
Parameterized title of distribution |
Author(s)
Barry Lawson (blawson@bates.edu),
Larry Leemis (leemis@math.wm.edu),
Vadim Kudlay (vkudlay@nvidia.com)
See Also
rstream
, set.seed
,
stats::runif
Examples
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qgamma
vgamma(3, shape = 2, rate = 1)
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qgamma
vgamma(3, 2, scale = 1, stream = 1)
vgamma(3, 2, scale = 1, stream = 2)
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qgamma
vgamma(1, 2, scale = 1, stream = 1)
vgamma(1, 2, scale = 1, stream = 2)
vgamma(1, 2, scale = 1, stream = 1)
vgamma(1, 2, scale = 1, stream = 2)
vgamma(1, 2, scale = 1, stream = 1)
vgamma(1, 2, scale = 1, stream = 2)
set.seed(8675309)
variates <- vgamma(100, 2, scale = 1, stream = 1)
set.seed(8675309)
variates <- vgamma(100, 2, scale = 1, stream = 1, antithetic = TRUE)
Variate Generation for Geometric Distribution
Description
Variate Generation for Geometric Distribution
Usage
vgeom(n, prob, stream = NULL, antithetic = FALSE, asList = FALSE)
Arguments
n |
number of observations |
prob |
Probability of success in each trial (0 |
stream |
if |
antithetic |
if |
asList |
if |
Details
Generates random variates from the geometric distribution.
Geometric variates are generated by inverting uniform(0,1) variates
produced either by stats::runif
(if stream
is
NULL
) or by rstream::rstream.sample
(if stream
is not NULL
).
In either case, stats::qgeom
is used to
invert the uniform(0,1) variate(s).
In this way, using vgeom
provides a monotone and synchronized
binomial variate generator, although not particularly fast.
The stream indicated must be an integer between 1 and 25 inclusive.
The geometric distribution with parameter prob
= p
has density
p(x) = p (1-p)^x
for x = 0, 1, 2, \ldots
, where 0 < p \le 1
.
Value
If asList
is FALSE (default), return a vector of random variates.
Otherwise, return a list with components suitable for visualizing inversion, specifically:
u |
A vector of generated U(0,1) variates |
x |
A vector of geometric random variates |
quantile |
Parameterized quantile function |
text |
Parameterized title of distribution |
Author(s)
Barry Lawson (blawson@bates.edu),
Larry Leemis (leemis@math.wm.edu),
Vadim Kudlay (vkudlay@nvidia.com)
See Also
rstream
, set.seed
,
stats::runif
Examples
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qgeom
vgeom(3, prob = 0.3)
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qgeom
vgeom(3, 0.3, stream = 1)
vgeom(3, 0.3, stream = 2)
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qgeom
vgeom(1, 0.3, stream = 1)
vgeom(1, 0.3, stream = 2)
vgeom(1, 0.3, stream = 1)
vgeom(1, 0.3, stream = 2)
vgeom(1, 0.3, stream = 1)
vgeom(1, 0.3, stream = 2)
set.seed(8675309)
variates <- vgeom(100, 0.3, stream = 1)
set.seed(8675309)
variates <- vgeom(100, 0.3, stream = 1, antithetic = TRUE)
Variate Generation for Log-Normal Distribution
Description
Variate Generation for Log-Normal Distribution
Usage
vlnorm(
n,
meanlog = 0,
sdlog = 1,
stream = NULL,
antithetic = FALSE,
asList = FALSE
)
Arguments
n |
number of observations |
meanlog |
Mean of distribution on log scale (default 0) |
sdlog |
Standard deviation of distribution on log scale (default 1) |
stream |
if |
antithetic |
if |
asList |
if |
Details
Generates random variates from the log-normal distribution.
Log-Normal variates are generated by inverting uniform(0,1) variates
produced either by stats::runif
(if stream
is
NULL
) or by rstream::rstream.sample
(if stream
is not NULL
).
In either case, stats::qlnorm
is used to
invert the uniform(0,1) variate(s).
In this way, using vlnorm
provides a monotone and synchronized
binomial variate generator, although not particularly fast.
The stream indicated must be an integer between 1 and 25 inclusive.
The log-normal distribution has density
\deqn{f(x) = \frac{1}{\sqrt{2 \pi} \sigma x} e^{-(\log{x} - \mu)^2 / (2 \sigma^2)} }{ f(x) = 1/(\sqrt(2 \pi) \sigma x) e^-((log x - \mu)^2 / (2 \sigma^2))}
where \mu
and \sigma
are the mean and standard deviation
of the logarithm.
The mean is
E(X) = \exp(\mu + 1/2 \sigma^2)
,
the median is
med(X) = \exp(\mu)
,
and the variance is
Var(X) = \exp(2\times \mu +\sigma^2)\times (\exp(\sigma^2)-1)
and hence the coefficient of variation is
sqrt(\exp(\sigma^2)-1)
which is approximately \sigma
when small
(e.g., \sigma < 1/2
).
Value
If asList
is FALSE (default), return a vector of random variates.
Otherwise, return a list with components suitable for visualizing inversion, specifically:
u |
A vector of generated U(0,1) variates |
x |
A vector of log-normal random variates |
quantile |
Parameterized quantile function |
text |
Parameterized title of distribution |
Author(s)
Barry Lawson (blawson@bates.edu),
Larry Leemis (leemis@math.wm.edu),
Vadim Kudlay (vkudlay@nvidia.com)
See Also
rstream
, set.seed
,
stats::runif
Examples
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qlnorm
vlnorm(3, meanlog = 5, sdlog = 0.5)
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qlnorm
vlnorm(3, 8, 2, stream = 1)
vlnorm(3, 8, 2, stream = 2)
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qlnorm
vlnorm(1, 8, 2, stream = 1)
vlnorm(1, 8, 2, stream = 2)
vlnorm(1, 8, 2, stream = 1)
vlnorm(1, 8, 2, stream = 2)
vlnorm(1, 8, 2, stream = 1)
vlnorm(1, 8, 2, stream = 2)
set.seed(8675309)
variates <- vlnorm(100, 8, 2, stream = 1)
set.seed(8675309)
variates <- vlnorm(100, 8, 2, stream = 1, antithetic = TRUE)
Variate Generation for Logistic Distribution
Description
Variate Generation for Logistic Distribution
Usage
vlogis(
n,
location = 0,
scale = 1,
stream = NULL,
antithetic = FALSE,
asList = FALSE
)
Arguments
n |
number of observations |
location |
Location parameter |
scale |
Scale parameter (default 1) |
stream |
if |
antithetic |
if |
asList |
if |
Details
Generates random variates from the logistic distribution.
Logistic variates are generated by inverting uniform(0,1) variates
produced either by stats::runif
(if stream
is
NULL
) or by rstream::rstream.sample
(if stream
is not NULL
).
In either case, stats::qlogis
is used to
invert the uniform(0,1) variate(s).
In this way, using vlogis
provides a monotone and synchronized
binomial variate generator, although not particularly fast.
The stream indicated must be an integer between 1 and 25 inclusive.
The logistic distribution with location
= \mu
and
scale
= \sigma
has distribution function
F(x) = \frac{1}{1 + e^{-(x - \mu) / \sigma}}
and density
f(x) = \frac{1}{\sigma} \frac{e^{(x-\mu)/\sigma}}
{(1 + e^{(x-\mu)/\sigma})^2}
It is a long-tailed distribution with mean \mu
and
variance \pi^2 / 3 \sigma^2
.
Value
If asList
is FALSE (default), return a vector of random variates.
Otherwise, return a list with components suitable for visualizing inversion, specifically:
u |
A vector of generated U(0,1) variates |
x |
A vector of logistic random variates |
quantile |
Parameterized quantile function |
text |
Parameterized title of distribution |
Author(s)
Barry Lawson (blawson@bates.edu),
Larry Leemis (leemis@math.wm.edu),
Vadim Kudlay (vkudlay@nvidia.com)
See Also
rstream
, set.seed
,
stats::runif
Examples
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qlogis
vlogis(3, location = 5, scale = 0.5)
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qlogis
vlogis(3, 5, 1.5, stream = 1)
vlogis(3, 5, 1.5, stream = 2)
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qlogis
vlogis(1, 5, 1.5, stream = 1)
vlogis(1, 5, 1.5, stream = 2)
vlogis(1, 5, 1.5, stream = 1)
vlogis(1, 5, 1.5, stream = 2)
vlogis(1, 5, 1.5, stream = 1)
vlogis(1, 5, 1.5, stream = 2)
set.seed(8675309)
variates <- vlogis(100, 5, 1.5, stream = 1)
set.seed(8675309)
variates <- vlogis(100, 5, 1.5, stream = 1, antithetic = TRUE)
Variate Generation for Negative Binomial Distribution
Description
Variate Generation for Negative Binomial Distribution
Usage
vnbinom(n, size, prob, mu, stream = NULL, antithetic = FALSE, asList = FALSE)
Arguments
n |
number of observations |
size |
target for number of successful trials, or dispersion parameter (the shape parameter of the gamma mixing distribution). Must be strictly positive, need not be integer. |
prob |
Probability of success in each trial; '0 < prob <= 1' |
mu |
alternative parameterization via mean |
stream |
if |
antithetic |
if |
asList |
if |
Details
Generates random variates from the negative binomial distribution.
Negative Binomial variates are generated by inverting uniform(0,1) variates
produced either by stats::runif
(if stream
is
NULL
) or by rstream::rstream.sample
(if stream
is not NULL
).
In either case, stats::qnbinom
is used to
invert the uniform(0,1) variate(s).
In this way, using vnbinom
provides a monotone and synchronized
binomial variate generator, although not particularly fast.
The stream indicated must be an integer between 1 and 25 inclusive.
The negative binomial distribution with size
= n
and
prob
= p
has density
\deqn{p(x) = \frac{\Gamma(x+n)}{\Gamma(n) \ x!} p^n (1-p)^x}{ p(x) = Gamma(x+n)/(Gamma(n) x!) p^n (1-p)^x}
for x = 0, 1, 2, \ldots, n > 0
and 0 < p \leq 1
. This represents the
number of failures which occur in a sequence of Bernoulli trials before a
target number of successes is reached.
The mean is \mu = n(1 - p)/p
and variance n(1 - p)/p^2
Value
If asList
is FALSE (default), return a vector of random variates.
Otherwise, return a list with components suitable for visualizing inversion, specifically:
u |
A vector of generated U(0,1) variates |
x |
A vector of negative binomial random variates |
quantile |
Parameterized quantile function |
text |
Parameterized title of distribution |
Author(s)
Barry Lawson (blawson@bates.edu),
Larry Leemis (leemis@math.wm.edu),
Vadim Kudlay (vkudlay@nvidia.com)
See Also
rstream
, set.seed
,
stats::runif
Examples
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qnbinom
vnbinom(3, size = 10, mu = 10)
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qnbinom
vnbinom(3, 10, 0.25, stream = 1)
vnbinom(3, 10, 0.25, stream = 2)
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qnbinom
vnbinom(1, 10, 0.25, stream = 1)
vnbinom(1, 10, 0.25, stream = 2)
vnbinom(1, 10, 0.25, stream = 1)
vnbinom(1, 10, 0.25, stream = 2)
vnbinom(1, 10, 0.25, stream = 1)
vnbinom(1, 10, 0.25, stream = 2)
set.seed(8675309)
variates <- vnbinom(100, 10, 0.25, stream = 1)
set.seed(8675309)
variates <- vnbinom(100, 10, 0.25, stream = 1, antithetic = TRUE)
Variate Generation for Normal Distribution
Description
Variate Generation for Normal Distribution
Usage
vnorm(n, mean = 0, sd = 1, stream = NULL, antithetic = FALSE, asList = FALSE)
Arguments
n |
number of observations |
mean |
Mean of distribution (default 0) |
sd |
Standard deviation of distribution (default 1) |
stream |
if |
antithetic |
if |
asList |
if |
Details
Generates random variates from the normal distribution.
Normal variates are generated by inverting uniform(0,1) variates
produced either by stats::runif
(if stream
is
NULL
) or by rstream::rstream.sample
(if stream
is not NULL
).
In either case, stats::qnorm
is used to
invert the uniform(0,1) variate(s).
In this way, using vnorm
provides a monotone and synchronized
binomial variate generator, although not particularly fast.
The stream indicated must be an integer between 1 and 25 inclusive.
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.
Value
If asList
is FALSE (default), return a vector of random variates.
Otherwise, return a list with components suitable for visualizing inversion, specifically:
u |
A vector of generated U(0,1) variates |
x |
A vector of normal random variates |
quantile |
Parameterized quantile function |
text |
Parameterized title of distribution |
Author(s)
Barry Lawson (blawson@bates.edu),
Larry Leemis (leemis@math.wm.edu),
Vadim Kudlay (vkudlay@nvidia.com)
See Also
rstream
, set.seed
,
stats::runif
Examples
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qnorm
vnorm(3, mean = 2, sd = 1)
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qnorm
vnorm(3, 10, 2, stream = 1)
vnorm(3, 10, 2, stream = 2)
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qnorm
vnorm(1, 10, 2, stream = 1)
vnorm(1, 10, 2, stream = 2)
vnorm(1, 10, 2, stream = 1)
vnorm(1, 10, 2, stream = 2)
vnorm(1, 10, 2, stream = 1)
vnorm(1, 10, 2, stream = 2)
set.seed(8675309)
variates <- vnorm(100, 10, 2, stream = 1)
set.seed(8675309)
variates <- vnorm(100, 10, 2, stream = 1, antithetic = TRUE)
Variate Generation for Poisson Distribution
Description
Variate Generation for Poisson Distribution
Usage
vpois(n, lambda, stream = NULL, antithetic = FALSE, asList = FALSE)
Arguments
n |
number of observations |
lambda |
Rate of distribution |
stream |
if |
antithetic |
if |
asList |
if |
Details
Generates random variates from the Poisson distribution.
Poisson variates are generated by inverting uniform(0,1) variates
produced either by stats::runif
(if stream
is
NULL
) or by rstream::rstream.sample
(if stream
is not NULL
).
In either case, stats::qpois
is used to
invert the uniform(0,1) variate(s).
In this way, using vpois
provides a monotone and synchronized
binomial variate generator, although not particularly fast.
The stream indicated must be an integer between 1 and 25 inclusive.
The Poisson distribution has density
p(x) = \frac{\lambda^x e^{-\lambda}}{x!}
for x = 0, 1, 2, \ldots
.
The mean and variance are E(X) = Var(X) = \lambda
Value
If asList
is FALSE (default), return a vector of random variates.
Otherwise, return a list with components suitable for visualizing inversion, specifically:
u |
A vector of generated U(0,1) variates |
x |
A vector of Poisson random variates |
quantile |
Parameterized quantile function |
text |
Parameterized title of distribution |
Author(s)
Barry Lawson (blawson@bates.edu),
Larry Leemis (leemis@math.wm.edu),
Vadim Kudlay (vkudlay@nvidia.com)
See Also
rstream
, set.seed
,
stats::runif
Examples
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qpois
vpois(3, lambda = 5)
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qpois
vpois(3, 3, stream = 1)
vpois(3, 3, stream = 2)
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qpois
vpois(1, 3, stream = 1)
vpois(1, 3, stream = 2)
vpois(1, 3, stream = 1)
vpois(1, 3, stream = 2)
vpois(1, 3, stream = 1)
vpois(1, 3, stream = 2)
set.seed(8675309)
variates <- vpois(100, 3, stream = 1)
set.seed(8675309)
variates <- vpois(100, 3, stream = 1, antithetic = TRUE)
Variate Generation for Student T Distribution
Description
Variate Generation for Student T Distribution
Usage
vt(n, df, ncp = 0, stream = NULL, antithetic = FALSE, asList = FALSE)
Arguments
n |
number of observations |
df |
Degrees of freedom > 0 |
ncp |
Non-centrality parameter delta (default NULL) |
stream |
if |
antithetic |
if |
asList |
if |
Details
Generates random variates from the Student t distribution.
Student T variates are generated by inverting uniform(0,1) variates
produced either by stats::runif
(if stream
is
NULL
) or by rstream::rstream.sample
(if stream
is not NULL
).
In either case, stats::qt
is used to
invert the uniform(0,1) variate(s).
In this way, using vt
provides a monotone and synchronized
binomial variate generator, although not particularly fast.
The stream indicated must be an integer between 1 and 25 inclusive.
The t-distribution with df
= v
degrees of freedom has density
f(x) = \frac{\Gamma((v+1)/2)}{\sqrt{v\pi} \
\Gamma(v/2)} \ (1 + x^2/v)^{-(v+1)/2}
for all real x
. It has mean 0 (for v > 1
) and variance
v/(v-2)
(for v > 2
).
The general non-central t with parameters (\nu, \delta)
=
(df, ncp)
is defined as the distribution of
T_{\nu}(\delta) := (U + \delta) \ / \ \sqrt{(V/\nu)}
where U
and V
are
independent random variables, U \sim \mathcal{N}(0,1)
and V \sim \chi^2(\nu)
.
Value
If asList
is FALSE (default), return a vector of random variates.
Otherwise, return a list with components suitable for visualizing inversion, specifically:
u |
A vector of generated U(0,1) variates |
x |
A vector of Student t random variates |
quantile |
Parameterized quantile function |
text |
Parameterized title of distribution |
Author(s)
Barry Lawson (blawson@bates.edu),
Larry Leemis (leemis@math.wm.edu),
Vadim Kudlay (vkudlay@nvidia.com)
See Also
rstream
, set.seed
,
stats::runif
Examples
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qt
vt(3, df = 3, ncp = 2)
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qt
vt(3, 2, stream = 1)
vt(3, 2, stream = 2)
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qt
vt(1, 2, stream = 1)
vt(1, 2, stream = 2)
vt(1, 2, stream = 1)
vt(1, 2, stream = 2)
vt(1, 2, stream = 1)
vt(1, 2, stream = 2)
set.seed(8675309)
variates <- vt(100, 2, stream = 1)
set.seed(8675309)
variates <- vt(100, 2, stream = 1, antithetic = TRUE)
Variate Generation for Uniform Distribution
Description
Variate Generation for Uniform Distribution
Usage
vunif(n, min = 0, max = 1, stream = NULL, antithetic = FALSE, asList = FALSE)
Arguments
n |
number of observations |
min |
lower limit of distribution (default 0) |
max |
upper limit of distribution (default 1) |
stream |
if |
antithetic |
if |
asList |
if |
Details
Generates random variates from the uniform distribution.
Uniform variates are generated by inverting uniform(0,1) variates
produced either by stats::runif
(if stream
is
NULL
) or by rstream::rstream.sample
(if stream
is not NULL
).
In either case, stats::qunif
is used to
invert the uniform(0,1) variate(s).
In this way, using vunif
provides a monotone and synchronized
binomial variate generator, although not particularly fast.
The stream indicated must be an integer between 1 and 25 inclusive.
The uniform distribution has density
\deqn{f(x) = \frac{1}{max-min}}{ f(x) = 1/(max-min)}
for min \le x \le max
.
Value
If asList
is FALSE (default), return a vector of random variates.
Otherwise, return a list with components suitable for visualizing inversion, specifically:
u |
A vector of generated U(0,1) variates |
x |
A vector of uniform random variates |
quantile |
Parameterized quantile function |
text |
Parameterized title of distribution |
Author(s)
Barry Lawson (blawson@bates.edu),
Larry Leemis (leemis@math.wm.edu),
Vadim Kudlay (vkudlay@nvidia.com)
See Also
rstream
, set.seed
,
stats::runif
Examples
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qunif
vunif(3, min = -2, max = 2)
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qunif
vunif(3, 0, 10, stream = 1)
vunif(3, 0, 10, stream = 2)
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qunif
vunif(1, 0, 10, stream = 1)
vunif(1, 0, 10, stream = 2)
vunif(1, 0, 10, stream = 1)
vunif(1, 0, 10, stream = 2)
vunif(1, 0, 10, stream = 1)
vunif(1, 0, 10, stream = 2)
set.seed(8675309)
variates <- vunif(100, 0, 10, stream = 1)
set.seed(8675309)
variates <- vunif(100, 0, 10, stream = 1, antithetic = TRUE)
Variate Generation for Weibull Distribution
Description
Variate Generation for Weibull Distribution
Usage
vweibull(
n,
shape,
scale = 1,
stream = NULL,
antithetic = FALSE,
asList = FALSE
)
Arguments
n |
number of observations |
shape |
Shape parameter |
scale |
Scale parameter (default 1) |
stream |
if |
antithetic |
if |
asList |
if |
Details
Generates random variates from the Weibull distribution.
Weibull variates are generated by inverting uniform(0,1) variates
produced either by stats::runif
(if stream
is
NULL
) or by rstream::rstream.sample
(if stream
is not NULL
).
In either case, stats::qweibull
is used to
invert the uniform(0,1) variate(s).
In this way, using vweibull
provides a monotone and synchronized
binomial variate generator, although not particularly fast.
The stream indicated must be an integer between 1 and 25 inclusive.
The Weibull distribution with parameters shape
= a
and
scale
= b
has density
\deqn{f(x) = \frac{a}{b} \left(\frac{x}{b}\right)^{a-1} e^{-(x/b)^a}}{ f(x) = (a/b) (x/b)^(a-1) exp(-(x/b)^a)}
for x \ge 0
, a > 0
, and b > 0
.
Value
If asList
is FALSE (default), return a vector of random variates.
Otherwise, return a list with components suitable for visualizing inversion, specifically:
u |
A vector of generated U(0,1) variates |
x |
A vector of Weibull random variates |
quantile |
Parameterized quantile function |
text |
Parameterized title of distribution |
Author(s)
Barry Lawson (blawson@bates.edu),
Larry Leemis (leemis@math.wm.edu),
Vadim Kudlay (vkudlay@nvidia.com)
See Also
rstream
, set.seed
,
stats::runif
Examples
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qweibull
vweibull(3, shape = 2, scale = 1)
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qweibull
vweibull(3, 2, 1, stream = 1)
vweibull(3, 2, 1, stream = 2)
set.seed(8675309)
# NOTE: following inverts rstream::rstream.sample using stats::qweibull
vweibull(1, 2, 1, stream = 1)
vweibull(1, 2, 1, stream = 2)
vweibull(1, 2, 1, stream = 1)
vweibull(1, 2, 1, stream = 2)
vweibull(1, 2, 1, stream = 1)
vweibull(1, 2, 1, stream = 2)
set.seed(8675309)
variates <- vweibull(100, 2, 1, stream = 1)
set.seed(8675309)
variates <- vweibull(100, 2, 1, stream = 1, antithetic = TRUE)