Probability Distributions

class paramnormal.dist.normal(**params: float | None)[source]

Bases: BaseDist_Mixin

Create and fit data to a normal distribution.

Parameters:
mufloat

The expected value (mean) of the underlying normal distribution. Acts as the location parameter of the distribution.

sigmafloat

The standard deviation of the underlying normal distribution. Also acts as the scale parameter of distribution.

Methods

fit(data, **guesses)

Fit a distribution to sample using scipy's maximum likelihood estimation methods.

from_params(params)

Create a distribution from the namedtuple result of the fit() method.

References

http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.norm.html https://en.wikipedia.org/wiki/normal_distribution

Examples

>>> import numpy
>>> import paramnormal as pn
>>> numpy.random.seed(0)
>>> pn.normal(mu=5, sigma=2).rvs(size=3)
array([ 8.52810469,  5.80031442,  6.95747597])
>>> # english names and greek symbols are interchangeable
>>> numpy.random.seed(0)
>>> pn.normal(μ=5, σ=2).rvs(size=3)
array([ 8.52810469,  5.80031442,  6.95747597])
>>> # silly fake data
>>> numpy.random.seed(0)
>>> data = numpy.random.normal(5, 2, size=37)
>>> # pretend `data` is unknown and we want to fit a dist. to it
>>> pn.normal.fit(data)
params(mu=5.6480512782619359, sigma=2.1722505742582769)
>>> # estimate sigma when mu is fixed a known value:
>>> pn.normal.fit(data, mu=4.75)
params(mu=4.75, sigma=2.3505677305181645)
dist: ClassVar[rv_continuous] = <scipy.stats._continuous_distns.norm_gen object>
param_template

alias of params

name: ClassVar[str] = 'normal'
class paramnormal.dist.lognormal(**params: float | None)[source]

Bases: BaseDist_Mixin

Create and fit data to a lognormal distribution.

Parameters:
mufloat

The expected value (mean) of the underlying normal distribution. Acts as the scale parameter of the distribution.

sigmafloat

The standard deviation of the underlying normal distribution. Also acts as the shape parameter of distribution.

offsetfloat, optional

The location parameter of the distribution. It’s effectively the lower bound of the distribution. In other works, if you’re investigating some quantity that cannot go below zero (e.g., pollutant concentrations), leave this as the default (zero).

Note

When fitting a lognormal distribution to a dataset, this will be fixed at its default value unless you explicitly set it to another value. Set it to None if wish that it be estimated entirely from scratch.

Methods

fit(data, **guesses)

Fit a distribution to sample using scipy's maximum likelihood estimation methods.

from_params(params)

Create a distribution from the namedtuple result of the fit() method.

References

http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.lognorm.html https://en.wikipedia.org/wiki/lognormal_distribution

Examples

>>> import numpy
>>> import paramnormal as pn
>>> numpy.random.seed(0)
>>> pn.lognormal(mu=5, sigma=2).rvs(size=3)
array([ 5054.85624027,   330.40342795,  1050.97750604])
>>> # you can also use greek letters
>>> numpy.random.seed(0)
>>> pn.lognormal(μ=5, σ=2).rvs(size=3)
array([ 5054.85624027,   330.40342795,  1050.97750604])
>>> # silly fake data
>>> numpy.random.seed(0)
>>> data = numpy.random.lognormal(5, 2, size=37)
>>> # pretend `data` is unknown and we want to fit a dist. to it
>>> pn.lognormal.fit(data)
params(mu=5.6480511731060181, sigma=2.172250571711877, offset=0)
>>> # estimate sigma when mu is fixed a known value:
>>> pn.lognormal.fit(data, mu=4.75)
params(mu=4.75, sigma=2.3505859375000036, offset=0)
>>> # include `offset` in the estimate
>>> pn.lognormal.fit(data, offset=None)
params(mu=5.6538159643068386, sigma=2.1596452081058795, offset=-0.12039282461824304)
dist: ClassVar[rv_continuous] = <scipy.stats._continuous_distns.lognorm_gen object>
param_template

alias of params

name: ClassVar[str] = 'lognormal'
classmethod fit(data: float | int | number | NDArray[generic] | Sequence[float | int | number] | Sequence[float | int | number | NDArray[generic] | Sequence[float | int | number] | Sequence[NDArrayLike]], **guesses: float | None) → ParamsLike[source]

Fit a distribution to sample using scipy’s maximum likelihood estimation methods.

Parameters:
dataarray-like

A sample whose distribution parameters will be estimated.

guessesnamed arguments of floats

Inital guess values for certain parameters of the distribution. See the class docstring for more information on the parameters.

Returns:
paramsnamedtuple

A namedtuple containing all of the paramaters of the distribution.

class paramnormal.dist.weibull(**params: float | None)[source]

Bases: BaseDist_Mixin

Create and fit data to a weibull distribution.

Parameters:
kfloat

The shape parameter of the distribution.

Note

Strictly speaking, the weibull distribution has a second shape parameter, lambda. However, it seems to be always set to 1. So much so that scipy doesn’t give you any other option.

loc, scalefloats, optional

Location and scale parameters of the distribution. These default to, and should probably be left at, 0 and 1, respectively.

Note

When fitting a weibull distribution to a dataset, these will be fixed at their default values unless you explicitly set them to other values. Set them to None if you wish that they be estimated entirely from scratch.

Methods

fit(data, **guesses)

Fit a distribution to sample using scipy's maximum likelihood estimation methods.

from_params(params)

Create a distribution from the namedtuple result of the fit() method.

See also

scipy.stats.weibull_min
scipy.stats.frechet_min
numpy.random.weibull

References

http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.weibull_min.html https://en.wikipedia.org/wiki/weibull_distribution

Examples

>>> import numpy
>>> import paramnormal as pn
>>> numpy.random.seed(0)
>>> pn.weibull(k=5).rvs(size=3)
array([ 0.9553641 ,  1.04662991,  0.98415009])
>>> # silly fake data
>>> numpy.random.seed(0)
>>> data = numpy.random.weibull(5, size=37)
>>> # pretend `data` is unknown and we want to fit a dist. to it
>>> pn.weibull.fit(data)
params(k=5.4158203125000091, loc=0, scale=1)
>>> # include `loc` and `scale` in the estimate
>>> pn.weibull.fit(data, loc=None, scale=None)
params(k=14.120107702486127, loc=-1.389856535577052, scale=2.4320324339845572)
dist: ClassVar[rv_continuous] = <scipy.stats._continuous_distns.weibull_min_gen object>
param_template

alias of params

name: ClassVar[str] = 'weibull'
class paramnormal.dist.alpha(**params: float | None)[source]

Bases: BaseDist_Mixin

Create and fit data to a alpha distribution.

Parameters:
alphafloat

The shape parameter of the distribution.

loc, scalefloats, optional

Location and scale parameters of the distribution. These default to, and should probably be left at, 0 and 1, respectively.

Note

When fitting a alpha distribution to a dataset, these will be fixed at their default values unless you explicitly set them to other values. Set them to None if you wish that they be estimated entirely from scratch.

Methods

fit(data, **guesses)

Fit a distribution to sample using scipy's maximum likelihood estimation methods.

from_params(params)

Create a distribution from the namedtuple result of the fit() method.

References

http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.alpha.html

Examples

>>> import numpy
>>> from scipy import stats
>>> import paramnormal as pn
>>> numpy.random.seed(0)
>>> pn.alpha(alpha=5).rvs(size=3)
array([ 0.20502995,  0.22566277,  0.21099298])
>>> # you can also use greek letters
>>> numpy.random.seed(0)
>>> pn.alpha(α=5).rvs(size=3)
array([ 0.20502995,  0.22566277,  0.21099298])
>>> # silly fake data
>>> numpy.random.seed(0)
>>> data = stats.alpha.rvs(5, size=37)
>>> # pretend `data` is unknown and we want to fit a dist. to it
>>> pn.alpha.fit(data)
params(alpha=4.8356445312500096, loc=0, scale=1)
>>> # include `loc` and `scale` in the estimate
>>> pn.alpha.fit(data, loc=None, scale=None)
params(alpha=8.6781299501492342, loc=-0.15002784429644306, scale=3.1262971852456447)
dist: ClassVar[rv_continuous] = <scipy.stats._continuous_distns.alpha_gen object>
param_template

alias of params

name: ClassVar[str] = 'alpha'
class paramnormal.dist.beta(**params: float | None)[source]

Bases: BaseDist_Mixin

Create and fit data to a beta distribution.

Parameters:
alpha, betafloat

The (positive) shape parameters of the distribution.

loc, scalefloats, optional

Location and scale parameters of the distribution. These default to, and should probably be left at, 0 and 1, respectively.

Note

When fitting a beta distribution to a dataset, these will be fixed at their default values unless you explicitly set them to other values. Set them to None if you wish that they be estimated entirely from scratch.

Methods

fit(data, **guesses)

Fit a distribution to sample using scipy's maximum likelihood estimation methods.

from_params(params)

Create a distribution from the namedtuple result of the fit() method.

References

http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.beta.html https://en.wikipedia.org/wiki/beta_distribution

Examples

>>> import numpy
>>> import paramnormal as pn
>>> numpy.random.seed(0)
>>> pn.beta(alpha=2, beta=5).rvs(size=3)
array([ 0.47917138,  0.6550558 ,  0.21501632])
>>> # you can also use greek letters
>>> numpy.random.seed(0)
>>> pn.beta(α=2, β=5).rvs(size=3)
array([ 0.47917138,  0.6550558 ,  0.21501632])
>>> # silly fake data
>>> numpy.random.seed(0)
>>> data = pn.beta(alpha=2, beta=5).rvs(size=37)
>>> # pretend `data` is unknown and we want to fit a dist. to it
>>> pn.beta.fit(data)
params(alpha=1.6784891179355115, beta=4.2459121691279398, loc=0, scale=1)
>>> # just estimate beta with a known alpha
>>> pn.beta.fit(data, alpha=2)
params(alpha=2, beta=4.9699264393421139, loc=0, scale=1)
>>> # include `loc` and `scale` in the estimate
>>> pn.beta.fit(data, loc=None, scale=None)
params(
    alpha=1.8111139255547926,
    beta=4.6972775768688697,
    loc=-0.0054013993799938431,
    scale=1.0388376932132561
)
dist: ClassVar[rv_continuous] = <scipy.stats._continuous_distns.beta_gen object>
param_template

alias of params

name: ClassVar[str] = 'beta'
class paramnormal.dist.gamma(**params: float | None)[source]

Bases: BaseDist_Mixin

Create and fit data to a gamma distribution.

Parameters:
k, thetafloat

The shape and scale parameters of the distribution, respectively.

locfloat, optional

Location parameter of the distribution. This defaults to, and should probably be left at, 0.

Note

When fitting a beta distribution to a dataset, this will be fixed at its default value unless you explicitly set it to other values. Set to None if you wish that it be estimated entirely from scratch.

Methods

fit(data, **guesses)

Fit a distribution to sample using scipy's maximum likelihood estimation methods.

from_params(params)

Create a distribution from the namedtuple result of the fit() method.

References

http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.gamma.html https://en.wikipedia.org/wiki/gamma_distribution

Examples

>>> import numpy
>>> import paramnormal as pn
>>> numpy.random.seed(0)
>>> pn.gamma(k=2, theta=5).rvs(size=3)
array([ 25.69414788,  11.19240456,  27.13566137])
>>> # you can also use greek letters
>>> numpy.random.seed(0)
>>> pn.gamma(k=2, θ=5).rvs(size=3)
array([ 25.69414788,  11.19240456,  27.13566137])
>>> # silly fake data
>>> numpy.random.seed(0)
>>> data = pn.gamma(k=2, θ=5).rvs(size=37)
>>> # pretend `data` is unknown and we want to fit a dist. to it
>>> pn.gamma.fit(data)
params(k=1.3379069223213471, loc=0, theta=7.5830062081633622)
>>> # just estimate theta with a known k
>>> pn.gamma.fit(data, theta=5)
params(k=1.8060453251225814, loc=0, theta=5)
>>> # include `loc` in the estimate
>>> pn.gamma.fit(data, loc=None)
params(k=1.0996117768860174, loc=0.29914735266576881, theta=8.9542450315590756)
dist: ClassVar[rv_continuous] = <scipy.stats._continuous_distns.gamma_gen object>
param_template

alias of params

name: ClassVar[str] = 'gamma'
class paramnormal.dist.chi_squared(**params: float | None)[source]

Bases: BaseDist_Mixin

Create and fit data to a chi-squared distribution.

Parameters:
kfloat

The degrees of freedom of the distribution, respectively.

loc, scalefloats, optional

Location and scale parameters of the distribution. These default to, and should probably be left at, 0 and 1, respectively.

Note

When fitting a chi-squared distribution to a dataset, these will be fixed at their default value unless you explicitly set them to other values. Set to None if you wish that they be estimated entirely from scratch.

Methods

fit(data, **guesses)

Fit a distribution to sample using scipy's maximum likelihood estimation methods.

from_params(params)

Create a distribution from the namedtuple result of the fit() method.

References

http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.chi2.html https://en.wikipedia.org/wiki/Chi-squared_distribution

Examples

>>> import numpy
>>> import paramnormal as pn
>>> numpy.random.seed(0)
>>> pn.chi_squared(k=2).rvs(size=3)
array([ 1.59174902,  2.51186153,  1.84644629])
>>> # silly fake data
>>> numpy.random.seed(0)
>>> data = pn.chi_squared(k=2).rvs(size=37)
>>> # pretend `data` is unknown and we want to fit a dist. to it
>>> pn.chi_squared.fit(data)
params(k=2.2668945312500028, loc=0, scale=1)
>>> # include `loc` in the estimate
>>> pn.chi_squared.fit(data, loc=None)
params(k=1.9361813889429524, loc=0.037937143324767775, scale=1)
dist: ClassVar[rv_continuous] = <scipy.stats._continuous_distns.chi2_gen object>
param_template

alias of params

nane = 'chi_squared'
class paramnormal.dist.pareto(**params: float | None)[source]

Bases: BaseDist_Mixin

Create and fit data to a pareto distribution.

Parameters:
alphafloat

The shape parameter of the distribution.

loc, scalefloats, optional

Location and scale parameters of the distribution. These default to, and should probably be left at, 0 and 1, respectively.

Note

When fitting a pareto distribution to a dataset, this will be fixed at its default value unless you explicitly set it to other values. Set to None if you wish that it be estimated entirely from scratch.

Methods

fit(data, **guesses)

Fit a distribution to sample using scipy's maximum likelihood estimation methods.

from_params(params)

Create a distribution from the namedtuple result of the fit() method.

References

http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.pareto.html https://en.wikipedia.org/wiki/pareto_distribution

Examples

>>> import numpy
>>> import paramnormal as pn
>>> numpy.random.seed(0)
>>> pn.pareto(alpha=2).rvs(size=3)
array([ 1.48875061,  1.87379424,  1.58662889])
>>> # you can also use greek letters
>>> numpy.random.seed(0)
>>> pn.pareto(α=2).rvs(size=3)
array([ 1.48875061,  1.87379424,  1.58662889])
>>> # silly fake data
>>> numpy.random.seed(0)
>>> data = pn.pareto(alpha=2).rvs(size=37)
>>> # pretend `data` is unknown and we want to fit a dist. to it
>>> pn.pareto.fit(data)
params(alpha=1.7850585937500019, loc=0, scale=1)
>>> # include `loc` in the estimate
>>> pn.pareto.fit(data, loc=None)
params(alpha=1.8040853559635659, loc=0.009529403810858695, scale=1)
dist: ClassVar[rv_continuous] = <scipy.stats._continuous_distns.pareto_gen object>
param_template

alias of params

name: ClassVar[str] = 'pareto'
class paramnormal.dist.exponential(**params: float | None)[source]

Bases: BaseDist_Mixin

Create and fit data to an exponential distribution.

Parameters:
lamdafloat

The shape parameter of the distribution.

Note

For our purposes, we spell lambda as lamda to avoid conflicting with the python keyword lambda.

locfloat, optional

Location parameter of the distribution. This defaults to, and should probably be left at, 0.

Note

When fitting an exponential distribution to a dataset, this will be fixed at its default value unless you explicitly set it to other values. Set to None if you wish that it be estimated entirely from scratch.

Methods

fit(data, **guesses)

Fit a distribution to sample using scipy's maximum likelihood estimation methods.

from_params(params)

Create a distribution from the namedtuple result of the fit() method.

References

http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.expon.html https://en.wikipedia.org/wiki/exponential_distribution

Examples

>>> import numpy
>>> import paramnormal as pn
>>> numpy.random.seed(0)
>>> pn.exponential(lamda=2).rvs(size=3)
array([ 0.39793725,  0.62796538,  0.46161157])
>>> # you can also use greek letters
>>> numpy.random.seed(0)
>>> pn.exponential(λ=2).rvs(size=3)
array([ 0.39793725,  0.62796538,  0.46161157])
>>> # silly fake data
>>> numpy.random.seed(0)
>>> data = pn.exponential(λ=2).rvs(size=37)
>>> # pretend `data` is unknown and we want to fit a dist. to it
>>> pn.exponential.fit(data)
params(lamda=1.7849050026146085, loc=0)
>>> # include `loc` in the estimate
>>> pn.exponential.fit(data, loc=None)
params(lamda=1.8154701618164411, loc=0.0094842718426853996)
dist: ClassVar[rv_continuous] = <scipy.stats._continuous_distns.expon_gen object>
param_template

alias of params

name: ClassVar[str] = 'exponential'
classmethod fit(data: float | int | number | NDArray[generic] | Sequence[float | int | number] | Sequence[float | int | number | NDArray[generic] | Sequence[float | int | number] | Sequence[NDArrayLike]], **guesses: float | None) → ParamsLike[source]

Fit a distribution to sample using scipy’s maximum likelihood estimation methods.

Parameters:
dataarray-like

A sample whose distribution parameters will be estimated.

guessesnamed arguments of floats

Inital guess values for certain parameters of the distribution. See the class docstring for more information on the parameters.

Returns:
paramsnamedtuple

A namedtuple containing all of the paramaters of the distribution.

class paramnormal.dist.rice(**params: float | None)[source]

Bases: BaseDist_Mixin

Create and fit data to a Rice distribution.

Parameters:
Rfloat

The shape parameter of the distribution.

sigmafloat

The standard deviate of the distribution.

locfloat, optional

Location parameter of the distribution. This defaults to, and should probably be left at, 0.

Note

When fitting an Rice distribution to a dataset, this will be fixed at its default value unless you explicitly set it to other values. Set to None if you wish that it be estimated entirely from scratch.

Methods

fit(data, **guesses)

Fit a distribution to sample using scipy's maximum likelihood estimation methods.

from_params(params)

Create a distribution from the namedtuple result of the fit() method.

References

http://scipy.github.io/devdocs/generated/scipy.stats.rice https://en.wikipedia.org/wiki/Rice_distribution

Examples

>>> import numpy
>>> import paramnormal as pn
>>> numpy.random.seed(0)
>>> pn.rice(R=10, sigma=2).rvs(size=3)
array([ 15.67835764,  13.36907874,  10.37753817])
>>> # you can also use greek letters
>>> numpy.random.seed(0)
>>> pn.rice(R=10, σ=2).rvs(size=3)
array([ 15.67835764,  13.36907874,  10.37753817])
>>> # silly fake data
>>> numpy.random.seed(0)
>>> data = pn.rice(R=10, sigma=2).rvs(size=37)
>>> # pretend `data` is unknown and we want to fit a dist. to it
>>> pn.rice.fit(data)
params(R=10.100674084593422, sigma=1.759817171541185, loc=0)
>>> # include `loc` in the estimate (bad idea)
>>> pn.rice.fit(data, loc=None)
params(R=4.249154300734, sigma=1.862167512728, loc=5.570921659394)
dist: ClassVar[rv_continuous] = <scipy.stats._continuous_distns.rice_gen object>
param_template

alias of params

name: ClassVar[str] = 'rice'
classmethod fit(data: float | int | number | NDArray[generic] | Sequence[float | int | number] | Sequence[float | int | number | NDArray[generic] | Sequence[float | int | number] | Sequence[NDArrayLike]], **guesses: float | None) → ParamsLike[source]

Fit a distribution to sample using scipy’s maximum likelihood estimation methods.

Parameters:
dataarray-like

A sample whose distribution parameters will be estimated.

guessesnamed arguments of floats

Inital guess values for certain parameters of the distribution. See the class docstring for more information on the parameters.

Returns:
paramsnamedtuple

A namedtuple containing all of the paramaters of the distribution.