Документация Engee

Многомерные распределения

Многомерные распределения — это распределения, которые имеют размерность Multivariate (то есть каждая выборка представляет собой вектор). Абстрактные типы для многомерных распределений:

const MultivariateDistribution{S<:ValueSupport} = Distribution{Multivariate,S}

const DiscreteMultivariateDistribution   = Distribution{Multivariate, Discrete}
const ContinuousMultivariateDistribution = Distribution{Multivariate, Continuous}

Общий интерфейс

Перечисленные ниже методы реализованы для каждого многомерного распределения, что обеспечивает единообразный интерфейс для работы с такими распределениями.

Вычисление статистики

length(d::MultivariateDistribution) -> Int

Возвращает выборочное измерение распределения d.

size(d::MultivariateDistribution)

Возвращает размер выборки распределения d, т. е. (length(d),).

eltype(::Type{Sampleable})

The default element type of a sample. This is the type of elements of the samples generated by the rand method. However, one can provide an array of different element types to store the samples using rand!.

mean(d::MultivariateDistribution)

Вычисляет вектор средних значений распределения d.

var(d::MultivariateDistribution)

Вычисляет вектор поэлементных дисперсий для распределения d.

cov(d::MultivariateDistribution)

Вычисляет ковариационную матрицу для распределения d. (cor предоставляется на основе cov).

cor(d::MultivariateDistribution)

Вычисляет матрицу корреляции для распределения d.

entropy(d::MultivariateDistribution)

Вычисляет значение энтропии распределения d.

entropy(d::MultivariateDistribution, b::Real)

Вычисляет значение энтропии распределения относительно заданного основания.

Оценка вероятности

insupport(d::MultivariateDistribution, x::AbstractArray)

Если  — вектор, возвращается значение, указывающее, находится ли x в пределах носителя . Если  — матрица, возвращается значение, указывающее, находится ли каждый столбец в в пределах носителя .

loglikelihood(d::Distribution{ArrayLikeVariate{N}}, x) where {N}

The log-likelihood of distribution d with respect to all variate(s) contained in x.

Here, x can be any output of rand(d, dims...) and rand!(d, x). For instance, x can be

  • an array of dimension N with size(x) == size(d),

  • an array of dimension N + 1 with size(x)[1:N] == size(d), or

  • an array of arrays xi of dimension N with size(xi) == size(d).

Примечание. Для многомерных распределений значение функции плотности вероятности обычно очень мало или очень велико, поэтому ее вычисление напрямую может вызвать численные проблемы. Как правило, рекомендуется выполнять вероятностные вычисления в логарифмическом масштабе.

Выборка

rand(::AbstractRNG, ::Sampleable)

Производит выборку из сэмплера и возвращает результат.

rand!(::AbstractRNG, ::Sampleable, ::AbstractArray)

Выполняет выборку на месте из сэмплера и сохраняет результат в указанном массиве.

Примечание. Помимо этих общих методов, у каждого многомерного распределения есть специальные методы, приведенные ниже.

Распределения

Мультиномиальное распределение является обобщением биномиального распределения. Возьмем n независимых выборок из категориального распределения на конечном множестве размером k и допустим, что , где представляет количество раз, которое встречается элемент . Тогда распределение является мультиномиальным. Каждая выборка мультиномиального распределения является k-мерным целочисленным вектором, сумма элементов которого равна n.

Вероятностная функция массы имеет следующий вид:

Multinomial(n, p)   # Мультиномиальное распределение для n испытаний с вектором вероятностей p
Multinomial(n, k)   # Мультиномиальное распределение для n испытаний с равными вероятностями
                    # на множестве 1:k

Многомерное нормальное распределение является многомерным обобщением нормального распределения. Функция плотности вероятности d-мерного нормального распределения с вектором средних значений и ковариационной матрицей имеет следующий вид:

Известно, что вектор средних значений и ковариация на практике часто имеют особую форму, что можно использовать для упрощения вычислений. Например, вектор средних значений иногда является просто нулевым, в то время как ковариационная матрица может быть диагональной или даже иметь форму . Для таких особых случаев введен параметрический тип MvNormal, определение которого приведено ниже. Он позволяет пользователям указывать особую структуру средних значений и ковариации.

struct MvNormal{T<:Real,Cov<:AbstractPDMat,Mean<:AbstractVector} <: AbstractMvNormal
    μ::Mean
    Σ::Cov
end

Здесь вектор средних значений может быть экземпляром любого AbstractVector. Ковариация может быть представлена любым подтипом типа AbstractPDMat. В частности, можно использовать PDMat для полной ковариации, PDiagMat для диагональной ковариации и ScalMat для изотропной ковариации — в форме . (Подробные сведения см. в документации к пакету Julia PDMats.)

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

const IsoNormal  = MvNormal{Float64, ScalMat{Float64},                  Vector{Float64}}
const DiagNormal = MvNormal{Float64, PDiagMat{Float64,Vector{Float64}}, Vector{Float64}}
const FullNormal = MvNormal{Float64, PDMat{Float64,Matrix{Float64}},    Vector{Float64}}

const ZeroMeanIsoNormal{Axes}  = MvNormal{Float64, ScalMat{Float64},                  Zeros{Float64,1,Axes}}
const ZeroMeanDiagNormal{Axes} = MvNormal{Float64, PDiagMat{Float64,Vector{Float64}}, Zeros{Float64,1,Axes}}
const ZeroMeanFullNormal{Axes} = MvNormal{Float64, PDMat{Float64,Matrix{Float64}},    Zeros{Float64,1,Axes}}

Многомерные нормальные распределения поддерживают аффинные преобразования:

d = MvNormal(μ, Σ)
c + B * d    # == MvNormal(B * μ + c, B * Σ * B')
dot(b, d)    # == Normal(dot(b, μ), b' * Σ * b)
MvNormal

Как правило, пользователям не нужно беспокоиться об этих внутренних механизмах.

Мы предоставляем общий конструктор MvNormal, который создает распределение соответствующего типа в зависимости от входных аргументов.

MvNormalCanon

Многомерное нормальное распределение относится к экспоненциальному семейству и имеет два канонических параметра: вектор потенциалов и матрицу точности . Эти параметры и стандартное представление (то есть использующее среднее значение и ковариацию ) связаны следующим образом:

Каноническая параметризация широко применяется в байесовском анализе. Мы предоставляем тип MvNormalCanon, который также является подтипом AbstractMvNormal, для представления многомерного нормального распределения посредством канонических параметров. В частности, тип MvNormalCanon определен следующим образом:

struct MvNormalCanon{T<:Real,P<:AbstractPDMat,V<:AbstractVector} <: AbstractMvNormal
    μ::V    # вектор средних значений
    h::V    # вектор потенциалов, то есть inv(Σ) * μ
    J::P    # матрица точности, то есть inv(Σ)
end

Кроме того, определены псевдонимы для общих специализаций этого параметрического типа:

const FullNormalCanon = MvNormalCanon{Float64, PDMat{Float64,Matrix{Float64}},    Vector{Float64}}
const DiagNormalCanon = MvNormalCanon{Float64, PDiagMat{Float64,Vector{Float64}}, Vector{Float64}}
const IsoNormalCanon  = MvNormalCanon{Float64, ScalMat{Float64},                  Vector{Float64}}

const ZeroMeanFullNormalCanon{Axes} = MvNormalCanon{Float64, PDMat{Float64,Matrix{Float64}},    Zeros{Float64,1,Axes}}
const ZeroMeanDiagNormalCanon{Axes} = MvNormalCanon{Float64, PDiagMat{Float64,Vector{Float64}}, Zeros{Float64,1,Axes}}
const ZeroMeanIsoNormalCanon{Axes}  = MvNormalCanon{Float64, ScalMat{Float64},                  Zeros{Float64,1,Axes}}

Примечание. MvNormalCanon имеет тот же набор методов, что и MvNormal.

MvLogitNormal{<:AbstractMvNormal}

Многомерное логистически нормальное распределение является многомерным обобщением LogitNormal с поддержкой корреляций между величинами.

Если  — это вектор длиной , то

является вектором вероятностей длиной .

MvLogitNormal(μ, Σ)                 # MvLogitNormal с y ~ MvNormal(μ, Σ)
MvLogitNormal(MvNormal(μ, Σ))       # то же, что и выше
MvLogitNormal(MvNormalCanon(μ, J))  # MvLogitNormal с y ~ MvNormalCanon(μ, J)

Поля

  • normal::AbstractMvNormal: содержит -мерное распределение

MvLogNormal(d::MvNormal)

Многомерное логнормальное распределение является многомерным обобщением логнормального распределения.

Если имеет многомерное нормальное распределение, то имеет многомерное логнормальное распределение.

Вектор средних значений и ковариационная матрица базового нормального распределения называются параметрами местоположения и масштаба соответствующего логнормального распределения.

Dirichlet

Распределение Дирихле часто используется в качестве сопряжения перед категориальным или мультиномиальным распределением. Функция плотности вероятности распределения Дирихле с параметром имеет следующий вид:

# Допустим, что alpha — это вектор
Dirichlet(alpha)         # Распределение Дирихле с вектором параметров alpha

# Допустим, что a — это положительное скалярное значение
Dirichlet(k, a)          # Распределение Дирихле с параметром a * ones(k)
Product <: MultivariateDistribution

N-мерное распределение MultivariateDistribution, построенное на основе вектора N независимых распределений UnivariateDistribution.

Product(Uniform.(rand(10), 1)) # 10-мерное распределение Product из 10 независимых распределений `Uniform`.

Методы сложения

AbstractMvNormal

Помимо описанных выше методов общего интерфейса, для всех многомерных распределений, относящихся к базовому типу AbstractMvNormal, также доступны следующие методы:

invcov(d::AbstractMvNormal)

Возвращает обратную ковариационную матрицу d.

logdetcov(d::AbstractMvNormal)

Возвращает значение логарифма определителя ковариационной матрицы.

sqmahal(d, x)

Возвращает возведенное в квадрат расстояние Махаланобиса от x до центра d относительно ковариации. Если x — это вектор, возвращается скалярное значение. Если x — это матрица, возвращается вектор длиной size(x,2).

sqmahal!(r, d, x) записывает результаты в предварительно размещенный в памяти массив r.

rand(::AbstractRNG, ::Distributions.AbstractMvNormal)

Выполняет выборку случайного вектора из указанного многомерного нормального распределения.

minimum(d::Distribution)

Возвращает минимум носителя d.

maximum(d::Distribution)

Возвращает максимум носителя d.

extrema(d::Distribution)

Возвращает минимум и максимум носителя d в виде двухэлементного кортежа.

MvLogNormal

Помимо описанных выше методов общего интерфейса, также доступны следующие методы:

location(d::MvLogNormal)

Возвращает вектор местоположения распределения (среднее значение базового нормального распределения).

scale(d::MvLogNormal)

Возвращает матрицу масштаба распределения (ковариационную матрицу базового нормального распределения).

median(d::MvLogNormal)

Возвращает медианный вектор логнормального распределения, который строго меньше среднего значения.

mode(d::MvLogNormal)

Возвращает вектор режима логнормального распределения, который строго меньше среднего значения и медианы.

Может потребоваться вычислить параметры логнормального распределения (вектор местоположений и матрицу масштаба) на основе заданной ковариации и среднего значения, медианы или режима. С этой целью доступны представленные ниже функции.

location{D<:AbstractMvLogNormal}(::Type{D},s::Symbol,m::AbstractVector,S::AbstractMatrix)

Вычисляет вектор местоположения (среднее значение базового нормального распределения).

  • Если s == :meancov, то m принимается в качестве среднего значения, а S — в качестве ковариационной матрицы логнормального распределения.

  • Если s == :mean | :median | :mode, то m принимается в качестве соответственно среднего значения, медианы или режима логнормального распределения, а S интерпретируется как матрица масштаба (ковариация базового нормального распределения).

Вектор местоположения невозможно получить путем аналитических расчетов на основе, например, медианы и ковариации или режима и ковариации.

location!{D<:AbstractMvLogNormal}(::Type{D},s::Symbol,m::AbstractVector,S::AbstractMatrix,μ::AbstractVector)

Вычисляет вектор местоположения (как и выше) и сохраняет результат в .

scale{D<:AbstractMvLogNormal}(::Type{D},s::Symbol,m::AbstractVector,S::AbstractMatrix)

Вычисляет параметр масштаба согласно приведенному выше определению для параметра местоположения.

scale!{D<:AbstractMvLogNormal}(::Type{D},s::Symbol,m::AbstractVector,S::AbstractMatrix,Σ::AbstractMatrix)

Вычисляет параметр масштаба согласно приведенному выше определению для параметра местоположения и сохраняет результат в Σ.

params{D<:AbstractMvLogNormal}(::Type{D},m::AbstractVector,S::AbstractMatrix)

Возвращает (масштаб, местоположение) для данных среднего значения и ковариации.

Распределения произведений

product_distribution(dists::AbstractArray{<:Distribution{<:ArrayLikeVariate{M}},N})

Создает распределение M + N-мерных массивов как произведение независимых M-мерных распределений путем их наложения.

В качестве резервного варианта эта функция создает распределение ProductDistribution, но можно определить специализированные методы.

product_distribution(dists::AbstractVector{<:Normal})

Создает многомерное нормальное распределение путем наложения одномерных нормальных распределений.

Итоговое распределение типа MvNormal имеет диагональную ковариационную матрицу.

Для построения распределений произведений рекомендуется использовать функцию product_distribution. Для некоторых распределений она создает особый многомерный тип.