Усеченные распределения

Пакет предоставляет функцию truncated, которая создает наиболее подходящее распределение, представляющее усеченную версию данного распределения.

Усеченное распределение можно построить с помощью следующей сигнатуры:

# Distributions.truncatedFunction

truncated(d0::UnivariateDistribution; [lower::Real], [upper::Real])
truncated(d0::UnivariateDistribution, lower::Real, upper::Real)

Усеченное распределение d для распределения d0 в интервале [lower, upper] имеет следующую функцию плотности вероятности (массы):

где  — это функция плотности вероятности (массы) .

Эта функция выдает ошибку, если .

truncated(d0; lower=l)           # левое усечение d0 до интервала [l, Inf)
truncated(d0; upper=u)           # правое усечение d0 до интервала (-Inf, u]
truncated(d0; lower=l, upper=u)  # усечение d0 до интервала [l, u]
truncated(d0, l, u)              # усечение d0 до интервала [l, u]

В качестве резервного варианта эта функция создает оболочку Truncated.

Реализация

Чтобы реализовать специальную усеченную форму для распределений типа D, следует реализовать один или несколько из следующих методов:

  • truncated(d0::D, l::T, u::T) where {T <: Real}: интервальное усечение;

  • truncated(d0::D, ::Nothing, u::Real): усечение справа;

  • truncated(d0::D, l::Real, u::Nothing): усечение слева.

В общем случае при этом создается структура Truncated{typeof(d)}, определяемая следующим образом.

# Distributions.TruncatedType

Truncated

Универсальная оболочка для усеченного распределения.

Многие функции, в том числе для вычисления плотности распределения вероятностей и выборки, определены для всех усеченных одномерных распределений:

Функции для вычисления статистики, такие как mean, mode, var, std и entropy, недоступны для универсальных усеченных распределений. Как правило, не существует простых способов вычисления таких величин из-за сложностей, вызванных усечением. Однако эти методы поддерживаются для усеченных нормальных распределений Truncated{<:Normal}, которые можно создавать посредством вызова truncated(::Normal, ...).