API статистики

Vega предоставляет статистические функции для моделирования распределений вероятностей и других вычислений. Методы доступны через объект верхнего уровня vega, а отдельно — через пакет vega-statistics.

Справочник API статистики

Генерация случайных чисел

# vega.random() Исходный код

Возвращает псевдослучайное число с равномерным распределением на интервале [0, 1). По умолчанию метод просто вызывает встроенную функцию JavaScript Math.random. Все методы Vega, которым нужны случайные числа, должны использовать эту функцию.

# vega.setRandom(randfunc) Исходный код

Задаёт генератор случайных чисел функцией randfunc. Последующие вызовы random будут использовать её. Собственный генератор позволяет выбрать другой источник случайности или получить повторяемые результаты при тестировании.

# vega.randomLCG(seed) Исходный код

Возвращает новый генератор с начальным значением seed. Полученная функция не принимает аргументов и создаёт числа на интервале [0, 1) с помощью линейного конгруэнтного генератора (LCG). Вместе с setRandom этот метод позволяет получать повторяемые результаты для проверки и тестирования.

Методы распределений

Методы для получения выборок и вычисления характеристик распределений вероятностей.

# vega.sampleNormal([mean, stdev]) Исходный код

Возвращает выборочное значение одномерного нормального (гауссова) распределения с математическим ожиданием mean и стандартным отклонением stdev. По умолчанию используются 0 и 1 соответственно.

# vega.cumulativeNormal(value[, mean, stdev]) Исходный код

Возвращает значение функции распределения в точке value для нормального распределения с математическим ожиданием mean и стандартным отклонением stdev. По умолчанию используются 0 и 1 соответственно.

# vega.densityNormal(value[, mean, stdev]) Исходный код

Возвращает значение плотности вероятности в точке value для нормального распределения с математическим ожиданием mean и стандартным отклонением stdev. По умолчанию используются 0 и 1 соответственно.

# vega.quantileNormal(probability[, mean, stdev]) Исходный код

Возвращает квантиль, то есть значение обратной функции распределения, для вероятности probability. Распределение нормальное, с математическим ожиданием mean и стандартным отклонением stdev. По умолчанию используются 0 и 1 соответственно.

# vega.sampleLogNormal([mean, stdev]) Исходный код

Возвращает выборочное значение одномерного логнормального распределения с логарифмическим средним mean и логарифмическим стандартным отклонением stdev. По умолчанию используются 0 и 1 соответственно.

# vega.cumulativeLogNormal(value[, mean, stdev]) Исходный код

Возвращает значение функции распределения в точке value для логнормального распределения с логарифмическим средним mean и логарифмическим стандартным отклонением stdev. По умолчанию используются 0 и 1 соответственно.

# vega.densityLogNormal(value[, mean, stdev]) Исходный код

Возвращает значение плотности вероятности в точке value для логнормального распределения с логарифмическим средним mean и логарифмическим стандартным отклонением stdev. По умолчанию используются 0 и 1 соответственно.

# vega.quantileLogNormal(probability[, mean, stdev]) Исходный код

Возвращает квантиль, то есть значение обратной функции распределения, для вероятности probability. Распределение логнормальное, с логарифмическим средним mean и логарифмическим стандартным отклонением stdev. По умолчанию используются 0 и 1 соответственно.

# vega.sampleUniform([min, max]) Исходный код

Возвращает выборочное значение одномерного непрерывного равномерного распределения на интервале [min, max). По умолчанию min равен 0, а max — 1. Единственный переданный аргумент считается значением max.

# vega.cumulativeUniform(value[, min, max]) Исходный код

Возвращает значение функции распределения в точке value для равномерного распределения на интервале [min, max). По умолчанию min равен 0, а max — 1. Если после обязательного первого аргумента передан только один параметр границ, он считается значением max, а min равен 0.

# vega.densityUniform(value[, min, max]) Исходный код

Возвращает значение плотности вероятности в точке value для равномерного распределения на интервале [min, max). По умолчанию min равен 0, а max — 1. Если после обязательного первого аргумента передан только один параметр границ, он считается значением max, а min равен 0.

# vega.quantileUniform(probability[, min, max]) Исходный код

Возвращает квантиль, то есть значение обратной функции распределения, для вероятности probability при равномерном распределении на интервале [min, max). По умолчанию min равен 0, а max — 1. Если после обязательного первого аргумента передан только один параметр границ, он считается значением max, а min равен 0.

Объекты распределений

Методы для выборки и расчётов с распределениями вероятностей. Каждый метод принимает параметры распределения и возвращает объект распределения, представляющий случайную величину.

Объекты распределений предоставляют следующие методы:

  • dist.sample(): получает случайное значение из распределения.
  • dist.pdf(value): вычисляет плотность вероятности в точке value.
  • dist.cdf(value): вычисляет функцию распределения в точке value.
  • dist.icdf(probability): вычисляет обратную функцию распределения для вероятности probability.

# vega.randomNormal([mean, stdev]) Исходный код

Создаёт объект нормального (гауссова) распределения с математическим ожиданием mean и стандартным отклонением stdev. По умолчанию используются 0 и 1 соответственно.

После создания значения mean и stdev можно читать и изменять методами mean и stdev.

# vega.randomLogNormal([mean, stdev]) Исходный код

Создаёт объект логнормального распределения с логарифмическим средним mean и логарифмическим стандартным отклонением stdev. По умолчанию используются 0 и 1 соответственно.

После создания значения mean и stdev можно читать и изменять методами mean и stdev.

# vega.randomUniform([min, max]) Исходный код

Создаёт объект непрерывного равномерного распределения на интервале [min, max). По умолчанию min равен 0, а max — 1. Единственный переданный аргумент считается значением max.

После создания значения min и max можно читать и изменять методами min и max.

# vega.randomInteger([min,] max) Исходный код

Создаёт объект дискретного равномерного распределения целых чисел на интервале [min, max). Единственный переданный аргумент считается значением max. По умолчанию min равен 0.

После создания значения min и max можно читать и изменять методами min и max.

# vega.randomMixture(distributions[, weights]) Исходный код

Создаёт объект взвешенной смеси распределений вероятностей. Аргумент distributions должен быть массивом объектов распределений. Необязательный массив weights задаёт относительные числовые веса. Если он указан, веса нормализуются так, чтобы их сумма равнялась 1. Неуказанные веса до нормализации считаются равными 1. Смесь распределений не поддерживает метод icdf: его вызов приводит к ошибке.

После создания массивы distributions и weights можно читать и изменять методами distributions и weights.

# vega.randomKDE(values[, bandwidth]) Исходный код

Создаёт объект ядерной оценки плотности для массива числовых values. Метод применяет гауссово ядро для оценки сглаженного непрерывного распределения. Необязательный параметр bandwidth задаёт ширину ядра. Если он равен 0 или не указан, ширина оценивается автоматически по входным данным. Ядерные оценки плотности не поддерживают метод icdf: его вызов приводит к ошибке.

После создания значения data и bandwidth можно читать и изменять методами data и bandwidth.

Регрессия

Методы двумерной регрессии для прогнозирования одной переменной по другой.

# vega.regressionLinear(data, x, y) Исходный код

Подбирает линейную модель y = a + b * x для массива data и функций доступа к значениям x и y. Возвращает объект с параметрами подобранной модели:

  • coef: массив подобранных коэффициентов вида [a, b].
  • predict: функция, возвращающая прогноз модели для значения x.
  • rSquared: коэффициент детерминации R2, показывающий долю общей дисперсии y, объясняемую моделью.

# vega.regressionLog(data, x, y) Исходный код

Подбирает логарифмическую модель y = a + b * log(x) для массива data и функций доступа к значениям x и y.

Возвращает объект с параметрами подобранной модели:

  • coef: массив подобранных коэффициентов вида [a, b].
  • predict: функция, возвращающая прогноз модели для значения x.
  • rSquared: коэффициент детерминации R2, показывающий долю общей дисперсии y, объясняемую моделью.

# vega.regressionExp(data, x, y) Исходный код

Подбирает экспоненциальную модель y = a * eb * x для массива data и функций доступа к значениям x и y. Возвращает объект с параметрами подобранной модели:

  • coef: массив подобранных коэффициентов вида [a, b].
  • predict: функция, возвращающая прогноз модели для значения x.
  • rSquared: коэффициент детерминации R2, показывающий долю общей дисперсии y, объясняемую моделью.

# vega.regressionPow(data, x, y) Исходный код

Подбирает степенную модель y = a * xb для массива data и функций доступа к значениям x и y. Возвращает объект с параметрами подобранной модели:

  • coef: массив подобранных коэффициентов вида [a, b].
  • predict: функция, возвращающая прогноз модели для значения x.
  • rSquared: коэффициент детерминации R2, показывающий долю общей дисперсии y, объясняемую моделью.

# vega.regressionQuad(data, x, y) Исходный код

Подбирает квадратичную модель y = a + b * x + c * x2 для массива data и функций доступа к значениям x и y. Возвращает объект с параметрами подобранной модели:

  • coef: массив подобранных коэффициентов вида [a, b, c].
  • predict: функция, возвращающая прогноз модели для значения x.
  • rSquared: коэффициент детерминации R2, показывающий долю общей дисперсии y, объясняемую моделью.

# vega.regressionPoly(data, x, y, order) Исходный код

Подбирает полиномиальную модель указанной степени order вида y = a + b * x + … + k * xorder для массива data и функций доступа к значениям x и y. Возвращает объект с параметрами подобранной модели:

  • coef: массив из (order + 1) коэффициентов полинома вида [a, b, c, d, …].
  • predict: функция, возвращающая прогноз модели для значения x.
  • rSquared: коэффициент детерминации R2, показывающий долю общей дисперсии y, объясняемую моделью.

# vega.regressionLoess(data, x, y, bandwidth) Исходный код

Подбирает сглаженную непараметрическую линию тренда для массива data и функций доступа к x и y методом loess (локального сглаживания диаграммы рассеяния). Метод последовательно выполняет локальные взвешенные регрессии в скользящем окне ближайших точек. Аргумент bandwidth задаёт размер окна как долю от общего числа точек в интервале [0, 1].

# vega.sampleCurve(f, extent[, minSteps, maxSteps]) Исходный код

Создаёт выборку точек функции интерполяции f на области extent и возвращает массив точек [x, y]. Адаптивное разбиение добавляет больше точек там, где кривизна выше. Разбиение прекращается, когда разница углов между текущими точками и предлагаемым уточнением становится меньше четверти градуса. Необязательный minSteps (по умолчанию 25) задаёт минимальное число начальных равномерно распределённых точек. maxSteps (по умолчанию 200) ограничивает разрешение адаптивной выборки относительно равномерной сетки такого размера. Если minSteps и maxSteps равны, адаптивное разбиение не выполняется и возвращается только исходная равномерная выборка.

Статистические методы

Методы для оценки ширины ядра, расчёта интервалов группировки, бутстрепных доверительных интервалов и границ квартилей.

# vega.bandwidthNRD(array[, accessor]) Исходный код

Для массива чисел array оценивает ширину ядра при гауссовой ядерной оценке плотности, предполагая нормальное опорное распределение. По формуле Скотта (1992) ширина равна 1.06 * min(stdev, IQR / 1.34) * n^(-1/5), где stdev — стандартное отклонение, IQR — межквартильный размах, а n — размер выборки. Нулевые значения размаха или отклонения обрабатываются отдельно. Необязательная функция accessor извлекает числа из массива объектов; её использование равнозначно предварительному вызову array.map(accessor).

# vega.bin(options) Исходный код

Определяет схему разбиения числового диапазона на интервалы, например для гистограммы. Метод перебирает возможные интервалы, согласуя размер шага с заданным основанием и учитывая ограничения, в том числе максимальное число интервалов. Возвращаемый объект описывает схему свойствами start, stop и step.

Поддерживаются следующие свойства объекта options:

  • extent (обязательно): массив из двух элементов [min, max], задающий диапазон значений для интервалов.
  • base: основание системы счисления при автоматическом выборе интервалов (по умолчанию 10).
  • maxbins: максимальное число интервалов (по умолчанию 20). Фактическое число часто меньше из-за округления границ до удобных значений.
  • span: протяжённость диапазона, для которого рассчитываются границы. По умолчанию extent[1] - extent[0]. Позволяет выбирать шаг для отдельного участка, например увеличенной области, сохраняя общий extent.
  • step: точный шаг между интервалами. Если задан, параметры maxbins, span и steps игнорируются.
  • steps: массив допустимых размеров шага. Если задан, параметр maxbins игнорируется.
  • minstep: минимально допустимый шаг (особенно полезен для целых чисел; по умолчанию 0).
  • divide: массив множителей для возможного уменьшения шага. По умолчанию [5, 2]: шаг можно разделить на 5 и/или 2. Например, при исходном шаге 10 метод может проверить, удовлетворяют ли ограничениям шаги 2 (= 10/5), 5 (= 10/2) и 1 (= 10/(5*2)).
  • nice: логическое значение, определяющее, нужно ли округлять начальную и конечную границы относительно шага до удобных значений (по умолчанию true).
vega.bin({extent:[0, 1], maxbins:10}); // {start:0, stop:1, step:0.1}
vega.bin({extent:[0, 1], maxbins:5}); // {start:0, stop:1, step:0.2}
vega.bin({extent:[5, 10], maxbins:5}); // {start:5, stop:10, step:1}

# vega.bootstrapCI(array, samples, alpha[, accessor]) Исходный код

Рассчитывает бутстрепный доверительный интервал для массива значений array по числу повторных выборок samples и уровню значимости alpha. Например, alpha = 0.05 соответствует 95-процентному доверительному интервалу. Необязательная функция accessor извлекает числа из массива объектов; это равнозначно предварительному вызову array.map(accessor). Значения null, undefined и NaN игнорируются.

# vega.dotbin(sortedArray, step[, smooth, accessor]) Исходный код

Рассчитывает позиции интервалов для точечной диаграммы по отсортированному массиву чисел sortedArray. Возвращаемый массив позиций соответствует входному по индексам. Метод реализует алгоритм плотности точек Уилкинсона (1999). Параметр step задаёт ширину интервала: точки в пределах step от опорной точки получают одну позицию. Необязательный логический параметр smooth включает дополнительное сглаживание позиций для уменьшения разброса. Функция accessor может извлечь числа из массива объектов; это равнозначно предварительному вызову array.map(accessor). Перед вызовом удалите значения null, undefined и NaN.

# vega.quantiles(array, p[, accessor]) Исходный код

Для массива чисел array и массива порогов вероятности p в интервале [0, 1] возвращает соответствующие квантили. Длина результата совпадает с длиной p. Необязательная функция accessor извлекает числа из массива объектов; это равнозначно предварительному вызову array.map(accessor). Значения null, undefined и NaN игнорируются.

# vega.quartiles(array[, accessor]) Исходный код

Для массива чисел array возвращает границы квартилей: массив из трёх элементов с первым, вторым (медианой) и третьим квартилями. Необязательная функция accessor извлекает числа из массива объектов; это равнозначно предварительному вызову array.map(accessor). Значения null, undefined и NaN игнорируются.