14 июня 2012

Протокол разведочного анализа данных: проверка на нормальность распределения



Подчиняются ли анализируемые количественные переменные закону нормального распределения вероятностей? Очень многие статистические методы предполагают положительный ответ на этот вопрос (Zuur et al. 2010), и поэтому проверка исследуемых переменных на нормальность распределения является важной составной частью разведочного анализа данных.

Проверяя условие нормальности распределения данных, необходимо, однако, хорошо представлять себе, в каких случаях его выполнение является критическим для применения конкретного статистического метода. Так, например, метод главных компонент (Principle Components Analysis, PCA) не требует, чтобы данные были распределены нормально (Joliffe 2002). Линейная регрессия (Linear Regression) хотя и предполагает нормальность распределения зависимой переменной, является достаточно робастным методом при незначительных отклонениях от этого условия (Fitzmaurice et al. 2004). В то же время для успешного применения дискриминантного анализа (Discriminant Analysis) нормальность распределениях признаков в каждой группе классифицируемых объектов - условие обязательное (Huberty 1994).

Существует несколько способов проверки анализируемых данных на нормальность распределения. Все их можно разделить на две рассмотренные ниже группы.






Графические способы

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

Рисунок 1. Гистограмма распределения веса 1193 воробьев (по: Zuur et al. 2010). На графике слева приведены объединенные данные для июня, июля и августа. Поскольку вес птиц зависит от времени года, гистограмма приобретает асимметричный вид. На графике справа показаны те же данные, но отдельно по каждому месяцу. Из этого графика хорошо видно, что на самом деле вес воробьев как биологический признак имеет примерно нормальное распределение.


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

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

x <- rnorm(500) # генерация нормально распределенной совокупности с n = 500
qqnorm(x)
 
 Рисунок 2. Пример графика квантилей для нормально распределенной совокупности, состоящей из 500 наблюдений.


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

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


Рисунок 3. Графики квантилей для пяти случайным образом сгенерированных нормально распределенных выборок (n = 20 в каждой). Обратите внимание на то, что фигура, в которую выстраваются точки на некоторых графиках далека от прямой линии. Причина данного эффекта - в небольшом объеме наблюдений.


Формальные тесты

Существует целый ряд статистических тестов, специально разработанных для проверки нормальности распределения данных. В общем виде проверяемую при помощи этих тестов нулевую гипотезу можно сформулиировать так: "Анализируемая выборка происходит из генеральной совокупности, имеющей нормальное распределение". Если получаемая при помощи того или иного теста вероятность ошибки Р оказывается меньше некоторого заранее принятого уровня значимости (например, 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, реализующие другие распространенные тесты на нормальность (установить этот покет можно командой install.packages("nortest")):


5 комментариев :

Viktor Kovalev комментирует...

Спасибо, полезная статья! Я бы добавил, что проверка распределения на нормальность не всегда такая уж тривиальная задача. При работе с реальными данными бывают ситуации, когда результаты применения различных статистических критериев противоречат друг другу. Здесь окончательное решение остается на совести исследователя. Кроме того, не следует забывать о необходимости грамотной обработки выбросов перед применением статистических тестов.

Сергей Мастицкий комментирует...

Виктор, спасибо за комментарий - будет полезен для других читателей. В своей практике я обычно полагаюсь на графический анализ (преимущественно, Q-Q plots) и, если нужно, тест Шапиро-Уилка.

По поводу выбросов: это рекомендуемый первый этап РДА. Соответственно, с него я и начал рассмотрение протокола, предалагаемого Zuur et al. (2010). См. это сообщение: http://r-analytics.blogspot.de/2012/05/blog-post_28.html

Илья Махинько комментирует...

подскажите пожалуйста, если выборка очень большая (500 тыс - 1 млн.) нужно ли ее проверять на нормальность распределения? Если да, то каким способом? тест Шапиро-Уилка применяется только на выборки до 5000

Sergey Mastitsky комментирует...

Илья, сложно дать ответ на Ваш вопрос, не зная, над какой задачей Вы работаете. Функция для выполнения теста Шапиро-Уилка действительно принимает только =< 5000 значений, но всегда можно сделать несколько случайных выборок меньшего размера и посмотреть, что получается.

Дмитрий Драганов комментирует...

Сергей, вопрос не в рамках темы, но спрошу здесь.
Есть массив данных (в районе 1000 наблюдений) по содержанию загрязняющих веществ в воде.
Проверка на нормальность показала что данные распределены логнормально или бимодально.
Можем ли мы при описании данных использовать среднее значение и стандартное отклонение. Или корректнее использовать моду и квартили, как менее чувствительные к экстремальным значениям?

Отправить комментарий