Непараметрические методы сравнения двух выборок и их применение в R

Непараметрические критерии R

В этой статье Вы узнаете, почему кроме t-теста существуют другие методы сравнения двух выборок. Начнем мы с того, что вспомним о нормальности данных и связанной с ней делением статистических тестов на две категории: параметрические и непараметрические. О последних мы поговорим более подробно: разберем три наиболее популярных теста, а также научимся их запускать в среде R.

Параметрический или непараметрический критерий различия?

Статистические методы, использующие параметры нормального распределения данных (среднее, стандартное отклонение и прочее) называются параметрическими. Так например, рассмотренный в предыдущей статье t-тест является типичным параметрическим методом. Почему? Потому, что главным условием для его проведения является нормальное распределение количественных данных. Непараметрические методы, напротив, не зависят от распределения данных и позволяют работать как с количественными, так и с порядковыми данными (например: размер обуви, шкала силы землетрясений).

При нормальном распределении данных параметрические критерии имеют большую мощность по сравнению с непараметрическими. Однако, когда данные выборок не проходят тесты нормальности (такие, как qqplot и Шапиро тест), непараметрические методы дают более точные предсказания. Особенно они эффективны с выборками небольшого размера (<100 наблюдений), на распределение которых могут влиять неизвестные факторы. Сегодня мы познакомимся с непараметрическими аналогами t-теста, использующимися также, для сравнения двух выборок. При выборе критерия следует обратить внимание на две вещи: зависимость данных выборок друг от друга и объем выборок.

Сравнение двух выборок

На приведенном выше рисунке Вы видите упрощенную классификацию методов сравнения средних (или медиан) двух выборок. Мы кратко поговорим о каждом из непараметрических критериев, и научимся применять их в среде R. Чтож, приступим!

Критерий Уилкоксона

Статистик Уилкоксон

Начнем знакомство с непараметрических тестов для зависимых выборок. Прежде всего стоит отметить, что выборки называются зависимыми, когда испытуемые одной и той же группы были протестированы в разные моменты времени с меняющимися (1) или неменяющимися (2) условиями эксперимента. В первом случае проверяется эффект какого либо действия в сравнении с контрольным измерением ("до и после"), во втором - повторяемость результатов эксперимента ("контроль-повтор").

Тест Уилкоксона (от английского "Wilcoxon signed-rank test") является широко используемым и эффективным методом выявления различий между медианами двух зависимых выборок с распределением данных отличным от нормального. Он идеально подходит для сравнения маленьких выборок, где количество испытуемых/исследований больше 5, но меньше 50. Как и для всех критериев, рассмотренных в этой статье, данные могут быть как количественными, так и порядковыми. Метод был разработан в 1945 году американским статистиком и химиком Фрэнком Уилкоксоном (фото справа).

Чтобы запустить тест Уилкоксона в среде R следует загрузить данные выборок и ввести следующую команду:

wilcox.test("выборка_1", "выборка_2", paired = T)

Как и в t-тесте, в непараметрических статистических тестах внутри скобок можно добавить дополнительные параметры, такие как alternative, conf.int, conf.level. Чтобы посмотреть все аргументы функции, поставьте перед ней знак вопроса, в нашем случае: ?wilcox.test

G-критерий знаков

Если же количество исследований в выборке больше 50, то следует использовать G-критерий знаков. Критерий знаков по статистической мощности уступает Уилкоксону, но превосходит большинство других непараметрических аналогов. Данные выборок должны быть зависимыми, количество исследований в выборке от 5, но не более 300 (про механизм расчетов и ограничения метода можно почитать здесь).

Провести тест в R не сложно, но потребуется сделать несколько манипуляций с данными. Сначала мы загрузим данные двух зависимых выборок, например систолическое (верхнее) давление до и после применения лекарства у 60 пациентов-гипертоников. Загрузим данные "before" и "after" в среду R. Затем визуализируем их.

before <- c(171.2, 169.8, 154.6, 130.9, 158.5, 145.5, 143.5, 144.7, 147.7, 160.7, 154.7, 181.8, 167.2, 137.4, 180.2, 138.7, 159.9, 141.8, 172.2, 167.0, 
            137.2, 170.9, 168.4, 163.7, 160.1, 163.5, 146.7, 173.9, 180.1, 136.0, 159.0, 145.6, 186.5, 177.7, 167.7, 167.4, 165.9, 147.2, 165.2, 133.3, 
            175.0, 174.7, 163.0, 154.1, 189.4, 166.5, 153.0, 134.3, 177.1, 150.4, 152.4, 176.2, 160.3, 135.3, 131.2, 172.1, 137.0, 156.6, 178.5, 168.1)
after <- c(179.5, 141.9, 124.7, 103.2, 143.1, 146.0, 132.2, 104.9, 145.3, 123.5, 135.2, 176.2, 142.7, 114.1, 171.9, 115.0, 126.4, 108.0, 171.7, 148.8,
           103.5, 178.5, 138.9, 150.0, 131.8, 169.2, 131.4, 138.8, 146.2, 116.1, 148.8, 109.2, 186.3, 164.1, 147.3, 165.3, 140.0, 122.6, 174.4, 104.6,
           156.6, 175.3, 126.8, 122.6, 184.0, 139.6, 149.4, 105.3, 181.9, 134.6, 129.4, 148.0, 170.2, 144.2, 133.3, 171.8, 118.4, 131.2, 150.0, 131.0)
boxplot(before, after, col = c(6,5), 
           main = "The effect of treatment", outer = TRUE)
           axis(1, at=1:2, labels=c("before","after"))

Зависимые выборки до и после

 

Затем найдем разность между векторами "before" и "after" и назовем новый вектор "difference", после чего при помощи команды length узнаем его длину. Так как нас интересует, снижает ли лекарство давление у пациентов, мы узнаем какое количество элементов в векторе "difference" больше нуля. Это количество принято называть числом "успехов".

difference <- before - after
difference
length(difference)
length(difference[difference>0])

Теперь все готово для того, чтобы запустить G-критерий знаков в R. Для этого воспользуемся командой binom.test, где в параметрах функции укажем сначала число "успехов", затем число исследований в выборке.

binom.test(50, 60)

Критерий знаков в R

Нулевая гипотеза говорит о том, что медианы выборок статистически не отличаются, альтернативная - что статистические различия есть. В нашем случае p-value значительно меньше 0.05, поэтому мы можем с уверенностью отвергнуть нулевую гипотезу и принять альтернативую: две выборки статистически отличаются друг от друга. Также мы видим, что у 83% пациентов давление снизилось. Для демонстрации статистической значимости результатов эксперимента, просто добавьте к графику надпись p-value < 0.001.

Критерий Манна-Уитни

Этот тест также был изначально разработан и опубликован Уилкоксоном в 1945 году. Однако спустя два года его существенно усовершенствовали два математика, в честь которых и был назван критерий. В отличие от двух предыдущих критериев, тест Манна-Уитни используется при сравнении двух независимых выборок, также имеющих отклонения от нормального распределения. Подробнее об алгоритме расчета данного критерия можете почитать в этой статье.

Запустить тест Манна-Уитни в R крайне просто, используем уже известную нам функцию "wilcox.test" и убираем из скобок "paired = T":

wilcox.test("выборка_1", "выборка_2")

Однако при проведении этого метода необходимо соблюдать два условия. Во-первых, одинаковые значения в выборке должны быть сведены к минимуму (все числа должны быть разными). Во-вторых, в каждой выборке должно быть не менее трех исследований (минимум 3 и 3, также допускается 5 и 2).

Заключение

Непараметрических методов существует великое множество, сегодня мы познакомились лишь с тремя наиболее используемыми критериями для сравнения двух выборок. В среде R эти тесты запустить довольно просто, поэтому главный акцент в выборе метода следует делать на его пригодность к решению конкретно Вашей задачи.

Если у Вас возникли вопросы, я буду рад ответить на них в комментариях. Также буду благодарен за критические замечания к этой статье :-)

Комментарии: 8
  1. александра

    Подскажите как сделать. У меня есть показатель (например ЧСС) мне надо сравнить его между мужчинами и женщинами. То есть у меня два столбца в одном пол в другом ЧСС и я не понимаю как написать группы для Манна-Уитни.

    1. Samoedd (Автор записи)
      https://samoedd.com

      Здесь нет ничего сложного. Тут есть два простых решения:
      1) просто в Excel сделайте таблицу из двух колонок: «Чсс мужчин» и «Чсс женщин» и примените тест, как показано в этой статье.
      2) ничего не меняйте в Excel просто дайте R понять какие именно Чсс Вы сравниваете. В Вашем случае, команда должны выглядеть так:
      wilcox.test(chss[sex==male], chss[sex==female], data=mydata)

      Переменные и имя таблицы разумеется запишите свои и все заработает. Если же нет, жду дополнительных вопросов.

  2. Ольга

    Добрый вечер, скажите , пожалуйста, какой непараметрический ( ненормальное распределение, независим группы) метод использовать , если в 1 группе n =7, а в 2 группе n=27 ??? Критерий манна уитни не подходит, т к нет критического значения для выборки больше 20 для этого критерия

    1. Samoedd (Автор записи)
      https://samoedd.com

      Извините, что не отвечал. Был в отпуске.
      «Нет критического значения для выборки больше 20 для этого критерия» — не совсем понял, что Вы хотите этим сказать.

  3. Дмитрий

    Скажите, а если сравнивать две разные группы (группа 1 есть фактор риска) (группа 2 нет фактора риска) при этом, наличие фактора риска отмечает бинарно(0-нет исхода, 1-есть исход) Какой формулой, или каким критерием сравнивать эти две группы? (Манна-Уитни не подходит, потому что фактически все значения будут одинаковыми-либо 0 либо 1), Эти выборки независимы, т.е. две разных группы пациентов,поэтому Уилкоксона тоже не подходит. И критерий Стьюдента тоже не подходит, потому что это ненормальное распределение (просто бинарное значение). ПОдскажите пожалуйста

    1. Samoedd (Автор записи)
      https://samoedd.com

      Здравствуйте, Дмитрий!

      Если выборка большая, то используйте тест Хи-квадрат:
      chisq.test("группа 1", "группа 2")

      Если же в таблице частот (2×2) есть значение меньше 5, либо сумма объемов двух выборок меньше 20, то используйте тест Фишера:
      fisher.test("группа 1", "группа 2")

      1. Дмитрий

        выборка большая: (n=200 и вторая группа n=200), проблема в том что наличие или отсутствие исхода в двух разнородных групппах записано как факторная переменная (0-нет исхода, 1-есть исход)
        < chisq.test(Первая группа$фактор==1,Вторая группа$фактор==1)
        Error in chisq.test(Первая группа$фактор==1,Вторая группа$фактор==1):
        'x' и 'y' должны иметь одну длину

        Как сравнивать один и тот же показатель в двух разных группах?

      2. Samoedd (Автор записи)
        https://samoedd.com

        Возможно я чего-то не понимаю, но зачем Вы выбираете только фактор равный 1? На мой взгляд, суть метода в том, чтобы сравнить распределение 0 и 1 в первой выборке с распределением 0 и 1 во второй. Просто используйте:
        chisq.test(Первая группа, Вторая группа)

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *