Class MarsagliaTsangWangDiscreteSampler.Binomial

java.lang.Object
org.apache.commons.rng.sampling.distribution.MarsagliaTsangWangDiscreteSampler.Binomial
Enclosing class:
MarsagliaTsangWangDiscreteSampler

public static final class MarsagliaTsangWangDiscreteSampler.Binomial extends Object
Create a sampler for the Binomial distribution.
  • Field Details

  • Constructor Details

    • Binomial

      private Binomial()
      Class contains only static methods.
  • Method Details

    • of

      public static SharedStateDiscreteSampler of(UniformRandomProvider rng, int trials, double probabilityOfSuccess)
      Creates a sampler for the Binomial distribution.

      Any probability less than 2-31 will not be observed in samples.

      Storage requirements depend on the tabulated probability values. Example storage requirements are listed below (in kB).

                p
       trials   0.5    0.1   0.01  0.001
          4    0.06   0.63   0.44   0.44
         16    0.69   1.14   0.76   0.44
         64    4.73   2.40   1.14   0.51
        256    8.63   5.17   1.89   0.82
       1024   31.12   9.45   3.34   0.89
       

      The method requires that the Binomial distribution probability at x=0 can be computed. This will fail when (1 - p)^trials == 0 which requires trials to be large and/or p to be small. In this case an exception is raised.

      Parameters:
      rng - Generator of uniformly distributed random numbers.
      trials - Number of trials.
      probabilityOfSuccess - Probability of success (p).
      Returns:
      Sampler.
      Throws:
      IllegalArgumentException - if trials < 0 or trials >= 2^16, p is not in the range [0-1], or the probability distribution cannot be computed.
    • validateBinomialDistributionParameters

      private static void validateBinomialDistributionParameters(int trials, double probabilityOfSuccess)
      Validate the Binomial distribution parameters.
      Parameters:
      trials - Number of trials.
      probabilityOfSuccess - Probability of success (p).
      Throws:
      IllegalArgumentException - if trials < 0 or p is not in the range [0-1]
    • createBinomialDistributionSampler

      private static SharedStateDiscreteSampler createBinomialDistributionSampler(UniformRandomProvider rng, int trials, double probabilityOfSuccess)
      Creates the Binomial distribution sampler.

      This assumes the parameters for the distribution are valid. The method will only fail if the initial probability for X=0 is zero.

      Parameters:
      rng - Generator of uniformly distributed random numbers.
      trials - Number of trials.
      probabilityOfSuccess - Probability of success (p).
      Returns:
      Sampler.
      Throws:
      IllegalArgumentException - if the probability distribution cannot be computed.
    • createBinomialDistributionSamplerFromRange

      private static SharedStateDiscreteSampler createBinomialDistributionSamplerFromRange(UniformRandomProvider rng, int trials, double p, boolean useInversion, double p0, int begin, int end)
      Creates the Binomial distribution sampler using only the probability values for X between the begin and the end (inclusive).
      Parameters:
      rng - Generator of uniformly distributed random numbers.
      trials - Number of trials.
      p - Probability of success (p).
      useInversion - Set to true if the probability was inverted.
      p0 - Probability at X=0
      begin - Begin value X for the distribution.
      end - End value X for the distribution.
      Returns:
      Sampler.