В одном из предыдущих сообщений я описал расчет критерия Стьюдента при помощи соответствующей функции, входящей в базовую комплектацию R - t.test(). Одно из важных условий корректного применения критерия Стьюдента состоит в том, что анализируемые выборки должны происходить из нормально распределенных генеральных совокупностей. В случаях, когда это условие не выполняется, вместо критерия Стьюдента следует использовать его непараметрический аналог - критерий Уилкоксона (Wilcoxon rank test). Здесь следует сразу пояснить, что создатели системы R под названием "критерий Уилкоксона" (или "тест Уилкоксона") объединяют как собственно метод, предложенный Фрэнком Уилкоксоном (Frank Wilcoxon) в 1945 г., так и опубликованный несколько позднее (1947 г.) метод Манна-Уитни. Первый из этих методов обычно используется для сравнения двух связных выборок, тогда как второй предназначен для сравнения двух независимых выборок. Ниже я не буду разграничивать эти методы, придерживаясь подхода, принятого в системе R.
Одновыборочный критерий Уилкоксона
Одновыборочный критерий Уилкоксона
Этот вариант критерия (Wilcoxon signed rank test) служит для проверки нулевой гипотезы о том, что анализируемая выборка происходит из симметрично распределенной генеральной совокупности с центром в точке µ0. Алгоритм метода заключается в следующем:
- µ0 отнимают от каждого выборочного значения;
- получившиеся величины ранжируют по возрастанию, игнорируя знак;
- ранговые номера со знаком + суммируют, получая величину V;
- критерий V сравнивают с критическим значением для заданного уровня значимости и числа степеней свободы; альтернативный подход на этом шаге заключается в нахождении вероятности случайным образом получить значение V, равное или превышающее наблюдаемое значение, при условии истинности нулевой гипотезы.
d.intake <- c(5260, 5470, 5640, 6180, 6390, 6515, 6805, 7515, 7515, 8230, 8770)
Необходимо выяснить, отличается ли потребление энергии в группе обследованных женщин от рекомендованного значения 7725 кДж/сутки. Для выполнения теста Уилкоксона в системе R используется функция wilcox.test():
wilcox.test(d.intake, mu = 7725) Wilcoxon signed rank test with continuity correction data: d.intake V = 8, p-value = 0.0293 alternative hypothesis: true location is not equal to 7725 Warning message: In wilcox.test.default(d.intake, mu = 7725) : cannot compute exact p-value with ties
Видим, что рассчитанное значение критерия V = 8. Вероятность получить такое (или превышающее его) значение при условии, что нулевая гипотеза верна, не превышает 0.05 (p-value = 0.0293). Это позволяет нам отклонить нулевую гипотезу о том, что суточное потребление энергии у обследованных 11 женщин не отличается от принятой нормы. Обратите внимание на выданное программой предупреждение о том, что полученное значени вероятности Р не является точным из-за наличия в данных повторяющихся значений (Warning message... cannot compute exact p-value with ties). Проблема рассчета точных Р-значений при наличии повторяющихся наблюдений в данных характерна для статистических методов, основанных на рангах, и критерий Уилкоксона здесь, увы, не исключение (но см. функцию wilcox_test() из пакета coin). При наличии повторяющихся наблюдений Р-значение рассчитывается путем аппроксимации распредения критерия Уилкоксона нормальным распределением (см. справочный файл по функции ?wilcox.test).
Сравнение двух зависимых выборок
Понятие "зависимые", или "связные выборки" обсуждалось ранее в сообщении, посвященном критерию Стьюдента. Сейчас для нас более важен тот факт, что сравниваемые выборки происходят из ненормально распределенных генеральных совокупностей. Тем не менее, сравнение таких выборок при помощи критерия Уилкоксона происходит сходно с тем, как это делается при помощи парного критерия Стьюдента. В частности, находят разницу между всеми имеющимися парными выборочными наблюдениями с целью проверить нулевую гипотезу о том, что медиана полученных разностей равна нулю (либо какому-либо другому, отличному от нуля значению). (Важно упомянуть широко распространенное ошибочное представление о том, что критерий Уилкоксона применяется для сравнения выборочных медиан).
Используем рассмотренный ранее пример о суточном потреблении энергии, измеренном у одних и тех же 11 женщин до и после периода менструаций:
Сравнить два периода по потреблению энергии при помощи критерия Уилкоксона можно следующим образом (обратите внимание на использование аргумента paired = TRUE):
wilcox.test(pre, post, paired = TRUE) Wilcoxon signed rank test with continuity correction data: pre and post V = 66, p-value = 0.00384 alternative hypothesis: true location shift is not equal to 0 Warning message: In wilcox.test.default(pre, post, paired = T) : cannot compute exact p-value with ties
Как видим, рассчитанное программой P-значение оказалось меньше 0.05, что позволяет нам сделать заключение о наличии статистически значимой разницы в потреблении энергии у исследованных женщин до и после менструации. (Для сравнения: Р-значение, полученное при помощи критерия Стьюдента было << 0.001). Мы можем оценить доверительный интервал, в котором с определенной вероятностью находится истинная величина эффекта, воспользовавшись аргументом conf.int (вероятность задается при помощи аргумента conf.level; по умолчанию рассчитывается 95%-ный доверительный интервал):
wilcox.test(pre, post, paired = TRUE, conf.int = TRUE) Wilcoxon signed rank test with continuity correction data: pre and post V = 66, p-value = 0.00384 alternative hypothesis: true location shift is not equal to 0 95 percent confidence interval: 1037.5 1582.5 sample estimates: (pseudo)median 1341.332 Warning messages: 1: In wilcox.test.default(pre, post, paired = TRUE, conf.int = TRUE) : cannot compute exact p-value with ties 2: In wilcox.test.default(pre, post, paired = TRUE, conf.int = TRUE) : cannot compute exact confidence interval with ties
Видим, что истинная разница уровней потребленной энергии с вероятностью 95% находится в интервале от 1037.5 до 1581.5 кДж/сутки (для сравнения: при использовании критерия Стьюдента этот интервал составил 1074.1 - 1566.8 кДж/сутки). Опять-таки, из-за наличия повторяющихся наблюдений, рассчет точных доверительных пределов оказался невозможным (см. пункт 2 в списке предупреждений Warning messages). Псевдомедиана ((pseudo)median) индивидуальных разниц между парными значениями потребления энергии была оценена в 1341.3 кДж/сутки. (Псевдомедианой распределения F называют медиану распределения (u + v) / 2, где u и v являются независимыми переменными, каждая из которых имеет распределение F. Если распределение F симметрично, псевдомедиана и медиана совпадают. Подробнее см. ?wilcox.test).
Сравнение двух независимых выборок
Если сравниваемые выборки являются независимыми (paired = FALSE), то мы имеем дело с критерием Уилкоксона, который в англоязычной литературе называют Wilcoxon rank sum test (как было отмечено выше, этот метод называют также методом Манна-Уитни). Проверяемая с его помощью нулевая гипотеза состоит в том, что центры распределений, из которых происходят сравниваемые выборки, смещены относительно друг друга на величину µ (например, µ = 0). Алгоритм метода состоит в следующем:
- Все имеющиеся значения ранжируют, игнорируя их знак;
- Ранги значений, принадлежащих к первой группе, суммируют, получая величину W;
- Полученное W сравнивают со значением, которое можно было бы ожидать при верной нулевой гипотезе и имеющемся числе степеней свободы; альтернативный подход - находят вероятность случайным образом получить значение W, равное или превышающее наблюдаемое значение (при условии истинности нулевой гипотезы).
Проверим гипотезу об отсутствии разницы в потреблении энергии у женщих из этих двух групп при помощи критерия Уилкоксона для независимых выборок:
wilcox.test(expend ~ stature, paired = FALSE) Wilcoxon rank sum test with continuity correction data: expend by stature W = 12, p-value = 0.002122 alternative hypothesis: true location shift is not equal to 0 Warning message: In wilcox.test.default(x = c(7.53, 7.48, 8.08, 8.09, 10.15, 8.4, : cannot compute exact p-value with ties
Согласно полученному Р-значению (p-value = 0.002122), потребление энергии у женщин из рассамтриваемых весовых групп статистически значимо различается. Отвергая нулевую гипотезу о равенстве потребляемой энергии, мы рискуем ошибиться с вероятностью лишь около 0.2%.
Важно отметить одно из ограничений критерия Уилкоксона для двух выборок (зависимых или независимых): если общее количество наблюдений не превышает 6, то обнаружить разницу между выборками с уровнем ошибки в 5% просто невозможно (Dalgaard 2008).
wilcox.test(pre,post,paired=TRUE) дает V=66, а
wilcox.test(post,pre,paired=TRUE) дает V=0.
На значимость результата это не влияет, но может создавать путаницу. Большинство статистических программ приводит большее значение статистики Уилкоксона, старые учебники (например, учебник Лакина) рекомендуют приводить меньшее. А тут мы не знаем заранее, какое значение будет больше, а какое - меньше. Возможно, имеет смысл вычислять оба значения?
Все дело в том, как в R рассчитывается статистика V: суммируются ранги разниц, имеющих положительный знак. Если посмотреть внимательнее на конкретный рассмотренный в сообщении пример, то можно выяснить следующее:
pre - post
[1] 1350 1250 1755 1020 745 1835 1540 1540 725 1330 1435
в то время как
post - pre
[1] -1350 -1250 -1755 -1020 -745 -1835 -1540 -1540 -725 -1330
[11] -1435
Соответственно, если мы выполним тест в виде wilcox.test(pre, post, paired = TRUE), то получим V, отличное о нуля, поскольку имеются разницы с положительным знаком (фактически, все они положительны). Если же мы поменяемя аргументы местами - wilcox.test(post, pre, paired = TRUE) - то все разницы окажутся отрицательными, и V-статистика будет равна 0.
В обоих случаях Р-значение оказывается одинаковым, поскольку программа по сути проверяет, отличается ли найденный интервал значений V (здесь 0:66) от теоретически ожидаемого. Если найденный интервал входит в теоретически ожидаемый, следует вывод о том, что нулевая гипотеза верна.
Причины расхождения в значениях V и W для меня понятны - они явно следуют из вычислительного алгоритма, как и то, что уровень значимости будет одинаковым. Меня больше интересовал другой вопрос - как представлять результаты вычислений.
Например, допустим, что несколько исследователей независимо анализирует потребление энергии так, как в вышеприведенном примере, с тем, чтобы потом сопоставить результаты. Если нет никакой предварительной договоренности, примерно половина из них будет вычислять (pre - post), а другая половина - (post - pre). В итоге, на выходе значения p-level будут сопоставимы, а вот значения V - едва ли. Возможно, стоило бы выводить в результатах весь найденный интервал (в исходном примере - 0:66)?
Хочу поблагодарить Вас за блог, который Вы ведете. Вырисовывается отличный сборник рекомендаций для начинающих пользователей. Изложение очень четкое, логичное, изучение приводимых алгоритмов действительно помогает в работе.
По поводу представления результатов анализа. У меня относительно мало опыта работы с русскоязычными научными изданиями, и я слабо представляю их требования к представлению результатов подобных тестов. В англоязычных журналах обычно бывает достаточно привести вывод, сделанный по результам выполнения теста, и подтвердить его уровнем Р. Например: "Установлена статистически значимая разница в потреблении энергии в исследованных группах (Р = 0.002, Wilcoxon test)". При условии, что в разделе "Материалы и методы" указаны объемы исследованных групп, этого будет вполне достаточно.
В случаях же, когда все-таки есть необходимость привести конкретное значение той или иной статистики, я бы просто описал (в разделе "Материалы и методы"), как именно эта статистика была рассчитана.
О представлении результатов статистических тестов в нашей литературе промолчу.
Отправить комментарий