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

Весовые векторы

При статистических расчетах элементам выборки часто назначаются веса. С целью упростить использование весовых векторов введен представляющий их абстрактный тип AbstractWeights. Он дает два преимущества.

  • Отдельный тип AbstractWeights позволяет выделить весовой вектор среди других векторов во входных аргументах как имеющий особую роль.

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

  • Весовой вектор — это простая оболочка вокруг входного вектора. Входной вектор НЕ копируется во время создания.

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

Реализации

Доступно несколько типов статистических весов, которые являются подтипами типа AbstractWeights. Выбор весов влияет на то, как производится корректировка смещения рядом методов. Дополнительные сведения см. в docstring методов var, std и cov.

AnalyticWeights

Аналитические веса описывают неслучайную относительную значимость (обычно от 0 до 1) каждого наблюдения. Они также могут называться «веса надежности», «веса точности» или «веса обратной дисперсии». Как правило, они применяются в том случае, когда взвешиваемые наблюдения представляют собой совокупные значения (например, средние) с различной дисперсией.

w = AnalyticWeights([0.2, 0.1, 0.3])
w = aweights([0.2, 0.1, 0.3])

FrequencyWeights

Частотные веса описывают то, сколько раз (или с какой частотой) отмечалось каждое наблюдение. Они также могут называться «веса повторений» или «веса репликации».

w = FrequencyWeights([2, 1, 3])
w = fweights([2, 1, 3])

ProbabilityWeights

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

w = ProbabilityWeights([0.2, 0.1, 0.3])
w = pweights([0.2, 0.1, 0.3])

UnitWeights

Единичные веса — это особый случай: всем наблюдениям присваивается вес, равный 1. Использование таких весов равносильно вычислению невзвешенной статистики.

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

w = uweights(3)
w = uweights(Float64, 3)

Weights

Тип Weights описывает универсальный весовой вектор, который поддерживает не все возможные операции FrequencyWeights, AnalyticWeights, ProbabilityWeights и UnitWeights.

w = Weights([1., 2., 3.])
w = weights([1., 2., 3.])

Экспоненциальные веса: eweights

Экспоненциальные веса — это распространенная форма временных весов: прошлым наблюдениям назначаются экспоненциально убывающие веса.

Если t — вектор временных весов, то для каждого индекса i вес вычисляется следующим образом.

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

Например, приведенный ниже вызов генерирует экспоненциальные веса для десяти наблюдений с .

julia> eweights(1:10, 0.3)
10-element Weights{Float64,Float64,Array{Float64,1}}:
 0.3
 0.42857142857142855
 0.6122448979591837
 0.8746355685131197
 1.249479383590171
 1.7849705479859588
 2.549957925694227
 3.642797036706039
 5.203995766722913
 7.434279666747019

Если просто передать количество наблюдений n, это равносильно передаче 1:n.

julia> eweights(10, 0.3)
10-element Weights{Float64,Float64,Array{Float64,1}}:
 0.3
 0.42857142857142855
 0.6122448979591837
 0.8746355685131197
 1.249479383590171
 1.7849705479859588
 2.549957925694227
 3.642797036706039
 5.203995766722913
 7.434279666747019

Наконец, экспоненциальные веса можно генерировать на основе произвольного подмножества меток времени из более широкого диапазона.

julia> t
2019-01-01T01:00:00:2 hours:2019-01-01T05:00:00

julia> r
2019-01-01T01:00:00:1 hour:2019-01-02T01:00:00

julia> eweights(t, r, 0.3)
3-element Weights{Float64,Float64,Array{Float64,1}}:
 0.3
 0.6122448979591837
 1.249479383590171

ПРИМЕЧАНИЕ. Это эквивалентно вызову eweights(something.(indexin(t, r)), 0.3), который означает, что для каждого значения в t возвращается его индекс в r. Так как indexin возвращает nothing, если в r нет соответствующего значения из t, мы используем something, чтобы устранить такую возможность.

Методы

AbstractWeights реализует следующие методы:

eltype
length
isempty
values
sum

Доступны следующие конструкторы:

AnalyticWeights(vs, wsum=sum(vs))

Создает вектор AnalyticWeights со значениями весов vs. Предварительно вычисленную сумму можно указать в wsum.

Аналитические веса описывают неслучайную относительную значимость (обычно от 0 до 1) каждого наблюдения. Они также могут называться «веса надежности», «веса точности» или «веса обратной дисперсии». Как правило, они применяются в том случае, когда взвешиваемые наблюдения представляют собой совокупные значения (например, средние) с различной дисперсией.

FrequencyWeights(vs, wsum=sum(vs))

Создает вектор FrequencyWeights со значениями весов vs. Предварительно вычисленную сумму можно указать в wsum.

Частотные веса описывают то, сколько раз (или с какой частотой) отмечалось каждое наблюдение. Они также могут называться «веса повторений» или «веса репликации».

ProbabilityWeights(vs, wsum=sum(vs))

Создает вектор ProbabilityWeights со значениями весов vs. Предварительно вычисленную сумму можно указать в wsum.

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

UnitWeights{T}(s)

Создает вектор UnitWeights длиной s с элементами весов типа T. Все элементы весов тождественно равны нулю.

Weights(vs, wsum=sum(vs))

Создает вектор Weights со значениями весов vs. Предварительно вычисленную сумму можно указать в wsum.

Тип Weights описывает универсальный весовой вектор, который поддерживает не все возможные операции FrequencyWeights, AnalyticWeights и ProbabilityWeights.

aweights(vs)

Создает вектор AnalyticWeights на основе массива vs. Дополнительные сведения см. в документации по AnalyticWeights.

fweights(vs)

Создает вектор FrequencyWeights на основе заданного массива. Дополнительные сведения см. в документации по FrequencyWeights.

pweights(vs)

Создает вектор ProbabilityWeights на основе заданного массива. Дополнительные сведения см. в документации по ProbabilityWeights.

eweights(t::AbstractVector{<:Integer}, λ::Real; scale=false)
eweights(t::AbstractVector{T}, r::StepRange{T}, λ::Real; scale=false) where T
eweights(n::Integer, λ::Real; scale=false)

Создает вектор Weights, в котором прошлым наблюдениям назначаются экспоненциально убывающие веса (более высокие целочисленные значения i в t). Целочисленное значение n представляет число учитываемых прошлых наблюдений. n по умолчанию имеет значение maximum(t) - minimum(t) + 1, если передан только аргумент t и элементы являются целочисленными, или значение length(r), если также передан диапазон надмножества r. Если вместо t явным образом передан аргумент n, по умолчанию t равно 1:n.

Если аргумент scale имеет значение true, то для каждого элемента i в t значение веса вычисляется следующим образом:

Если аргумент scale имеет значение false, то каждое значение вычисляется следующим образом:

Аргументы

  • t::AbstractVector: временные индексы или метки времени.

  • r::StepRange: более широкий диапазон, используемый при генерировании весов на основе подмножества меток времени.

  • n::Integer: число учитываемых прошлых событий.

  • λ::Real: коэффициент сглаживания или параметр скорости, отвечающий условию . При приближении этого значения к 0 итоговые веса будут почти равны, а при его приближении к 1 конечным элементам вектора будут присваиваться большие веса.

Именованные аргументы

  • scale::Bool: веса возвращаются масштабированными в интервале от 0 до 1 (значение по умолчанию — false).

Примеры

julia> eweights(1:10, 0.3; scale=true)
10-element Weights{Float64,Float64,Array{Float64,1}}:
 0.04035360699999998
 0.05764800999999997
 0.08235429999999996
 0.11764899999999996
 0.16806999999999994
 0.24009999999999995
 0.3429999999999999
 0.48999999999999994
 0.7
 1.0

Ссылки

uweights(s::Integer)
uweights(::Type{T}, s::Integer) where T<:Real

Создает вектор UnitWeights длиной s с элементами весов типа T. Все элементы весов тождественно равны нулю.

Примеры

julia> uweights(3)
3-element UnitWeights{Int64}:
 1
 1
 1

julia> uweights(Float64, 3)
3-element UnitWeights{Float64}:
 1.0
 1.0
 1.0
weights(vs::AbstractArray{<:Real})

Создает вектор Weights на основе массива vs. Дополнительные сведения см. в документации по Weights.