Generate a normally distributed random variate with given mean and standard deviation.
Modulemwc-random-0.15.2.0Haskell2010
System.Random.MWC.Distributions
Pseudo-random number generation for non-uniform distributions.
- 17 values
- Packagemwc-random-0.15.2.0
- Exports17
- LanguageHaskell2010
- LicenceBSD-2-Clause
- SourceDistributions.hs
Variates: non-uniformly distributed values
0 declarationsContinuous distributions
Generate a normally distributed random variate with zero mean and unit variance.
The implementation uses Doornik's modified ziggurat algorithm. Compared to the ziggurat algorithm usually used, this is slower, but generates more independent variates that pass stringent tests of randomness.
Generate an exponentially distributed random variate.
truncatedExp :: StatefulGen g m=> DoubleScale parameter
-> (Double, Double)Range to which distribution is truncated. Values may be negative.
-> gGenerator.
-> m Double
Generate truncated exponentially distributed random variate.
gamma :: StatefulGen g m=> DoubleShape parameter
-> DoubleScale parameter
-> gGenerator
-> m Double
Random variate generator for gamma distribution.
Random variate generator for the chi square distribution.
Random variate generator for Beta distribution
Discrete distribution
categorical :: (StatefulGen g m, Vector v Double)=> v DoubleList of weights [>0]
-> gGenerator
-> m Int
Random variate generator for categorical distribution.
Note that if you need to generate a lot of variates functions System.Random.MWC.CondensedTable will offer better performance. If only few is needed this function will faster since it avoids costs of setting up table.
logCategorical :: (StatefulGen g m, Vector v Double)=> v DoubleList of logarithms of weights
-> gGenerator
-> m Int
Random variate generator for categorical distribution where the weights are in the log domain. It's implemented in terms of categorical.
Random variate generator for the geometric distribution, computing the number of failures before success. Distribution's support is [0..].
Random variate generator for geometric distribution for number of trials. Distribution's support is [1..] (i.e. just geometric0 shifted by 1).
bernoulli :: StatefulGen g m=> DoubleProbability of success (returning True)
-> gGenerator
-> m Bool
Random variate generator for Bernoulli distribution
binomial :: StatefulGen g m=> IntNumber of trials, must be positive.
-> DoubleProbability of success
p \in [0,1]-> gGenerator
-> m Int
Random variate generator for Binomial distribution. Will throw exception when parameters are out range.
The probability of getting exactly k successes in n trials is given by the probability mass function:
f(k;n,p) = \Pr(X = k) = \binom n k p^k(1-p)^{n-k}
Multivariate
dirichlet :: (StatefulGen g m, Traversable t)=> t Doublecontainer of parameters
-> gGenerator
-> m (t Double)
Random variate generator for Dirichlet distribution
Permutations
3 declarationsRandom variate generator for uniformly distributed permutations. It returns random permutation of vector [0 .. n-1].
This is the Fisher-Yates shuffle
Random variate generator for a uniformly distributed shuffle (all shuffles are equiprobable) of a vector. It uses Fisher-Yates shuffle algorithm.
In-place uniformly distributed shuffle (all shuffles are equiprobable)of a vector.
References
0 declarationsDoornik, J.A. (2005) An improved ziggurat method to generate normal random samples. Mimeo, Nuffield College, University of Oxford. http://www.doornik.com/research/ziggurat.pdf
Thomas, D.B.; Leong, P.G.W.; Luk, W.; Villasenor, J.D. (2007). Gaussian random number generators. ACM Computing Surveys 39(4). http://www.cse.cuhk.edu.hk/~phwl/mt/public/archives/papers/grng_acmcs07.pdf
Kachitvichyanukul, V. and Schmeiser, B. W. Binomial Random Variate Generation. Communications of the ACM, 31, 2 (February, 1988) 216. https://dl.acm.org/doi/pdf/10.1145/42372.42381 Here's an example of how the algorithm's sampling regions look Something