Documentation Center

  • Trial Software
  • Product Updates


Johnson system random numbers


r = johnsrnd(quantiles,m,n)
r = johnsrnd(quantiles)
[r,type] = johnsrnd(...)
[r,type,coefs] = johnsrnd(...)


r = johnsrnd(quantiles,m,n) returns an m-by-n matrix of random numbers drawn from the distribution in the Johnson system that satisfies the quantile specification given by quantiles. quantiles is a four-element vector of quantiles for the desired distribution that correspond to the standard normal quantiles [–1.5 –0.5 0.5 1.5]. In other words, you specify a distribution from which to draw random values by designating quantiles that correspond to the cumulative probabilities [0.067 0.309 0.691 0.933]. quantiles may also be a 2-by-4 matrix whose first row contains four standard normal quantiles, and whose second row contains the corresponding quantiles of the desired distribution. The standard normal quantiles must be spaced evenly.

    Note:   Because r is a random sample, its sample quantiles typically differ somewhat from the specified distribution quantiles.

r = johnsrnd(quantiles) returns a scalar value.

r = johnsrnd(quantiles,m,n,...) or r = johnsrnd(quantiles,[m,n,...]) returns an m-by-n-by-... array.

[r,type] = johnsrnd(...) returns the type of the specified distribution within the Johnson system. type is 'SN', 'SL', 'SB', or 'SU'. Set m and n to zero to identify the distribution type without generating any random values.

The four distribution types in the Johnson system correspond to the following transformations of a normal random variate:

  • 'SN' — Identity transformation (normal distribution)

  • 'SL' — Exponential transformation (lognormal distribution)

  • 'SB' — Logistic transformation (bounded)

  • 'SU' — Hyperbolic sine transformation (unbounded)

[r,type,coefs] = johnsrnd(...) returns coefficients coefs of the transformation that defines the distribution. coefs is [gamma, eta, epsilon, lambda]. If z is a standard normal random variable and h is one of the transformations defined above, r = lambda*h((z-gamma)/eta)+epsilon is a random variate from the distribution type corresponding to h.


expand all

Generate Random Samples Using the Johnson System

This example shows several different approaches to using the Johnson system of flexible distribution families to generate random numbers and fit a distribution to sample data.

Generate random values with longer tails than a standard normal.

rng('default');  % For reproducibility
r = johnsrnd([-1.7 -.5 .5 1.7],1000,1);

Generate random values skewed to the right.

r = johnsrnd([-1.3 -.5 .5 1.7],1000,1);

Generate random values that match some sample data well in the right-hand tail.

load carbig;
qnorm = [.5 1 1.5 2];
q = quantile(Acceleration, normcdf(qnorm));
r = johnsrnd([qnorm;q],1000,1);
ans =

   16.7000   18.2086   19.5376   21.7263
   16.6986   18.2220   19.9078   22.0918

Determine the distribution type and the coefficients.

[r,type,coefs] = johnsrnd([qnorm;q],0)
r =


type =


coefs =

    1.0920    0.5829   18.4382    1.4494

More About

See Also


Was this topic helpful?