Сравнение двух групп

Постановка задачи

Есть данные по одному количественному показателю в двух группах, нужно определить, отличаются ли значения показателя в одной группе от значений показателя в другой группе.

Примеры

Определить, правда ли, что средний балл по английскому языку у девочек выше, чем у мальчиков; проверить, действительно ли скорость реакции у людей, которые водят машину, отличается от скорости реакции людей, которые машину не водят.

Методы для сравнения

  • t-критерий Стьюдента для двух выборок (two sample Student’s t-test);
  • критерий Уилкоксона (Wilcoxon test).

T-критерий Стьюдента (t-тест Стьюдента)

Применение

Используется, когда распределение исследуемого количественного показателя является нормальным в обеих группах (в каждой из групп).

Нулевая и альтернативная гипотезы

Нулевая гипотеза, которая проверяется с помощью данного критерия:

\[ H_0: \mu_1 = \mu_2 \text{ (средние равны, нет различий)} \] Возможные альтернативные гипотезы:

\[ H_1: \mu_1 \ne \mu_2 \text{ или } H_1: \mu_1 < \mu_2 \text{ или } H_1: \mu_1 > \mu_2 \]

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

Статистика критерия

Статистика критерия (значение, которое позволяет понять, насколько сильно наши данные отличаются от того, что ожидается согласно нулевой гипотезе) имеет t-распределение, распределение Стьюдента с числом степеней свободы равным \(\text{df} = n_1 + n_2 - 2\), где \(n_1\) — число наблюдений в первой выборке, а \(n_2\) — число наблюдений во второй выборке.

Модификации критерия

Существуют различные модификации t-теста для разного типа выборок и разных ограничений. Мы будем обсуждать тесты для независимых выборок (пример независимых выборок: мужчины vs женщины, пример зависимых выборок: вес одних и тех же людей до и после диеты).

Есть t-тест, который предполагает, что выборки взяты из генеральных совокупностей, имеющих одинаковые дисперсии (\(\sigma_1 = \sigma_2\)), а есть t-тест, который предполагает обратное (\(\sigma_1 \ne \sigma_2\)). В R по умолчанию используется второй вариант теста с предположением о неравных дисперсиях. При желании можно сформулировать гипотезу о равенстве дисперсий, проверить ее с помощью F-критерия и сделать вывод, какой вариант t-теста нам нужен.

F-критерий (F-тест)

Нулевая и альтернативные гипотезы:

\[ H_0: \sigma_1 = \sigma_2 \text{ (дисперсии равны)} \]

\[ H_1: \sigma_1 \ne \sigma_2 \text{ (дисперсии не равны)} \] Альтернативная гипотеза могла бы быть и односторонней, но давайте остановимся на базовом варианте (в R по умолчанию будет выбрана двусторонняя гипотеза).

Статистика критерия имеет F-распределение со степенями свободы \(\text{df}_1 = n_1 - 1\) и \(\text{df}_2 = n_2 - 1\), где \(n_1\) — число наблюдений в первой выборке, а \(n_2\) — число наблюдений во второй выборке.

Реализуется F- тест в R просто. Проверим равенство дисперсий показателя x из датасета dat для двух групп, через ~ указана переменная группировки:

var.test(dat$x ~ dat$group)
## 
##  F test to compare two variances
## 
## data:  dat$x by dat$group
## F = 0.41125, num df = 18, denom df = 12, p-value = 0.08622
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
##  0.1323156 1.1387048
## sample estimates:
## ratio of variances 
##          0.4112508

Здесь

  • \(F = \dfrac{s_1^2}{s_2^2}\);
  • \(\text{num df} = n_1 - 1\), \(\text{denom df} = n_2 - 1\);
  • \(\text{p-value} = P(F > 0.41125)\).

P-value здесь более 0.05, следовательно, на 5% уровне значимости нет оснований отвергнуть нулевую гипотезу о равенстве дисперсий. Дисперсии равны.

Если нулевая гипотеза не отвергается, то стоит выбрать t-тест для случая с равными дисперсиями. Если отвергается — для случая с неравными (и так вшит в R по умолчанию, дополнительных действий не требуется).

Реализация T-критерия в R

T-test с неравными дисперсиями

Проверяем равенство средних значений показателя x из датасета dat для двух групп, через ~ указана переменная группировки:

t.test(dat$x ~ dat$group)
## 
##  Welch Two Sample t-test
## 
## data:  dat$x by dat$group
## t = 1.2662, df = 18.715, p-value = 0.221
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -21.87858  88.71259
## sample estimates:
## mean in group 0 mean in group 1 
##        160.2632        126.8462

Что содержит выдача?

1. t — наблюдаемое значение статистики критерия, считается так:

\[ t = \frac{\bar{x}_1 - \bar{x}_2}{\sqrt{\frac{s_1^2}{n_1} + \frac{s_2^2}{n_2}}}, \] где \(\bar{x_1}\) и \(\bar{x_2}\) — средние арифметические двух выборок, \(s_1^2\) и \(s_2^2\) — дисперсии двух выборок, \(n_1\) и \(n_2\) — количество наблюдений в двух выборках.

Посчитаем t «вручную» (но не без помощи R), используя информацию из выдачи и значения, посчитанные по датасету dat.

group1 <- dat[dat$group == 0, ]$x
group2 <- dat[dat$group == 1, ]$x
var(group1); var(group2)  # s1^2 и s2^2
## [1] 2906.094
## [1] 7066.474
length(group1); length(group2)  # n1 и n2
## [1] 19
## [1] 13

Получаем:

  • \(\bar{x_1} = 160.2632\) (из выдачи по тесту);

  • \(\bar{x_2} = 126.8462\) (из выдачи по тесту);

  • \(s_1^2 = 2906.094\) (см выше);

  • \(s_2^2 = 7066.474\) (см выше);

  • \(n_1 = 19\) (см выше);

  • \(n_2 = 13\) (см выше).

Итог:

\[ t = \frac{160.2632 - 126.8462}{\sqrt{\frac{2906.094}{19} + \frac{7066.474}{13}}} \approx 1.2662. \]

Совпало!

2. df — число степеней свободы t-распределения статистики, считается так (на ночь не смотреть, представлено как ответ на вопрос «откуда оно берется»):

\[ \text{df} = \frac{\big(\frac{s_1^2}{n_1} + \frac{s_2^2}{n_2}\big)^2}{\frac{s_1^4}{n_1^2(n_1-1)} + \frac{s_2^4}{n_2^2(n_2-1)}}. \]

Попробуем посчитать и сравнить со значением из выдачи.

\[ \text{df} = \frac{\big(\frac{2906.094}{19} + \frac{7066.474}{13}\big)^2}{\frac{2906.094^2}{19^2(19-1)} + \frac{7066.474^2}{13^2(13-1)}} = \frac{485150.2}{25922.5} \approx 18.715. \]

Совпало!

3. p-value, то есть вероятность \(P(\text{T} > |\text{t}|) = P(\text{t} > |1.2662|)\) = 0.221. Так p-value больше любого конвенционального уровня значимости (0.01, 0.05 и 0.1), гипотезу о равенстве средних отвергаем, средние значения в двух группах не равны.

4. Выборочные средние, наши \(\bar{x}_1\) и \(\bar{x}_2\) (sample estimates) и доверительный интервал для разности средних (95 percent confidence interval).

T-test с равными дисперсиями

Проверяем равенство средних значений показателя x из датасета dat для двух групп, через ~ указана переменная группировки, плюс, дописана опция var.equal:

t.test(dat$x ~ dat$group, var.equal = TRUE)
## 
##  Two Sample t-test
## 
## data:  dat$x by dat$group
## t = 1.3733, df = 30, p-value = 0.1798
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -16.27768  83.11169
## sample estimates:
## mean in group 0 mean in group 1 
##        160.2632        126.8462

Выдача содержит те же самые показатели, что и в тесте выше, только статистика критерия вычисляется несколько иначе.

\[ t = \frac{\bar{x}_1 - \bar{x}_2}{s\sqrt{\frac{1}{n_1} +\frac{1}{n_2}}}, \]

где

\[ s = \sqrt{\frac{(n_1−1) \cdot s^2_1+(n_2−1) \cdot s^2_2}{n_1+n_2−2}}. \]

С df проще: \(\text{df} = n_1 + n_2 - 2.\)

Можем опять все посчитать и свериться с выдачей.

\[ s = \sqrt{\frac{(19−1) \cdot 2906.094 + (13−1) \cdot 7066.474}{19+13−2}} \approx 67.604. \] \[ t = \frac{160.2632 - 126.8462}{67.604\sqrt{\frac{1}{19} +\frac{1}{13}}} \approx 1.373. \] И \(\text{df} = 19 + 13 - 2 = 30\).

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

Применение

Используется, когда распределение исследуемого количественного показателя не является нормальным хотя бы в одной из групп.

Нулевая и альтернативная гипотезы

Нулевая гипотеза, которая проверяется с помощью данного критерия:

\[ H_0: \text{выборки взяты из одного распределения} \] Альтернативная гипотеза:

\[ H_1: \text{выборки взяты из разных распределений} \] Иногда гипотезы выше формулируют иначе и говорят о равенстве (неравенстве) медиан генеральных совокупностей.

Статистика критерия

Статистика критерия имеет распределение Уилкоксона, но при больших объемах выборок (более 30 наблюдений в каждой) можно перейти к стандартизованной статистике, которая будет иметь стандартное нормальное распределение (z-распределение).

Реализация критерия Уилкоксона в R

wilcox.test(dat$x ~ dat$group)
## Warning in wilcox.test.default(x = c(110, 175, 105, 245, 62, 95, 123,
## 123, : cannot compute exact p-value with ties
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  dat$x by dat$group
## W = 176, p-value = 0.0457
## alternative hypothesis: true location shift is not equal to 0

1. W здесь — наблюдаемое значение статистики критерия, которое считается так:

\[ W = S_1 + S_2 + \dots + S_n, \] где \(S_1 \dots S_n\) — ранги наблюдений выборки большего размера, которые вычисляются по общей совокупности выборок. Другими словами мы «смешиваем» выборки, вычисляем ранги всех наблюдений, потом из них выбираем только те, которые относятся к большей выборке и их суммируем. Единственное, тот метод, который используется в R, еще вычитает из суммы рангов минимальное возможное значение ранга:

\[ W = S_1 + S_2 + \dots + S_n - \frac{n_1(n_1 + 1)}{2}, \] где \(n_1\) — число элементов в большей выборке.

Посчитаем все в полуавтоматическом режиме:

two_groups <- c(group1, group2) # склеили выборки (общая совокупность выборок)
rank(two_groups) # посчитали ранги
##  [1] 13.0 21.0 10.0 29.5  2.0  8.0 16.5 16.5 24.0 24.0 24.0 26.0 27.0 28.0
## [15]  9.0 18.5 18.5 29.5 21.0 13.0 13.0  7.0  4.5  1.0  3.0  4.5  6.0 15.0
## [29] 31.0 21.0 32.0 11.0
rank(two_groups)[1:19] # выбрали только ранги для 1ой выборки, она больше, 19 наблюдений
##  [1] 13.0 21.0 10.0 29.5  2.0  8.0 16.5 16.5 24.0 24.0 24.0 26.0 27.0 28.0
## [15]  9.0 18.5 18.5 29.5 21.0
sum(rank(two_groups)[1:19]) # суммировали
## [1] 366
sum(rank(two_groups)[1:19]) - 19 * (19 + 1) / 2 # вычли минимально возможный ранг
## [1] 176

Значение совпало с тем, что было в выдаче (W = 176)!

2. p-value — вероятность \(P(W > 176)\). Здесь p-value менее 0.05, поэтому на 5% уровне значимости нулевую гипотезу стоит отвергнуть. Выборки взяты из разных распределений — различия в распределениях по группам есть.