Common distributions in Julia, Python and R
Please report errors on GitHub - sylvaticus/commonDistributionsInJuliaPythonR: Common probability distributions in Julia, Python and R
Loading packages
- Julia:
using Distributions
- Python:
from scipy import stats
- R:
library(extraDistr)
Discrete distributions
- Discrete Uniform : Complete ignorance
- Bernoulli : Single binary trial
- Binomial : Number of successes in independent binary trials
- Categorical : Individual categorical trial
- Multinomial : Number of successes of the various categories in independent multinomial trials
- Geometric : Number of independent binary trials until (and including) the first success (discrete time to first success)
- Hypergeometric : Number of successes sampling without replacement from a bin with given initial number of items representing successes
- Multivariate hypergeometric : Number of elements sampled in the various categories from a bin without replacement
- Poisson : Number of independent arrivals in a given period given their average rate per that period length
- Pascal : Number of independent binary trials until (and including) the n-th success (discrete time to n-th success).
Name |
Parameters |
Support |
PMF |
Expectations |
Variance |
CDF |
D. Unif |
a,b ∈ Z with b ≧ a |
x \in \{a,a+1,...,b\} |
\frac{1}{b-a+1} |
\frac{a+b}{2} |
\frac{(b-a)(b-a+2)}{12} |
\frac{x-a+1}{b-a+1} |
Bern |
p ∈ [0,1] |
x ∈ {0,1} |
p^x(1-p)^{1-x} |
p |
p(1-p) |
\sum_{i=0}^x p^i(1-p)^{1-i} |
Bin |
p ∈ [0,1], n in N⁺ |
x \in \{0,...,n\} |
{{n} \choose {x}} p^x(1-p)^{1-x} |
np |
n p(1-p) |
\sum_{i=0}^{x} {{n} \choose {i}} p^i(1-p)^{1-i} |
Cat |
p_1,p_2,...,p_K with p_k \in [0,1] and \sum_{k=1}^K p_k =1 |
x ∈ {1,2,…,K} |
\prod_{k=1}^K p_k^{\mathbb{1}(k=x)} |
|
|
|
Multin |
n, p_1,p_2,...,p_K with p_k \in [0,1], \sum_{k=1}^K p_k =1 and n \in N^+ |
x \in \mathbb{N}_{0}^K |
{{n} \choose {x_1, x_2,...,x_K}} \prod_{k=1}^K p_k^{x_K} |
|
|
|
Geom |
p ∈ [0,1] |
x ∈ N⁺ |
(1-p)^{x-1}p |
\frac{1}{p} |
\frac{1-p}{p^2} |
1-(1-p)^x |
Hyperg |
n_s,n_f, n \in \mathbb{N}_{0} |
x \in \mathbb{N}_{0} with x \leq n_s |
\frac{{n_s \choose x} {n_f \choose n-x} }{ (n_s + n_f) \choose n } |
n \frac{n_s}{n_s+n_f} |
n\frac{n_s}{n_s+n_f}\frac{n_f}{n_s+n_f}\frac{n_s+n_f+n}{n_s+n_f+1} |
|
Multiv hyperg |
n_1,n_2,...,n_K, n with n \in \mathbb{N}_{+}, n_i \in \mathbb{N}_{0} |
x \in \mathbb{N}_{0}^K with x_i \leq n_i ~ \forall i, \sum_{i=1}^K x_i = n |
\frac{\prod_{i=1}^K {n_i \choose x_i} }{ \sum_{i=1}^K n_i \choose n } |
n\frac{n_i}{\sum_{i=1}^K n_i} |
n\frac{\sum_{j=1}^K n_j - n}{\sum_{j=1}^K n_j - 1} \frac{n_i}{\sum_{j=1}^K n_j} \left(1 - \frac{n_i}{\sum_{j=1}^K n_j} \right) |
|
Pois |
λ in R⁺ |
x ∈ N₀ |
\frac{\lambda^xe^{-\lambda}}{x!} |
\lambda |
\lambda |
|
Pasc |
n ∈ N⁺, p in [0,1] |
x in N⁺ |
{x-1 \choose n-1} p^n (1-p)^{x-n} |
\frac{n}{p} |
\frac{n(1-p)}{p^2} |
|
Distribution |
Julia |
Python (stats.[distributionName]) |
R |
Discrete uniform |
DiscreteUniform(lRange,uRange) |
randint(lRange,uRange) |
dunif(lRange,uRange) |
Bernoulli |
Bernoulli(p) |
bernoulli(p) |
bern(p) |
Binomial |
Binomial(n,p) |
binom(n,p) |
binom(n,p) |
Categorical |
Categorical(ps) |
Not Av. |
cat(ps) |
Multinomial |
Multinomial(n, ps) |
multinomial(n, ps) |
mnom(n,ps) |
Geometric |
Geometric(p) |
geom(p) |
geom(p) |
Hypergeometric |
Hypergeometric(nS, nF, nTrials) |
hypergeom(nS+nF,nS,nTrials) |
hyper(nS, nF, nTrias) |
Mv hypergeometric |
Not Av. |
multivariate_hypergeom(initialNByCat,nTrials) |
mvhyper(initialNByCat,nTrials) |
Poisson |
Poisson(rate) |
poisson(rate) |
pois(rate) |
Negative Binomial |
NegativeBinomial(nSucc,p) |
nbinom(nSucc,p) |
nbinom(nSucc,p) |
Continuous distributions
- Uniform complete ignorance, pick at random, all equally likely outcomes
- Exponential waiting time to first event whose rate is λ (continuous time to first success)
- Normal The asymptotic distribution of a sample means
- Erlang Time of the n-th arrival
- Cauchy The ratio of two independent zero-means normal r.v.
- Chi-squared The sum of the squared of iid standard normal r.v.
- T distribution The distribution of a sample means
- F distribution : The ratio of the ratio of two indep Χ² r.v. with their relative parameter
- Beta distribution The Beta distribution
- Gamma distribution Generalisation of the exponential, Erlang and chi-square distributions
Name |
Parameters |
Support |
PMF |
Expectations |
Variance |
CDF |
Unif |
a,b ∈ R with b ≧ a |
x ∈ [a,b] |
\frac{1}{b-a} |
\frac{a+b}{2} |
\frac{(b-a)^2}{12} |
\frac{x-a}{b-a} |
Expo |
λ ∈ R⁺ |
x ∈ R⁺ |
\lambda e^{-\lambda x} |
\frac{1}{\lambda} |
\frac{1}{\lambda^2} |
1-e^{-\lambda x} |
Normal |
μ ∈R, σ² ∈ R⁺ |
x ∈ R |
\frac{1}{\sigma \sqrt{2 \pi}}e^\frac{-(x-\mu)^2}{2\sigma^2} |
\mu |
\sigma^2 |
|
Erlang |
n ∈ N⁺, λ ∈ R⁺ |
x ∈ Rₒ |
\frac{\lambda^n x^{n-1} e^{-\lambda x} }{(n - 1) !} |
\frac{n}{\lambda} |
\frac{n}{\lambda^2} |
|
Cauchy |
x₀ ∈ R (location), γ ∈ R⁺ (scale) |
\frac{1}{\pi \gamma (1+(\frac{x-x_0}{\gamma})^2) } |
|
|
|
|
Chi-sq |
d ∈ N⁺ |
x ∈ R⁺ |
\frac{1}{2^{}\frac{d}{2}\Gamma(\frac{d}{2})} x^{\frac{d}{2})-1}e^{-\frac{x}{2}} |
d |
2d |
|
T |
ν ∈ R⁺ |
x ∈ R |
\frac{ \Gamma(\frac{\nu +1}{2})}{\sqrt{\nu \pi} \Gamma(\frac{\nu}{2})} \left( 1 + \frac{x^2}{\nu} \right)^{- \frac{\nu + 1}{2}} |
|
|
|
F |
d₁ ∈ N⁺ d₂ ∈ N⁺ |
x ∈ R⁺ |
\frac {\sqrt {\frac {(d_1 x)^{d_1} d_2^{d_2} } {(d_1 x + d_2)^{d_1 + d_2} } }} {x \mathrm {B} \left( \frac{d_1}{2},\frac {d_2}{2} \right) } |
\frac{d_2}{d_2 -2} for d_2 > 2 |
\frac{2 d_2^2 (d_1 + d_2 -2)}{d_1 (d_2 -2)^2 (d_2 -4)} for d_2 > 4 |
|
Beta |
α, β ∈ R⁺ |
x ∈ [1,0] |
\frac{1}{B(\alpha,\beta)}x^{\alpha-1}(1-x)^{\beta-1} |
\frac{\alpha}{\alpha+\beta} |
\frac{\alpha \beta}{(\alpha + \beta)^2 (\alpha + \beta + 1)} |
|
Gamma |
α ∈ R⁺ (shape), β ∈ R⁺ (rate) |
x ∈ R⁺ |
\frac{\beta^\alpha}{\Gamma(\alpha)} x^{\alpha-1} e^{-\beta x} |
\frac{\alpha}{\beta} |
\frac{\alpha}{\beta^2} |
|
Beta function : B(\alpha,\beta) = \frac{\Gamma(\alpha)\Gamma(\beta)}{\Gamma(\alpha+\beta)} = \frac{\alpha + \beta}{\alpha \beta}
Gamma function: \Gamma(x)=(x-1)! ~ \forall x \in N
Distribution |
Julia |
Python (stats.[distributionName]) |
R |
Uniform |
Uniform(lRange,uRange) |
uniform(lRange,uRange) |
unif(lRange,uRange) |
Exponential |
Exponential(rate) |
expon(rate) |
exp(rate) |
Normal |
Normal(μ,sqrt(σsq)) |
norm(μ,math.sqrt(σsq)) |
norm(μ,sqrt(σsq)) |
Erlang |
Erlang(n,rate) |
erlang(n,rate) |
Use gamma |
Cauchy |
Cauchy(μ, σ) |
cauchy(μ, σ) |
cauchy(μ,σ) |
Chisq |
Chisq(df) |
chi2(df) |
chisq(df) |
T Dist |
TDist(df) |
t(df) |
t(df) |
F Dist |
FDist(df1, df2) |
f(df1, df2) |
f(df1,df2) |
Beta Dist |
Beta(shapeα,shapeβ) |
beta(shapeα,shapeβ) |
beta(shapeα,shapeβ) |
Gamma Dist |
Gamma(shapeα,1/rateβ) |
gamma(shapeα,1/rateβ) |
gamma(shapeα,1/rateβ) |
Note: The Negative Binomial returns the number of failures before n successes instead of the total trials to n successes as the Pascal distribution
Usage
y = CDF(x), i.e. y ∈ [0,1]
|
Julia |
Python |
R |
Mean |
mean(d) |
d.mean() |
|
Variance |
var(d) |
d.var() |
|
Median |
median(d) |
d.median() |
|
Sample |
rand(d) |
d.rvs() |
r[distributionName](1,distributionParameters) , e.g. runif(1,10,20) |
Quantiles (F^{-1}(y)) |
quantile(d,y) |
d.ppf(y) |
q[distributionName](y, distributionParameters) , e.g. qunif(0.2,10,20) |
PDF/PMF |
pdf(d,x) |
d.pmf(x) for discrete r.v. and d.pdf(x) for continuous ones |
d[distributionName](x, distributionParameters) , e.g. dunif(15,10,20) |
CDF |
cdf(d,x) |
d.cdf(x) |
p[distributionName](x, distributionParameters) , e.g. punif(15,10,20) |
6 Likes
jzr
2
@cscherrer 's MeasureTheory.jl ecosystem might be another Julia option?
1 Like