Классический критерий Манна-Уитни позволяет проверить нулевую гипотезу о равенстве распределений в двух выборках. Простота общей идеи (взять две выборки, смешать их в одну и работать с рангами значений, относящихся к первой и второй выборке) позволяет задуматься над тем, как обобщить ее на случай, если выборок больше двух.
Собственно, именно про это и рассказывается в статье Fisher, D., Oja, H. Mann-Whitney Type Tests for Microarray Experiments: The R Package gMWT / Journal of Statistical Software. 2015. Volume 65, Issue 9.
Минутка теории
Возьмем несколько выборок, и проверим гипотезу о равенстве их распределений.
Для классического случая двух выборок получим, что значение статкритерия равно математическому ожиданию величины
![I() - функция, возвращающая 1 при выполнения условия в скобках, и 0 – при невыполнении I() - функция, возвращающая 1 при выполнения условия в скобках, и 0 – при невыполнении](https://habrastorage.org/getpro/habr/upload_files/958/429/512/958429512182213f4b4f9ea5a1ccb925.png)
Соответственно, проверка нулевой гипотезы – это проверка гипотезы о равенстве матожидания ½ (если одно из распределений будет смещено существенно правее, то матожидание устремится к 0 или 1)
Куда интереснее все для случая, например, трех выборок.
Там уже необходимо искать матожидание выражения
![](https://habrastorage.org/getpro/habr/upload_files/980/47d/e3c/98047de3c5bcb5ad7cad8765de0c6fc2.png)
Тогда нулевая гипотеза о равенстве всех этих распределение эквивалентна проверке гипотезы о равенстве статкритерия 1/6.
С альтернативными же гипотезами несколько сложнее. Авторы выделили следующие виды альтернативных гипотез:
![](https://habrastorage.org/getpro/habr/upload_files/a50/fa7/644/a50fa7644070c00db721d226621ab6f9.png)
- первый тип альтернативных гипотез – распределение какой-то пары переменные неодинаково;
- второй тип альтернативных гипотез – в одной из какой-то пары переменных распределение одной из них смещено вправо;
- третий тип альтернативных гипотез: распределение двух переменных смещено вправо относительно третьей;
- четвертый тип гипотезы: распределения всех трех переменных последовательно смещены вправо относительно друг друга
Практика
Теперь попробуем что-то посчитать. Для этого в пакете есть две основные функции – estPI и gmw
Функция estPI вычисляет непосредственно математическое ожидание приведенных выше функций (фактически, величину статкритерия), gmw – непосредственно проводит статистический тест.
Возьмем датафрейм CASchools, и проверим гипотезу о равенстве распределений величины количества студентов, которых оценивают по разным системам оценок:
library(AER)
library(dplyr)
library(gMWT)
data("CASchools")
data <- as.matrix(CASchools[,c(4,5)] %>% arrange(desc(grades)))
gmw(data[,2], data[,1],test="kw",type="external")
![](https://habrastorage.org/getpro/habr/upload_files/20e/7fe/242/20e7fe24209b59ff50a0c5b1481f5f58.png)
Р-значение: 0.5823868, что больше традиционного критического значения в 0.05, значит, мы не можем отвергнуть нулевую гипотезу о равенстве распределений. График плотности распределений, в принципе, говорит нам нечто похожее:
![](https://habrastorage.org/getpro/habr/upload_files/0a4/5bb/665/0a45bb6650549854e5bfc91604d50773.png)
Посмотрим на то, как это работает в случае трех выборок. Возьмем датафрейм PSID1776 и проверим гипотезу о равенстве распределений количества часов работы для работников с разным количеством молодых детей (от 0 до 2, тех, у кого 3 ребенка, из выборки убираем)
data("PSID1976")
glimpse(PSID1976)
table(PSID1976$youngkids)
data <- as.matrix(PSID1976[PSID1976$youngkids < 3,c(2,3)] %>% arrange(desc(youngkids)))
gmw(X=data[,1], g=data[,2],test="triple")
![](https://habrastorage.org/getpro/habr/upload_files/df2/cb3/567/df2cb3567438e63a26f97cadee8eac83.png)
Для данной альтернативной гипотезы р-значение равно 1, нулевую гипотезу отвергать нельзя. График распределения показывает что-то похожее
![](https://habrastorage.org/getpro/habr/upload_files/439/ca2/1bc/439ca21bc2075ac4c3d746e3c7b487fc.png)
Ну а для быстрой проверки других альтернативных гипотез можно использовать функцию estPI
res_2 <- estPI(data[,1], data[,2], type="pair", goi=NULL, mc=1, order=TRUE, alg="Cnaive")
res_2
res_2 <- estPI(data[,1], data[,2], type="triple", goi=NULL, mc=1, order=TRUE, alg="Cnaive")
res_2
![](https://habrastorage.org/getpro/habr/upload_files/bca/c97/f43/bcac97f43c3621a0fb38112020ad72f5.png)
В данном случае обозначения групп связаны с количеством детей: группа 1 – работники, у которых нет детей; группа 2 – работники, у которых 1 ребенок, группа 3 – работники, у которых 2 ребенка.
По графику функций распределения – чем больше детей, тем левее смещено распределение.
Об этом свидетельствует значения критериев – все они меньше 0.5, что говорит о невыполнимости условия x<y – чаще встречается x>y
Дополнительно
Дополнительно функционал данного пакета может применяться для проверки гипотез о соответствии распределения некоторому закону.
Возьмем пакет LNPar, где рассматривается распределение, состоящее из смеси логнормального и распределения Парето; однако в пакете не рассматривается функционал проверки гипотез.
Берем данные датафрейма CASchools и построим график распределения величины дохода школьников
library(LNPar)
ggplot(CASchools, aes(x = income)) +
geom_density(alpha = 0.2)
![](https://habrastorage.org/getpro/habr/upload_files/611/a36/0ff/611a360ff2e809019e4fdc6adf0c6bae.png)
# Подгоним под данные значения функции распределения
LPfit(CASchools$income,90,0)
# Вытащим исходные значения и создадим данные по распределению:
income <- (CASchools$income)
income_Sim <- (rLnormParMix(420,pi=.9574806,mu=2.598694,sigma=0.3307882,xmin=33.455,alpha=5.753251))
# Проверим гипотезу о равенстве распределений
data_3 <- as.data.frame(cbind(income,income_Sim))
gmw(data_3[,2], data_3[,1],test="kw",type="external")
![](https://habrastorage.org/getpro/habr/upload_files/663/0bb/068/6630bb0689055245c77b24337df443b8.png)
По результатам теста – нельзя отвергнуть гипотезу о равенстве распределений. Посмотрим на график:
![](https://habrastorage.org/getpro/habr/upload_files/de3/61b/ab0/de361bab0603d738ac2170fccc064dbb.png)
Графики плотности распределений исходных и симулированных данных похожи – значит, можно сказать, что распределение значений доходов школьников подчиняется смеси логнормального и Парето-распределений.