DiscreteRandomVariable

class probnum.random_variables.DiscreteRandomVariable(shape, dtype, random_state=None, parameters=None, sample=None, in_support=None, pmf=None, logpmf=None, cdf=None, logcdf=None, quantile=None, mode=None, median=None, mean=None, cov=None, var=None, std=None, entropy=None, as_value_type=None)

Bases: probnum.random_variables.RandomVariable

Random variable with countable range.

Discrete random variables map to a countable set. Typical examples are the natural numbers or integers.

Parameters
  • shape (Union[Integral, Iterable[Integral]]) – Shape of realizations of this random variable.

  • dtype (Union[dtype, str]) – Data type of realizations of this random variable. If object will be converted to numpy.dtype.

  • random_state (Union[RandomState, Generator, None]) – Random state of the random variable. If None (or np.random), the global numpy.random state is used. If integer, it is used to seed the local RandomState instance.

  • parameters (Optional[Dict[str, Any]]) – Parameters of the distribution of the random variable.

  • sample (Optional[Callable[[Union[Integral, Iterable[Integral]]], ~ValueType]]) – Callable implementing sampling from the random variable.

  • in_support (Optional[Callable[[~ValueType], bool]]) – Callable checking whether the random variable takes value x with non-zero probability, i.e. if x is in the support of its distribution.

  • pmf (Optional[Callable[[~ValueType], float64]]) – Probability mass function of the random variable.

  • logpmf (Optional[Callable[[~ValueType], float64]]) – Log-transformed probability mass function of the random variable.

  • cdf (Optional[Callable[[~ValueType], float64]]) – Cumulative distribution function of the random variable.

  • logcdf (Optional[Callable[[~ValueType], float64]]) – Log-transformed cumulative distribution function of the random variable.

  • quantile (Optional[Callable[[Real], ~ValueType]]) – Quantile function of the random variable.

  • mode (Optional[Callable[[], ~ValueType]]) – Mode of the random variable. Value of the random variable at which pmf() takes its maximal value.

  • mean (Optional[Callable[[], ~ValueType]]) – Expected value of the random variable.

  • cov (Optional[Callable[[], ~ValueType]]) – Covariance of the random variable.

  • var (Optional[Callable[[], ~ValueType]]) – (Element-wise) variance of the random variable.

  • std (Optional[Callable[[], ~ValueType]]) – (Element-wise) standard deviation of the random variable.

  • entropy (Optional[Callable[[], float64]]) – Shannon entropy \(H(X)\) of the random variable.

  • as_value_type (Optional[Callable[[Any], ~ValueType]]) –

    Function which can be used to transform user-supplied arguments, interpreted as realizations of this random variable, to an easy-to-process, normalized format. Will be called internally to transform the argument of functions like in_support(), cdf() and logcdf(), pmf() and logpmf(), and potentially by similar functions in subclasses.

    For instance, this method is useful if (log) cdf() and (log) pmf() both only work on numpy.float_ arguments, but we still want the user to be able to pass Python float. Then as_value_type() should be set to something like lambda x: np.float64(x).

See also

ContinuousRandomVariable

A random variable with uncountably infinite range.

Examples

>>> # Create a custom categorical random variable
>>> import numpy as np
>>>
>>> # Distribution parameters
>>> support = np.array([-1, 0, 1])
>>> p = np.array([0.2, 0.5, 0.3])
>>> parameters_categorical = {
...     "support" : support,
...     "p" : p}
>>>
>>> # Sampling function
>>> def sample_categorical(size=()):
...     return np.random.choice(a=support, size=size, p=p)
>>>
>>> # Probability mass function
>>> def pmf_categorical(x):
...     idx = np.where(x == support)[0]
...     if len(idx) > 0:
...         return p[idx]
...     else:
...         return 0.0
>>>
>>> # Create custom random variable
>>> x = DiscreteRandomVariable(
...       shape=(),
...       dtype=np.dtype(np.int64),
...       parameters=parameters_categorical,
...       sample=sample_categorical,
...       pmf=pmf_categorical,
...       mean=lambda : np.float64(0),
...       median=lambda : np.float64(0),
...       )
>>>
>>> # Sample from new random variable
>>> np.random.seed(42)
>>> x.sample(3)
array([0, 1, 1])
>>> x.pmf(2)
0.0
>>> x.mean
0.0

Attributes Summary

T

Transpose the random variable.

cov

Covariance \(\operatorname{Cov}(X) = \mathbb{E}((X-\mathbb{E}(X))(X-\mathbb{E}(X))^\top)\) of the random variable.

dtype

Data type of (elements of) a realization of this random variable.

entropy

Information-theoretic entropy \(H(X)\) of the random variable.

mean

Mean \(\mathbb{E}(X)\) of the random variable.

median

Median of the random variable.

median_dtype

The dtype of the median.

mode

Mode of the random variable.

moment_dtype

The dtype of any (function of a) moment of the random variable, e.g.

ndim

Number of dimensions of realizations of the random variable.

parameters

Parameters of the associated probability distribution.

random_state

Random state of the random variable.

shape

Shape of realizations of the random variable.

size

Size of realizations of the random variable, defined as the product over all components of shape().

std

Standard deviation of the random variable.

var

Variance \(\operatorname{Var}(X) = \mathbb{E}((X-\mathbb{E}(X))^2)\) of the random variable.

Methods Summary

cdf(x)

Cumulative distribution function.

in_support(x)

Check whether the random variable takes value x with non-zero probability, i.e. if x is in the support of its distribution.

infer_median_dtype(value_dtype)

Infer the dtype of the median.

infer_moment_dtype(value_dtype)

Infer the dtype of any moment.

logcdf(x)

Log-cumulative distribution function.

logpmf(x)

Natural logarithm of the probability mass function.

pmf(x)

Probability mass function.

quantile(p)

Quantile function.

reshape(newshape)

Give a new shape to a random variable.

sample([size])

Draw realizations from a random variable.

transpose(*axes)

Transpose the random variable.

Attributes Documentation

T

Transpose the random variable.

Parameters

axes (int) – See documentation of numpy.ndarray.transpose().

Return type

RandomVariable

cov

Covariance \(\operatorname{Cov}(X) = \mathbb{E}((X-\mathbb{E}(X))(X-\mathbb{E}(X))^\top)\) of the random variable.

To learn about the dtype of the covariance, see moment_dtype.

dtype

Data type of (elements of) a realization of this random variable.

Return type

dtype

entropy

Information-theoretic entropy \(H(X)\) of the random variable.

mean

Mean \(\mathbb{E}(X)\) of the random variable.

To learn about the dtype of the mean, see moment_dtype.

median

Median of the random variable.

To learn about the dtype of the median, see median_dtype.

median_dtype

The dtype of the median.

It will be set to the dtype arising from the multiplication of values with dtypes dtype and numpy.float_. This is motivated by the fact that, even for discrete random variables, e.g. integer-valued random variables, the median might lie in between two values in which case these values are averaged. For example, a uniform random variable on \(\{ 1, 2, 3, 4 \}\) will have a median of \(2.5\).

Return type

dtype

mode

Mode of the random variable.

moment_dtype

The dtype of any (function of a) moment of the random variable, e.g. its mean, cov, var, or std. It will be set to the dtype arising from the multiplication of values with dtypes dtype and numpy.float_. This is motivated by the mathematical definition of a moment as a sum or an integral over products of probabilities and values of the random variable, which are represented as using the dtypes numpy.float_ and dtype, respectively.

Return type

dtype

ndim

Number of dimensions of realizations of the random variable.

parameters

Parameters of the associated probability distribution.

The parameters of the probability distribution of the random variable, e.g. mean, variance, scale, rate, etc. stored in a dict.

Return type

Dict[str, Any]

random_state

Random state of the random variable.

This attribute defines the RandomState object to use for drawing realizations from this random variable. If None (or np.random), the global np.random state is used. If integer, it is used to seed the local RandomState instance.

Return type

Union[RandomState, Generator]

shape

Shape of realizations of the random variable.

Return type

Tuple[int, …]

size

Size of realizations of the random variable, defined as the product over all components of shape().

std

Standard deviation of the random variable.

To learn about the dtype of the standard deviation, see moment_dtype.

var

Variance \(\operatorname{Var}(X) = \mathbb{E}((X-\mathbb{E}(X))^2)\) of the random variable.

To learn about the dtype of the variance, see moment_dtype.

Methods Documentation

cdf(x)

Cumulative distribution function.

Parameters

x (~ValueType) – Evaluation points of the cumulative distribution function. The shape of this argument should be (..., S1, ..., SN), where (S1, ..., SN) is the shape of the random variable. The cdf evaluation will be broadcast over all additional dimensions.

Return type

float64

in_support(x)

Check whether the random variable takes value x with non-zero probability, i.e. if x is in the support of its distribution.

Parameters

x (~ValueType) – Input value.

Return type

bool

static infer_median_dtype(value_dtype)

Infer the dtype of the median.

Set the dtype to the dtype arising from the multiplication of values with dtypes dtype and numpy.float_. This is motivated by the fact that, even for discrete random variables, e.g. integer-valued random variables, the median might lie in between two values in which case these values are averaged. For example, a uniform random variable on \(\{ 1, 2, 3, 4 \}\) will have a median of \(2.5\).

Parameters

value_dtype (Union[dtype, str]) – Dtype of a value.

Return type

dtype

static infer_moment_dtype(value_dtype)

Infer the dtype of any moment.

Infers the dtype of any (function of a) moment of the random variable, e.g. its mean, cov, var, or std. Returns the dtype arising from the multiplication of values with dtypes dtype and numpy.float_. This is motivated by the mathematical definition of a moment as a sum or an integral over products of probabilities and values of the random variable, which are represented as using the dtypes numpy.float_ and dtype, respectively.

Parameters

value_dtype (Union[dtype, str]) – Dtype of a value.

Return type

dtype

logcdf(x)

Log-cumulative distribution function.

Parameters

x (~ValueType) – Evaluation points of the cumulative distribution function. The shape of this argument should be (..., S1, ..., SN), where (S1, ..., SN) is the shape of the random variable. The logcdf evaluation will be broadcast over all additional dimensions.

Return type

float64

logpmf(x)[source]

Natural logarithm of the probability mass function.

Parameters

x (~ValueType) – Evaluation points of the log-probability mass function. The shape of this argument should be (..., S1, ..., SN), where (S1, ..., SN) is the shape of the random variable. The logpmf evaluation will be broadcast over all additional dimensions.

Return type

float64

pmf(x)[source]

Probability mass function.

Computes the probability of the random variable being equal to the given value. For a random variable \(X\) it is defined as \(p_X(x) = P(X = x)\) for a probability measure \(P\).

Probability mass functions are the discrete analogue of probability density functions in the sense that they are the Radon-Nikodym derivative of the pushforward measure \(P \circ X^{-1}\) defined by the random variable with respect to the counting measure.

Parameters

x (~ValueType) – Evaluation points of the probability mass function. The shape of this argument should be (..., S1, ..., SN), where (S1, ..., SN) is the shape of the random variable. The pmf evaluation will be broadcast over all additional dimensions.

Return type

float64

quantile(p)

Quantile function.

The quantile function \(Q \colon [0, 1] \to \mathbb{R}\) of a random variable \(X\) is defined as \(Q(p) = \inf\{ x \in \mathbb{R} \colon p \le F_X(x) \}\), where \(F_X \colon \mathbb{R} \to [0, 1]\) is the cdf() of the random variable. From the definition it follows that the quantile function always returns values of the same dtype as the random variable. For instance, for a discrete distribution over the integers, the returned quantiles will also be integers. This means that, in general, \(Q(0.5)\) is not equal to the median as it is defined in this class. See https://en.wikipedia.org/wiki/Quantile_function for more details and examples.

Return type

~ValueType

reshape(newshape)

Give a new shape to a random variable.

Parameters

newshape (Union[Integral, Iterable[Integral]]) – New shape for the random variable. It must be compatible with the original shape.

Return type

RandomVariable

sample(size=())

Draw realizations from a random variable.

Parameters

size (Union[Integral, Iterable[Integral]]) – Size of the drawn sample of realizations.

Return type

~ValueType

transpose(*axes)

Transpose the random variable.

Parameters

axes (int) – See documentation of numpy.ndarray.transpose().

Return type

RandomVariable