Какой статистический тест использовать для теста А / Б?


12

У нас есть две когорты по 1000 образцов в каждой. Мы измеряем 2 величины в каждой когорте. Первая - это двоичная переменная. Второе - действительное число, которое следует за распределением тяжелых хвостов. Мы хотим оценить, какая группа лучше всего подходит для каждой метрики. Есть много статистических тестов на выбор: люди предлагают z-тест, другие используют t-тест, а другие Манн-Уитни U.

  • Какой тест или тесты мы должны выбрать для каждой метрики для нашего случая?
  • Что произойдет, если один тест предполагает значительную разницу между когортами, а другой - незначительную разницу?

Ответы:


12

Учитывая, что ваши две метрики: 1) двоичные и 2) тяжелые, вы должны избегать t-критерия, который предполагает нормальное распределение.

Я думаю, что Mann-Whitney U - ваш лучший выбор, и он должен быть достаточно эффективным, даже если ваши дистрибутивы были почти нормальными.

По поводу вашего второго вопроса:

Что произойдет, если один тест предполагает значительную разницу между когортами, а другой - незначительную разницу?

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

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

Как правило, я бы рекомендовал вам не запускать тесты, если какие-либо из его предположений явно нарушены.

РЕДАКТИРОВАТЬ: Для второй переменной может быть целесообразным преобразовать переменную в переменную, которая обычно распределяется (или, по крайней мере, близко), пока преобразование сохраняет порядок. Вы должны быть уверены, что преобразование дает нормальное распределение для обеих когорт. Если вы подгоняете вторую переменную к логарифмически нормальному распределению, то функция логарифма преобразует ее в нормальное распределение. Но если распределение - это Парето (степенной закон), то преобразования в нормальное распределение не происходит.

РЕДАКТИРОВАТЬ: Как предлагается в этом комментарии , вы должны определенно рассмотреть байесовскую оценку в качестве альтернативы t-тестированию и другим тестам значимости нулевой гипотезы (NHST).


Спасибо за информацию. Я не был достаточно ясен, у меня есть две величины, одна из которых является двоичной, а другая - вещественным числом после распределения тяжелых хвостов. Я отредактировал вопрос, чтобы уточнить это.
iliasfl

Да, я думаю, что понимаю. Вы хотите запустить тест дважды, один раз для двоичной переменной и один раз для реальной переменной (распределение с тяжелыми хвостами). Я рекомендую использовать Mann-Whitney U для обоих.

Почему Манн-Уитни подходит для двоичных данных?
Glen_b

Mann-Whitney U эффективен для ненормальных распределений, включая дискретные распределения с двумя значениями (то есть, бинарными). Если бы все данные были двоичными, то, возможно, другой тест работал бы лучше.
MrMeritology

Может кто-нибудь подтвердить, правда ли это? ...

7

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

Для ваших реальных данных вы должны сделать следующее:

  1. Объедините свои две когорты.
  2. Из пула выберите две группы по 1000 элементов с заменой.
  3. Рассчитайте разницу в среднем по выборке между двумя группами.
  4. Повторите шаги 2 и 3 несколько тысяч раз, чтобы определить распределение этих различий.

Получив это распределение, рассчитайте разницу в средних для ваших фактических выборок и вычислите значение p.


Спасибо, так что вы получите распределение, которое должно быть нормальным с некоторым средним и стандартным отклонением. Как бы вы вычислили p-значение из этого и, возможно, доверительные интервалы, чтобы определить победителя (если он есть)?
iliasfl

Распределение не обязательно будет нормальным. Было бы примерно распределение того, из чего было взято. В этом прелесть использования бутстрапа. В любом случае вы получите значение p, рассчитав статистику теста на основе ваших фактических результатов. Т.е. разница в средствах каждой когорты. Затем сравните это число с распределением. Полученный вами процентиль - это ваше p-значение для одностороннего теста на разницу в среднем.
Натан Гулд

4
То, что Натан описывает, также является основой для байесовских методов проверки значимости. Я использовал (и в настоящее время использую) байесовскую оценку, заменяющую подход T-Test (BEST). Вам следует взглянуть на эту платформу, если вы намерены реализовать подход пула.
cwharland

0

Я второй @ ответ MrMeritology. На самом деле мне было интересно, будет ли тест MWU менее мощным, чем тест независимых пропорций, поскольку в учебниках, которые я изучал и использовал для обучения, говорилось, что MWU можно применять только к порядковым (или интервальным / соотношением) данным.

Но мои результаты моделирования, приведенные ниже, показывают, что тест MWU на самом деле немного более мощный, чем тест пропорции, при этом хорошо контролируя ошибку типа I (при доле населения группы 1 = 0,50).

введите описание изображения здесь

Доля населения группы 2 сохраняется на уровне 0,50. Количество итераций составляет 10000 в каждой точке. Я повторил симуляцию без коррекции Йейт, но результаты были такими же.

library(reshape)

MakeBinaryData <- function(n1, n2, p1){
  y <- c(rbinom(n1, 1, p1), 
        rbinom(n2, 1, 0.5))
  g_f <- factor(c(rep("g1", n1), rep("g2", n2)))
  d <- data.frame(y, g_f)
  return(d)
}

GetPower <- function(n_iter, n1, n2, p1, alpha=0.05, type="proportion", ...){
  if(type=="proportion") {
    p_v <- replicate(n_iter, prop.test(table(MakeBinaryData(n1, n1, p1)), ...)$p.value)
  }

  if(type=="MWU") {
    p_v <- replicate(n_iter, wilcox.test(y~g_f, data=MakeBinaryData(n1, n1, p1))$p.value)
  }

  empirical_power <- sum(p_v<alpha)/n_iter
  return(empirical_power)
}

p1_v <- seq(0.5, 0.6, 0.01)
set.seed(1)
power_proptest <- sapply(p1_v, function(x) GetPower(10000, 1000, 1000, x))
power_mwu <- sapply(p1_v, function(x) GetPower(10000, 1000, 1000, x, type="MWU"))

ваш результат - все черное
Ooker
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.