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

Скалярная статистика

В этом пакете реализованы функции для вычисления различных статистических характеристик на основе массива скалярных вещественных чисел.

Взвешенная сумма и среднее значение

sum(v::AbstractArray, w::AbstractWeights{<:Real}; [dims])

Вычисляет взвешенную сумму массива v с весами w по измерению dims (необязательно).

sum!(R::AbstractArray, A::AbstractArray,
     w::AbstractWeights{<:Real}, dim::Int;
     init::Bool=true)

Вычисляет взвешенную сумму массива A с весами w по измерению dim и сохраняет результат в R. При init=false сумма прибавляется к уже имеющемуся в R значению, а не к нулю.

wsum(v, w::AbstractVector, [dim])

Вычисляет взвешенную сумму массива v с весами w по измерению dim (необязательно).

wsum!(R::AbstractArray, A::AbstractArray,
      w::AbstractVector, dim::Int;
      init::Bool=true)

Вычисляет взвешенную сумму массива A с весами w по измерению dim и сохраняет результат в R. При init=false сумма прибавляется к уже имеющемуся в R значению, а не к нулю.

mean(A::AbstractArray, w::AbstractWeights[, dims::Int])

Вычисляет взвешенное среднее значение для массива A с весовым вектором w (типа AbstractWeights). Если задан аргумент dim, вычисляет взвешенное среднее значение по измерению dims.

Примеры

n = 20
x = rand(n)
w = rand(n)
mean(x, weights(w))
mean!(R::AbstractArray, A::AbstractArray, w::AbstractWeights[; dims=nothing])

Вычисляет взвешенное среднее значение для массива A с весовым вектором w (типа AbstractWeights) по измерению dims и записывает результаты в R.

Средние значения

Этот пакет содержит функции для вычисления средних значений различного рода.

geomean(a)

Возвращает геометрическое среднее значение коллекции.

harmmean(a)

Возвращает гармоническое среднее значение коллекции.

genmean(a, p)

Возвращает обобщенное/степенное среднее значение с экспонентой p для массива вещественных значений, то есть , где n = length(a). Оно считается геометрическим средним значением при p == 0.

Моменты и кумулянты

var(x::AbstractArray, w::AbstractWeights, [dim]; mean=nothing, corrected=false)

Вычисляет дисперсию массива вещественных значений x по измерению dim (необязательно). Наблюдения x взвешиваются с использованием весового вектора w. Некорректированная (при corrected=false) выборочная дисперсия определяется следующим образом:

где  — длина входных данных, а  — среднее значение. Несмещенная оценка (при corrected=true) дисперсии генеральной совокупности вычисляется путем замены на коэффициент, зависящий от типа используемых весов:

  • AnalyticWeights:

  • FrequencyWeights:

  • ProbabilityWeights: , где равно count(!iszero, w)

  • Weights: ArgumentError (коррекция смещения не поддерживается)

var(ce::CovarianceEstimator, x::AbstractVector; mean=nothing)

Вычисляет дисперсию для вектора x с использованием средства оценки ce.

std(x::AbstractArray, w::AbstractWeights, [dim]; mean=nothing, corrected=false)

Вычисляет среднеквадратичное отклонение для массива вещественных значений x по измерению dim (необязательно). Наблюдения x взвешиваются с использованием весового вектора w. Некорректированное (при corrected=false) выборочное среднеквадратичное отклонение определяется следующим образом:

где  — длина входных данных, а  — среднее значение. Несмещенная оценка (при corrected=true) среднеквадратичного отклонения генеральной совокупности вычисляется путем замены коэффициентом, зависящим от типа используемых весов:

  • AnalyticWeights:

  • FrequencyWeights:

  • ProbabilityWeights: , где равно count(!iszero, w)

  • Weights: ArgumentError (коррекция смещения не поддерживается)

std(ce::CovarianceEstimator, x::AbstractVector; mean=nothing)

Вычисляет среднеквадратичное отклонение для вектора x с использованием средства оценки ce.

mean_and_var(x, [w::AbstractWeights], [dim]; corrected=false) -> (mean, var)

Возвращает среднее значение и дисперсию для коллекции x. Если x является AbstractArray, в dim можно передать кортеж измерений, по которым необходимо вычислить статистику. Можно указать весовой вектор w для расчета взвешенных оценок. Наконец, при вычислении дисперсии применяется коррекция смещения, если corrected=true. Дополнительные сведения см. в описании функции var.

mean_and_std(x, [w::AbstractWeights], [dim]; corrected=false) -> (mean, std)

Возвращает среднее значение и среднеквадратичное отклонение для коллекции x. Если x является AbstractArray, в dim можно передать кортеж измерений, по которым необходимо вычислить статистику. Можно указать весовой вектор w для расчета взвешенных оценок. Наконец, при вычислении среднеквадратичного отклонения применяется коррекция смещения, если corrected=true. Дополнительные сведения см. в описании функции std.

skewness(v, [wv::AbstractWeights], m=mean(v))

Вычисляет нормализованный коэффициент асимметрии для массива вещественных значений v; при необходимости можно указать весовой вектор wv и центр m.

kurtosis(v, [wv::AbstractWeights], m=mean(v))

Вычисляет коэффициент эксцесса для массива вещественных значений v; при необходимости можно указать весовой вектор wv и центр m.

moment(v, k, [wv::AbstractWeights], m=mean(v))

Возвращает центральный момент порядка k для массива вещественных значений v; при необходимости можно указать весовой вектор wv и центр m.

cumulant(v, k, [wv::AbstractWeights], m=mean(v))

Возвращает кумулянт порядка k для массива вещественных значений v; при необходимости можно указать весовой вектор wv и предварительно вычисленное среднее значение m.

Если k — это диапазон значений типа Integer, возвращаются все кумулянты порядков в этом диапазоне в виде вектора.

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

Справочные материалы: Smith, P. J. 1995. A Recursive Formulation of the Old Problem of Obtaining Moments from Cumulants and Vice Versa. The American Statistician, 49(2), 217—​218. https://doi.org/10.2307/2684642

Измерения вариации

span(x)

Возвращает интервал коллекции, то есть диапазон minimum(x):maximum(x). Минимальное и максимальное значения x вычисляются за один проход с помощью extrema.

variation(x, m=mean(x))

Возвращает коэффициент вариации для коллекции x; при необходимости можно указать предварительно вычисленное среднее значение m. Коэффициент вариации — это отношение среднеквадратичного отклонения к среднему значению.

sem(x; mean=nothing)
sem(x::AbstractArray[, weights::AbstractWeights]; mean=nothing)

Возвращает среднеквадратичную погрешность среднего значения для коллекции x. Можно указать предварительно вычисленное значение mean.

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

  • AnalyticWeights: не реализовано.

  • FrequencyWeights:

  • ProbabilityWeights:

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

Справочные материалы

Carl-Erik Särndal, Bengt Swensson, Jan Wretman (1992). Model Assisted Survey Sampling. New York: Springer, стр. 51—​53.

mad(x; center=median(x), normalize=true)

Вычисляет медианное абсолютное отклонение (MAD) для коллекции x относительно center (по умолчанию относительно медианы).

Если аргумент normalize имеет значение true, MAD умножается на 1 / quantile(Normal(), 3/4) ≈ 1.4826 с целью получения согласованной статистической оценки среднеквадратичного отклонения с тем предположением, что данные имеют нормальное распределение.

StatsBase.mad!(x; center=median!(x), normalize=true)

Вычисляет медианное абсолютное отклонение (MAD) для массива x относительно center (по умолчанию относительно медианы), перезаписывая x в ходе выполнения. В массиве x должны помещаться значения, генерируемые в результате вызова middle для его элементов (например, целочисленный вектор не подходит, так как middle может возвращать нецелочисленные значения).

Если аргумент normalize имеет значение true, MAD умножается на 1 / quantile(Normal(), 3/4) ≈ 1.4826 с целью получения согласованной статистической оценки среднеквадратичного отклонения с тем предположением, что данные имеют нормальное распределение.

Z-оценки

zscore(X, [μ, σ])

Вычисляет Z-оценки для X; при необходимости можно указать предварительно вычисленное среднее значение μ и среднеквадратичное отклонение σ. Z-оценка — это количество (со знаком) среднеквадратичных отклонений выше среднего значения для наблюдения, то есть .

μ и σ должны быть одновременно либо скалярами, либо массивами. Вычисление транслируется. В частности, если μ и σ — массивы, они должны быть одного размера и для каждого измерения должно выполняться условие size(μ, i) == 1 || size(μ, i) == size(X, i).

zscore!([Z], X, μ, σ)

Вычисляет Z-оценки для массива X со средним значением μ и среднеквадратичным отклонением σ. Z-оценка — это количество (со знаком) среднеквадратичных отклонений выше среднего значения для наблюдения, то есть .

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

Энтропия и связанные с ней функции

entropy(p, [b])

Вычисляет энтропию для коллекции вероятностей p; при необходимости можно указать вещественное число b, чтобы масштабировать энтропию на 1/log(b). Элементы с вероятностью 0 или 1 прибавляют 0 к энтропии.

renyientropy(p, α)

Вычисляет энтропию Реньи (обобщенную) порядка α для массива p.

crossentropy(p, q, [b])

Вычисляет перекрестную энтропию между p и q; при необходимости можно указать вещественное число b, чтобы масштабировать результат на 1/log(b).

kldivergence(p, q, [b])

Вычисляет расстояние Кульбака-Лейблера от q до p, которое также называется относительной энтропией p по отношению к q, то есть сумму pᵢ * log(pᵢ / qᵢ). При необходимости можно указать вещественное число b, чтобы масштабировать расстояние на 1/log(b).

Квантиль и связанные с ним функции

percentile(x, p)

Возвращает p-й перцентиль для коллекции x, то есть quantile(x, p / 100).

iqr(x)

Вычисляет межквартильный размах (IQR) для коллекции x, то есть 75-й перцентиль минус 25-й перцентиль.

nquantile(x, n::Integer)

Возвращает n-квантили для коллекции x, то есть значения, которые разделяют v на n подмножеств примерно равного размера.

Эквивалентно quantile(x, [0:n]/n). Например, nquantiles(x, 5) возвращает вектор квантилей соответственно в [0.0, 0.2, 0.4, 0.6, 0.8, 1.0].

quantile(v, w::AbstractWeights, p)

Вычисляет взвешенные квантили вектора v с указанным множеством значений вероятности p с использованием весов, заданных в весовом векторе w (типа AbstractWeights). Веса не должны быть отрицательными. Векторы весов и данных должны быть одинаковой длины. Если x содержит хотя бы одно значение NaN, возвращается NaN. Ошибка выдается в случае, если w содержит хотя бы одно значение NaN.

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

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

median(v::RealVector, w::AbstractWeights)

Вычисляет взвешенную медиану v с весами w (типа AbstractWeights). Дополнительные сведения см. в документации по quantile.

quantilerank(itr, value; method=:inc)

Вычисляет позицию квантиля в интервале [0, 1] для value относительно коллекции itr.

С помощью именованного аргумента method можно выбрать одно из нескольких определений. Допустим, count_less — это количество элементов в itr со значением меньше value, count_equal — количество элементов в itr со значением, равным value, n — длина itr, greatest_smaller — наибольшее значение меньше value, а smallest_greater — наименьшее значение больше value. Тогда method поддерживает следующие определения.

  • :inc (по умолчанию): возвращает значение в диапазоне от 0 до 1 включительно.

Возвращает count_less / (n - 1), если value ∈ itr; в противном случае применяет интерполяцию на основе определения 7 квантиля из классификации Хиндмана-Фана (1996) (эквивалентно PERCENTRANK и PERCENTRANK.INC в Excel). Это определение соответствует нижнему полунепрерывному обращению quantile с параметрами по умолчанию.

  • :exc: возвращает значение в диапазоне от 0 до 1 не включительно.

Возвращает (count_less + 1) / (n + 1), если value ∈ itr; в противном случае применяет интерполяцию на основе определения 6 квантиля из классификации Хиндмана-Фана (1996) (эквивалентно PERCENTRANK.EXC в Excel).

  • :compete: возвращает count_less / (n - 1), если value ∈ itr; в противном случае

возвращает (count_less - 1) / (n - 1) без интерполяции (эквивалентно PERCENT_RANK в MariaDB, percent_rank в dplyr).

  • :tied: возвращает (count_less + count_equal/2) / n без интерполяции

на основе определения из работы Роскоу Дж. Т. (1975) (эквивалентно виду "mean" функции percentileofscore в SciPy).

  • :strict: возвращает count_less / n без интерполяции

(эквивалентно виду "strict" функции percentileofscore в SciPy).

  • :weak: возвращает (count_less + count_equal) / n без интерполяции

(эквивалентно виду "weak" функции percentileofscore в SciPy).

Ошибка ArgumentError происходит в случае, если itr содержит значения NaN или missing либо если itr содержит меньше двух элементов.

Справочные материалы

Roscoe, J. T. (1975). Fundamental Research Statistics for the Behavioral Sciences", 2nd ed., New York: Holt, Rinehart and Winston.

Hyndman, R.J and Fan, Y. (1996) "Sample Quantiles in Statistical Packages", The American Statistician, Vol. 50, No. 4, стр. 361—​365.

Примеры

julia> using StatsBase

julia> v1 = [1, 1, 1, 2, 3, 4, 8, 11, 12, 13];

julia> v2 = [1, 2, 3, 5, 6, missing, 8];

julia> v3 = [1, 2, 3, 4, 4, 5, 6, 7, 8, 9];

julia> quantilerank(v1, 2)
0.3333333333333333

julia> quantilerank(v1, 2, method=:exc), quantilerank(v1, 2, method=:tied)
(0.36363636363636365, 0.35)

# используем `skipmissing` для векторов с отсутствующими элементами
julia> quantilerank(skipmissing(v2), 4)
0.5

# используем трансляцию с `Ref` с целью вычисления ранга квантиля для нескольких значений
julia> quantilerank.(Ref(v3), [4, 8])
2-element Vector{Float64}:
 0.3333333333333333
 0.8888888888888888
percentilerank(itr, value; method=:inc)

Возвращает q-й перцентиль value в коллекции itr, то есть quantilerank(itr, value) * 100.

Дополнительные сведения см. в docstring quantilerank.

Мода и моды

mode(a, [r])
mode(a::AbstractArray, wv::AbstractWeights)

Возвращает моду (наиболее часто встречающееся число) массива; при необходимости можно указать диапазон r или весовой вектор wv. Если мод несколько, возвращается первая встретившаяся.

modes(a, [r])::Vector
mode(a::AbstractArray, wv::AbstractWeights)::Vector

Возвращает все моды (наиболее часто встречающиеся числа) массива; при необходимости можно указать диапазон r или весовой вектор wv.

Сводная статистика

summarystats(a)

Вычисляет сводную статистику для массива вещественных значений a. Возвращает объект SummaryStats, содержащий среднее значение, минимальное значение, 25-й перцентиль, медиану, 75-й перцентиль и максимальное значение.

describe(a)

Pretty-print the summary statistics provided by summarystats: the mean, minimum, 25th percentile, median, 75th percentile, and maximum.

Показатели надежности

cronbachalpha(covmatrix::AbstractMatrix{<:Real})

Вычисляет коэффициент альфа Кронбаха (1951) на основе ковариационной матрицы covmatrix по формуле:

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

Возвращает объект CronbachAlpha, который содержит следующие элементы.

  • alpha: оценка коэффициента альфа Кронбаха для всех элементов (столбцов) в covmatrix;

  • dropped: вектор, задающий оценки коэффициента альфа Кронбаха, если определенный элемент (столбец) удален из covmatrix.

Пример

julia> using StatsBase

julia> cov_X = [10 6 6 6;
                6 11 6 6;
                6 6 12 6;
                6 6 6 13];

julia> cronbachalpha(cov_X)
Cronbach's alpha for all items: 0.8136

Cronbach's alpha if an item is dropped:
item 1: 0.7500
item 2: 0.7606
item 3: 0.7714
item 4: 0.7826