Проверка на нормальность

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

Например, пусть необходимо проверить гипотезу о равенстве средних значений в двух независимых выборках. Для этой цели подходит критерий Стьюдента. Но применение критерия Стьюдента обосновано, только если данные подчиняются нормальному распределению. Поэтому перед применением критерия необходимо проверить гипотезу о нормальности исходных данных. Или проверка остатков линейной регрессии на нормальность — позволяет проверить, соответствует ли применяемая модель регрессии исходным данным.

Нормальное распределение естественным образом возникает практически везде, где речь идёт об измерении с ошибками. Более того, в силу центральной предельной теоремы, распределение многих выборочных величин (например, выборочного среднего) при достаточно больших объёмах выборки хорошо аппроксимируется нормальным распределением вне зависимости от того, какое распределение было у выборки исходно. В связи с этим становится понятным, почему проверке распределения на нормальность стоит уделить особое внимание. В дальнейшем речь пойдёт о так называемых критериях согласия (goodness-of-fit tests). Проверяться будет не просто факт согласия с нормальным распределением с определёнными фиксированными значениями параметров, а несколько более общий факт принадлежности распределения к семейству нормальных распределений со всевозможными значениями параметров.

Проверку выборки на нормальность можно производить несколькими путями. Для начала можно вспомнить, какой вид у графика нормального распределения (гистограмма, график плотности и т.п.), как в нормальном распределении соотносятся среднее, мода, медиана, какими должны быть асимметрия и эксцесс, выполняется ли «правило 3-х сигм». Про всё это мы писали в статье про нормальное распределение. Вот с помощью такой описательной статистики можно оценить выборку на нормальность (обычно приемлемо отклонение на порядок ошибки рассчитываемого параметра). Вторая группа методов — критерии нормальности.

Критерии нормальности

Список критериев нормальности:

  • Критерий Шапиро-Уилка
  • Критерий асимметрии и эксцесса
  • Критерий Дарбина
  • Критерий Д’Агостино
  • Критерий Васичека
  • Критерий Дэвида-Хартли-Пирсона
  • Критерий хи-квадрат
  • Критерий Андерсона-Дарлинга
  • Критерий Филлибена
  • Критерий Колмогорова-Смирнова
  • Критерий Мартинса-Иглевича
  • Критерий Лина-Мудхолкара
  • Критерий Шпигельхальтера
  • Критерий Саркади
  • Критерий Смирнова-Крамера-фон Мизеса
  • Критерий Локка-Спурье
  • Критерий Оя
  • Критерий Хегази-Грина
  • Критерий Муроты-Такеучи

Подробно эти критерии с формулами и таблицами можно посмотреть здесь.

Проверка на нормальность в R (источник)

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

норм распределение

Другим очень часто используемым графическим способом проверки характера распределения данных является построение т.н. графиков квантилей (Q-Q plots, Quantile-Quantile plots). На таких графиках изображаются квантили двух распределений — эмпирического (т.е. построенного по анализируемым данным) и теоретически ожидаемого стандартного нормального распределения. При нормальном распределении проверяемой переменной точки на графике квантилей должны выстраиваться в прямую линию, исходящую под улом 45 градусов из левого нижнего угла графика. Графики квантилей особенно полезны при работе с небольшими по размеру совокупностями, для которых невозможно построить гистограммы, принимающие какую-либо выраженную форму.

В R для построения графиков квантилей можно использовать базовую функцию qqnorm(), которая в качестве основного аргумента принимает вектор со значениями анализируемой переменной.

x <- rnorm(500) # генерация нормально распределенной совокупности с n = 500
qqnorm(x)

qq plot

Следует отметить, что интерпретация графиков квантилей при работе с небольшими выборками, происходящими из нормально распределенных генеральных совокупностей, требует определенного навыка. Дело в том, что при небольшом числе наблюдений точки на графике квантилей могут не всегда образовывать четко выраженную прямую линию. В качестве иллюстрации этого утверждения на следующем рисунке приведены графики квантилей для 5 случайным образом сгенерированных нормально распределенных выборок по 20 наблюдений каждая (если использованный в примере пакет DAAG у Вас не установлен, выполните команду install.packages(«DAAG»)):

library(DAAG)
qreference(m = 20, seed = 145, nrep = 5, nrows = 1)

квантили

Фигура, в которую выстраиваются точки на некоторых графиках далека от прямой линии. Причина данного эффекта — в небольшом объеме наблюдений.

Тесты проверки на нормальность в R

Существует целый ряд статистических тестов, специально разработанных для проверки нормальности распределения данных. В общем виде проверяемую при помощи этих тестов нулевую гипотезу можно сформулировать так: «Анализируемая выборка происходит из генеральной совокупности, имеющей нормальное распределение». Если получаемая при помощи того или иного теста вероятность ошибки Р оказывается меньше некоторого заранее принятого уровня значимости (например, 0.05), нулевая гипотеза отклоняется.

В R реализованы практически все имеющиеся тесты на нормальность — либо в виде стандарных функций, либо в виде функций, входящих в состав отдельных пакетов. Примером базовой функции является shapiro.test(), при помощи которой можно выполнить широко используемый тест Шапиро-Уилка:

shapiro.test(rnorm(500))
Shapiro-Wilk normality test
data: rnorm(500)
W = 0.9978, p-value = 0.7653 # P > 0.05 - нулевая гипотеза не отвергается

Основные классические критерии проверки на нормальность собраны в пакете nortest. Пакет можно установить с CRAN при помощи вызова функции install.packages():

> install.packages(pkgs=c("nortest"))

Подключить установленный пакет можно при помощи функции library():

> library(nortest)

Может возникнуть вопрос: «А зачем столько много разных критериев для проверки одного факта? Нельзя ли выбрать наилучший и всегда его использовать?». Ответ на этот вопрос не утешителен: «В общем случае, к сожалению, нельзя».

Критерий Лиллифорса

Критерий Лиллифорса (Lilliefors) является вариантом известного классического критерия Колмогорова-Смирнова, специально модифицированного для проверки нормальности. Эта модификация существенна. Для проверки гипотезы нормальности нельзя использовать классический непараметрический критерий Колмогорова-Смирнова, реализованный в функции ks.test(). Критерий Лиллифорса реализован в функции lillie.test():

> lillie.test(rnorm(100, mean = 6, sd = 4));
Lilliefors (Kolmogorov-Smirnov) normality test
data: rnorm(100, mean = 6, sd = 4)
D = 0.0463, p-value = 0.8621
> lillie.test(runif(100, min = 2, max = 4));
Lilliefors (Kolmogorov-Smirnov) normality test
data: runif(100, min = 2, max = 4)
D = 0.0732, p-value = 0.2089

Критерии Крамера-фон Мизеса и Андерсона-Дарлинга

Эти критерии менее известны, но обычно работают гораздо лучше, нежели критерий Лиллифорса. Они реализованы в функциях cvm.test() и ad.test() соответственно:

> cvm.test(rnorm(50, mean = 6, sd = 4));
Cramer-von Mises normality test
data: rnorm(50, mean = 6, sd = 4)
W = 0.0321, p-value = 0.8123
> ad.test(runif(50, min = 2, max = 4));
Anderson-Darling normality test
data: runif(50, min = 2, max = 4)
A = 1.5753, p-value = 0.0004118

Критерий Шапиро-Франсиа

Этот критерий работает достаточно хорошо в большинстве не очень «сложных» случаев. Получить p-значение можно посредством функции sf.test():

> sf.test(rexp(50, rate = 2));
Shapiro-Francia normality test
data: rexp(50, rate = 2)
W = 0.7803, p-value = 2.033e-06

Критерий хи-квадрат Пирсона

В отличие от задач проверки пропорций, критерий хи-квадрат обычно очень плохо работает в задачах проверки распределения на нормальность. Вероятность ошибки второго рода очень велика для достаточно широкого класса альтернативных распределений. В связи с этим, использовать его не рекомендуется. Тем не менее реализация его предоставлена функцией pearson.test(). У этой функции есть булевская опция adjusted, которая позволяет внести поправки в p-значение из-за наличия двух неизвестных параметров. Рекомендуемая последовательность действий такая: получить два p-значения, одно, соответствующее adjusted=TRUE, второе — adjusted=FALSE. Истинное p-значение обычно находится между. Кроме того, полезно поварьировать объем выборки и посмотреть, насколько сильно меняется p-значение. Если влияние объёма выборки сильное, то от использования критерия стоит отказаться во избежание ошибок.

> pearson.test(rnorm(50, mean = 6, sd = 4));
Pearson chi-square normality test
data: rnorm(50, mean = 6, sd = 4)
P = 5.2, p-value = 0.6356
> pearson.test(runif(50, min = -1, max = 1));
Pearson chi-square normality test
data: runif(50, min = -1, max = 1)
P = 7.6, p-value = 0.3692

 

Дополнительнаая информация: проверка на нормальность

 

Data Scientist # 1

Машинное обучение, большие данные, наука о данных, анализ данных, цифровой маркетинг, искусственный интеллект, нейронные сети, глубокое обучение, data science, data scientist, machine learning, artificial intelligence, big data, deep learning

Данные — новый актив!

Эффективно управлять можно только тем, что можно измерить.
Copyright © 2016-2021 Data Scientist. Все права защищены.