## RandomVariables.jl

A Julia package for random variables, some transformations and probabilities
Author ManuelStapper
Popularity
15 Stars
Updated Last
11 Months Ago
Started In
June 2022

# RandomVariables

A Julia package for random variables and probabilities as an add-on to the Distributions.jl package. Scope of the package:

• Defining a random variable `X = RV(Normal(0, 1)); Y = RV(Poisson(4))`
• Transformation of random variables: `Z = log(Y + 1)`
• Convenient probability computation: `P(X < 2)`
• Combination of events: `A = (X < 2) & (Y ≥ 2); B = (X ≤ 5) & (Y > 0)`
• Defining conditional events: `P(A|B)`

#### Installation

Distributions.jl package must be installed and loaded to use RandomVariables.jl

``````julia> import Pkg
julia> using RandomVariables, Distributions
``````

### Random variables

To define a random variable, the function `RV()` takes any univariate distribution from the Distributions.jl package and equips it with an ID.

``````X = RV(Normal())
Y = RV(Poisson(4))
``````

#### Transformation of random variables

Random variables can be transformed. Say you transform a random variable X by a function h(x), i.e. Z = f(X). The object `RVtransformed` stores the distribution of the original random variable X, its ID, the function h and the inverse of the transformation function. Implemented transformations for a real valued `y` are: `X + y`, `X - y`, `X * y`, `X / y`, `inv(X)`, `abs(X)`, `exp(X)`, `log(X)`, `sqrt(X)` and `X^y`.

### Events

To compute probabilities, events can be defined as a combination of independent random variables and bounding intervals. For example `X > 1` creates an event with random variable X and the interval (1, ∞). The bounding intervals can be closed [a, b], open (a, b) or semi-closed [a, b) or (a, b]. Two events can be combined with operators

• `&` : both events occur
• `∨` : Either one event occurs or both
• `\` : Left event occurs but not the right event
• `⊻` : One event occurs but not the other
• `!` : The complementary event

Examples for events:

``````A = X > 1
B = X ≤ 3
C = X ≤ 0
``````
• A & B : (1, 3]
• A ∨ C : (-∞, 0] ∪ (1, ∞)
• A \ B : (3, ∞)
• A ⊻ B : (-∞, 1] ∪ (3, ∞)
• !(A) : (-∞, 1]

Events can include multiple independent random variables. For n variables, the bounding intervals will then be n dimensional rectangles (boxes). For example `(X < 1) & (X ≥ 0) & (Y ≤ 1) & (Y > 0)` creates an event with random variables X and Y with bounding rectangle [0, 1) × (0, 1].

#### Conditional Events

With two events, conditional events can be defined. A|B gives the event that event A occurs given that B occurs. The random variables in A do not necessarily need to match the random variables in B.

Example:

``````A = (X > 1) & (log(Y + 1) ≤ 1)
B = (X < 5)
P(A|B)
``````

### Moments

Mean, variance, skewness and kurtosis functions from the Distributions.jl package can also be applied to random variables. Further, a short notation for the mean `E(X)` is added. The mean of a transformed random variable is computed by numerical integration / summation.

Example

``````P((X - E(X))^2 < 3)
E(log(Y + 1))
``````

### Outlook

#### Short term

• A more detailed documentation
• Conditional moments, i.e. `E(X | X > 1)`
• Shift to Intervals.jl (?)
• Minimum and maximum, i.e. `Z = minimum(X, Y)`
• Transfer more functionalities of Distributions.jl to random variables?
• Plotting functions?

#### Long term

• More arithmetic on random variables: `X + Y`, ...
• Inclusion of dependent random variables in general

### References

Distributions.jl package

### Used By Packages

No packages found.