Random-variate-generation-examples-work

Random variate generation examples

Introduction

This document is a concise guide for generating random variates with the probability distributions of the Raku package "Statistics::Distributions", [AAp1].

Setup

use Statistics::Distributions;
use Data::Summarizers;
use Text::Plot;

Univariate Distributions

Beta Distribution

Beta distribution is a continuous probability distribution that is defined by two parameters, alpha and beta. The beta distribution is often used to model proportions.

my $beta = BetaDistribution.new(4, 4);
my @res = random-variate($beta, 200);

records-summary(@res);
text-histogram(@res, title => 'Beta Distribution')

Bernoulli Distribution

Bernoulli distribution is a discrete probability distribution that takes the value 1 with probability p and the value 0 with probability 1-p.

my $bernoulli = BernoulliDistribution.new(:p(0.5));
my @res = random-variate($bernoulli, 12);

records-summary(@res);

Discrete Uniform Distribution

Discrete uniform distribution is a discrete probability distribution that takes on a finite number of values with equal probability.

my $discrete_uniform = DiscreteUniformDistribution.new(:min(10), :max(20));
my @res = random-variate($discrete_uniform, 200);

records-summary(@res);
text-list-plot(@res.&tally.kv.rotor(2), title => 'Discrete Uniform Distribution tallies')

Normal Distribution

Normal distribution is a continuous probability distribution that is defined by two parameters, the mean and the standard deviation. The normal distribution is also known as the Gaussian distribution.

my $normal = NormalDistribution.new(:mean(10), :sd(2));
my @res = random-variate($normal, 200);

records-summary(@res);
text-histogram(@res, title => 'Normal Distribution')

Uniform Distribution

Uniform distribution is a continuous probability distribution that is defined by two parameters, the minimum and the maximum. The uniform distribution is also known as the rectangular distribution.

my $uniform = UniformDistribution.new(:min(-10), :max(5));
my @res = random-variate($uniform, 200);

records-summary(@res);
text-histogram(@res, title => 'Uniform Distribution')

Multivariate Distributions

Binormal Distribution

Binormal distribution represents a bivariate normal distribution with mean [μ1, μ2] and covariance matrix [[σ1 ** 2, ρ * σ1 * σ2], [ρ * σ1 * σ2, σ2 **2]].

my $binormal = BinormalDistribution.new([10, 4], [4, 2], 0.5);
my @res = random-variate($binormal, 40);

records-summary(@res, field-names => ['0', '1']);
text-list-plot(@res, width => 60, height => 20, title => 'Binormal Distribution random variates')

Derived Distributions

Mixture Distribution

Mixture distribution is a probability distribution that is a weighted sum of two or more other probability distributions.

my $mixture = MixtureDistribution.new([2, 5], [NormalDistribution.new(3, 4), NormalDistribution.new(16, 5)]);
my @res = random-variate($mixture, 300);

records-summary(@res);
text-histogram(@res, title => 'Mixture Distribution', width => 80)

Product Distribution

Product distribution is a probability distribution that is the product of two or more other probability distributions.

my $product = ProductDistribution.new([NormalDistribution.new(3, 4), NormalDistribution.new(6, 5)]);
my @res = random-variate($product, 60);

records-summary(@res, field-names => ['0', '1']);
text-list-plot(@res, width => 60, height => 20, title => "Product Distribution random variates")

References

[AAp1] Anton Antonov Statistics::Distributions Raku package, (2024), GitHub/antononcube.

Statistics::Distributions v0.1.7

Raku package for statistical distributions and related random variates generations.

Authors

  • Anton Antonov

License

Artistic-2.0

Dependencies

Math::SpecialFunctions

Test Dependencies

Provides

  • Statistics::Distributions
  • Statistics::Distributions::Defined
  • Statistics::Distributions::Utilities

The Camelia image is copyright 2009 by Larry Wall. "Raku" is trademark of the Yet Another Society. All rights reserved.