Усеченные распределения
Пакет предоставляет функцию truncated
, которая создает наиболее подходящее распределение, представляющее усеченную версию данного распределения.
Усеченное распределение можно построить с помощью следующей сигнатуры:
#
Distributions.truncated
— Function
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.Truncated
— Type
Truncated
Универсальная оболочка для усеченного распределения.
Многие функции, в том числе для вычисления плотности распределения вероятностей и выборки, определены для всех усеченных одномерных распределений:
Функции для вычисления статистики, такие как mean
, mode
, var
, std
и entropy
, недоступны для универсальных усеченных распределений. Как правило, не существует простых способов вычисления таких величин из-за сложностей, вызванных усечением. Однако эти методы поддерживаются для усеченных нормальных распределений Truncated{<:Normal}
, которые можно создавать посредством вызова truncated(::Normal, ...)
.