f_oneway#
- scipy.stats.f_oneway(*образцы, ось=0, equal_var=True, nan_policy='propagate', keepdims=False)[источник]#
Выполнить однофакторный дисперсионный анализ.
Однофакторный дисперсионный анализ (ANOVA) проверяет нулевую гипотезу о том, что две или более групп имеют одинаковое среднее значение генеральной совокупности. Тест применяется к выборкам из двух или более групп, возможно, разного размера.
- Параметры:
- sample1, sample2, …array_like
Выборочные измерения для каждой группы. Должно быть как минимум два аргумента. Если массивы многомерные, то все размерности массива должны быть одинаковыми, за исключением ось.
- осьint или None, по умолчанию: 0
Если это целое число, ось входных данных, по которой вычисляется статистика. Статистика каждого среза по оси (например, строки) входных данных появится в соответствующем элементе вывода. Если
None, вход будет сведён в одномерный массив перед вычислением статистики.- equal_var: bool, необязательный
Если True (по умолчанию), выполняется стандартный однофакторный дисперсионный анализ, который предполагает равенство дисперсий генеральных совокупностей [2]. Если False, выполняется тест ANOVA Уэлча, который не предполагает равенства дисперсий генеральных совокупностей [4].
Добавлено в версии 1.15.0.
- nan_policy{‘propagate’, ‘omit’, ‘raise’}
Определяет, как обрабатывать входные значения NaN.
propagate: если NaN присутствует в срезе оси (например, строке), вдоль которой вычисляется статистика, соответствующая запись вывода будет NaN.omit: NaN будут пропущены при выполнении расчета. Если в срезе оси, вдоль которого вычисляется статистика, остается недостаточно данных, соответствующая запись вывода будет NaN.raise: если присутствует NaN, тоValueErrorбудет вызвано исключение.
- keepdimsbool, по умолчанию: False
Если установлено значение True, оси, которые были сокращены, остаются в результате как размерности с размером один. С этой опцией результат будет корректно транслироваться относительно входного массива.
- Возвращает:
- статистикаfloat
Вычисленная F-статистика теста.
- p-значениеfloat
Соответствующее p-значение из F-распределения.
- Предупреждает:
ConstantInputWarningВозникает, если все значения в каждом из входных массивов идентичны. В этом случае F-статистика либо бесконечна, либо не определена, поэтому
np.infилиnp.nanвозвращается.- RuntimeWarning
Выдается, если длина любого входного массива равна 0 или если все входные массивы имеют длину 1.
np.nanвозвращается для F-статистики и p-значения в этих случаях.
Примечания
ANOVA-тест имеет важные предположения, которые должны быть выполнены, чтобы связанное p-значение было валидным.
Выборки независимы.
Каждая выборка взята из нормально распределённой совокупности.
Стандартные отклонения популяций групп все равны. Это свойство известно как гомоскедастичность.
Если эти предположения не выполняются для данного набора данных, всё равно может быть возможно использовать H-критерий Краскела-Уоллиса (
scipy.stats.kruskal) или тест Александера-Говерна (scipy.stats.alexandergovern) хотя с некоторой потерей мощности.Длина каждой группы должна быть не менее одного, и должна быть хотя бы одна группа с длиной больше одного. Если эти условия не выполняются, генерируется предупреждение и (
np.nan,np.nan) возвращается.Если все значения в каждой группе идентичны и существует хотя бы две группы с разными значениями, функция генерирует предупреждение и возвращает (
np.inf, 0).Если все значения во всех группах одинаковы, функция генерирует предупреждение и возвращает (
np.nan,np.nan).Алгоритм взят из работы Хеймана [2], стр.394-7.
Начиная с SciPy 1.9,
np.matrixвходные данные (не рекомендуется для нового кода) преобразуются вnp.ndarrayперед выполнением вычисления. В этом случае результатом будет скаляр илиnp.ndarrayподходящей формы вместо 2Dnp.matrix. Аналогично, хотя маскированные элементы маскированных массивов игнорируются, результатом будет скаляр илиnp.ndarrayвместо маскированного массива сmask=False.Ссылки
[1]R. Lowry, “Concepts and Applications of Inferential Statistics”, Chapter 14, 2014, http://vassarstats.net/textbook/
[2] (1,2)G.W. Heiman, “Understanding research methods and statistics: An integrated introduction for psychology”, Houghton, Mifflin and Company, 2001.
[3]G.H. McDonald, "Handbook of Biological Statistics", однофакторный дисперсионный анализ. http://www.biostathandbook.com/onewayanova.html
[4]B. L. Welch, “On the Comparison of Several Mean Values: An Alternative Approach”, Biometrika, vol. 38, no. 3/4, pp. 330-336, 1951, doi: 10.2307/2332579.
Примеры
>>> import numpy as np >>> from scipy.stats import f_oneway
Вот некоторые данные [3] на измерении раковины (длина рубца переднего аддуктора, стандартизированная делением на длину) у мидии Mytilus trossulus из пяти мест: Тилламук, Орегон; Ньюпорт, Орегон; Петербург, Аляска; Магадан, Россия; и Тварминне, Финляндия, взятых из гораздо большего набора данных, использованного в McDonald et al. (1991).
>>> tillamook = [0.0571, 0.0813, 0.0831, 0.0976, 0.0817, 0.0859, 0.0735, ... 0.0659, 0.0923, 0.0836] >>> newport = [0.0873, 0.0662, 0.0672, 0.0819, 0.0749, 0.0649, 0.0835, ... 0.0725] >>> petersburg = [0.0974, 0.1352, 0.0817, 0.1016, 0.0968, 0.1064, 0.105] >>> magadan = [0.1033, 0.0915, 0.0781, 0.0685, 0.0677, 0.0697, 0.0764, ... 0.0689] >>> tvarminne = [0.0703, 0.1026, 0.0956, 0.0973, 0.1039, 0.1045] >>> f_oneway(tillamook, newport, petersburg, magadan, tvarminne) F_onewayResult(statistic=7.121019471642447, pvalue=0.0002812242314534544)
f_onewayпринимает многомерные входные массивы. Когда входы многомерны и ось не задан, тест выполняется вдоль первой оси входных массивов. Для следующих данных тест выполняется три раза, один раз для каждого столбца.>>> a = np.array([[9.87, 9.03, 6.81], ... [7.18, 8.35, 7.00], ... [8.39, 7.58, 7.68], ... [7.45, 6.33, 9.35], ... [6.41, 7.10, 9.33], ... [8.00, 8.24, 8.44]]) >>> b = np.array([[6.35, 7.30, 7.16], ... [6.65, 6.68, 7.63], ... [5.72, 7.73, 6.72], ... [7.01, 9.19, 7.41], ... [7.75, 7.87, 8.30], ... [6.90, 7.97, 6.97]]) >>> c = np.array([[3.31, 8.77, 1.01], ... [8.25, 3.24, 3.62], ... [6.32, 8.81, 5.19], ... [7.48, 8.83, 8.91], ... [8.59, 6.01, 6.07], ... [3.07, 9.72, 7.48]]) >>> F = f_oneway(a, b, c) >>> F.statistic array([1.75676344, 0.03701228, 3.76439349]) >>> F.pvalue array([0.20630784, 0.96375203, 0.04733157])
ANOVA Уэлча будет выполнена, если equal_var равно False.