## Distributions Factors

This page lists the built-in methods for creating random variables with various distribution factors.  In many cases, you can pass in random variables as arguments e.g. Variable<int> instead of int. For compactness, this is not shown in the syntax below.

These methods provide a convenient short alternative to using Variable<T>.Factor and passing in the factor method, as described on this page.  Note also that you can create a random variable with any prior distribution using Variable.Random(IDistribution<T> dist).  This is useful if you already have a distribution object, such as the posterior from a previous inference, and wish to create a new random variable with that distribution as its prior.

#### Discrete Distributions

Distributions where the random variable can take one of a discrete set of states. Where the discrete set of states is indexed by a Range, it should replace a size argument or be passed as an additional parameter.

 Distribution Syntax Description Bernoulli Variable.Bernoulli(double probTrue) Creates a boolean random variable from the probability of being true P(true). Variable.BernoulliFromLogOdds(double logOdds) Creates a boolean random variable from the log odds i.e. log P(true)/P(false).  Equivalent to Variable.Bernoulli(Variable.Logistic(logOdds)). Discrete Variable.Discrete(double[] probs)Variable.Discrete(Vector probs) Creates an int random variable from supplied array or vector of probabilities (which must add up to 1). The variable can take values between 0 and N-1 where N is the length of the array/vector. Variable.DiscreteFromLogProbs(double[] logProbs) Creates an int random variable from supplied array or vector of log probabilities.  Equivalent to Variable.Discrete(Variable.Softmax(logProbs)). Variable.DiscreteUniform(int size) Creates an int random variable which can take values from 0 to size-1 with equal probability. Discrete enum Variable.EnumDiscrete(double[] probs) Variable.EnumDiscrete(Vector probs) Creates an enum random variable where the probability of each enum value is given by the specified array or vector.  TEnum specifies the enum type. Variable.EnumUniform() Creates an enum random variable with equal probability of taking each possible value of the enumeration.  TEnum specifies the enum type. Binomial Variable.Binomial(double probSuccess, int trialCount) Creates an int random variable which has a Binomial distribution with the specified probability of success per trial and number of trials. Multinomial Variable.Multinomial(Vector probs, int trialCount) Creates an int[] random variable array which has a Multinomial distribution with the specified array of probabilities and number of trials. Poisson Variable.Poisson(double mean) Creates an int random variable which has a Poisson distribution with the specified mean. DiscreteChar Variable.Char(Vector probs) Creates a char random variable from a supplied vector of character probabilities. The probabilities much add up to 1 and be provided for every possible character value, from char.MinValue to char.MaxValue. Variable.CharUniform() Variable.CharLower() Variable.CharUpper() Variable.CharLetter() Variable.CharDigit() Variable.CharLetterOrDigit() Variable.CharWord() Variable.CharNonWord() Creates a char random variable having a uniform distribution over all possible (lowercase, uppercase, letters, digits, letters and digits, word, non-word) characters.

#### Continuous Distributions

Distributions where the random variable can take one of a continuous range of values.

 Distribution Syntax Description Beta Variable.Beta(double trueCount, double falseCount) Creates a double random variable with a Beta distribution with the specified counts. Variable.BetaFromMeanAndVariance(double mean, double variance) Creates a double random variable with a Beta distribution of the specified mean and variance. Gaussian Variable.GaussianFromMeanAndPrecision(double mean, double precision) Creates a double random variable with a Gaussian distribution of the specified mean and precision (inverse variance). Variable.GaussianFromMeanAndVariance(double mean, double variance) Creates a double random variable with a Gaussian distribution of the specified mean and variance. Gamma Variable.GammaFromShapeAndScale(double shape, double scale) Creates a positive double random variable with a Gamma distribution of the specified shape and scale. Variable.GammaFromShapeAndRate(double shape, double rate) Creates a positive double random variable with a Gamma distribution of the specified shape and rate. We now support both stochastic shape and rate, but the support for stochastic shape is experimental. Variable.GammaFromMeanAndVariance(double mean, double variance) Creates a positive double random variable with a Gamma distribution of the specified mean and variance.

#### Multivariate Distributions

Distributions where the random variable is multivariate.

 Distribution Syntax Description Dirichlet Variable.Dirichlet(double[] u) Variable.Dirichlet(Vector v) Creates a Vector random variable with a Dirichlet distribution with the specified array or vector of pseudo-counts. Variable.DirichletUniform(int dimension) Creates a Vector random variable with a Dirichlet distribution whose pseudo-counts are all set to 1. Wishart Variable.WishartFromShapeAndScale(double shape, PositiveDefiniteMatrix scale) Creates a PositiveDefiniteMatrix random variable with a Wishart distribution with the specified shape parameter and scale matrix.

#### Sequence Distributions

Distributions where the random variable can take one of a set of sequences of a certain type, like strings.

 Distribution Syntax Description StringDistribution Variable.StringUniform() Creates a uniformly distributed string random variable. The distribution of the variable is improper. Variable.StringLower() Variable.StringLower(int minLength, int maxLength) Variable.StringUpper() Variable.StringUpper(int minLength, int maxLength) Variable.StringLetters() Variable.StringLetters(int minLength, int maxLength) Variable.StringDigits() Variable.StringDigits(int minLength, int maxLength) Variable.StringLettersOrDigits() Variable.StringLettersOrDigits(int minLength, int maxLength) Variable.StringWhitespace() Variable.StringWhitespace(int minLength, int maxLength) Variable.StringWord() Variable.StringWord(int minLength, int maxLength) Variable.StringNonWord() Variable.StringNonWord(int minLength, int maxLength) Creates a string random variable uniformly distributed over all either non-empty strings or strings with length in given bounds, containing lowercase (uppercase, letters, digits, letters and digits, word, non-word) characters only. If the upper length bound is not specified, the distribution of the variable is improper. Variable.StringCapitalized() Variable.StringCapitalized(int minLength, int maxLength) Creates a string random variable uniformly distributed over all strings starting from an uppercase letter, followed by one or more lowercase letters. If the upper length bound is not specified, the distribution of the variable is improper. Variable.StringOfLength(int length) Variable.StringOfLength(int length, DiscreteChar allowedCharacters) Creates a string random variable uniformly distributed over all strings of given length. String characters are restricted to be non zero probability characters under a given character distribution, if it is provided. Variable.String(int minLength, int maxLength) Variable.String(int minLength, int maxLength, DiscreteChar allowedCharacters) Creates a string random variable uniformly distributed over all strings with length in given bounds. String characters are restricted to be non zero probability characters under a given character distribution, if it is provided. If the upper length bound is not specified, the distribution of the variable is improper.