Усеченные распределения
Пакет предоставляет функцию 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, ...).