Альтернатива p-value для проверки статистической гипотезы.

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

Одним из них является метод многократного перемешивания или shuffling данных и проверка статистической значимости результата. Суть метода очень проста и понятна любому кто знаком с теорией вероятности и математической статистикой. Для начала посчитаем разницу между средними обоих групп. Это делается на этой строчке:

observation <- diff(by(data, groups, mean))

Теперь займемся непосредственно shuffling. Язык R очень выразительный и позволяет писать сложные вещи очень просто.

iterations <- 1000
generated <- unlist(lapply(1:iterations, function(elt) {
diff(by(data, sample(groups, length(groups), FALSE), mean))
}))

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

Теперь самое интересное. Давайте проверим статистическую значимость измерений. Для этого воспользуемся two-tailed test.

sprintf(“two-tailed test: %f”, (sum(abs(generated) > abs(observation)) + 1)

Сраним результаты с p-value.

sprintf("p-value: %f", t.test(x, y)$p.value)

Примеры значений.

[1] "two-tailed test: 0.003996"
[1] "p-value: 0.002953"

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

  • В данных встречаются outliers, классический тест будет слишком чувствителен.
  • У вас мало данных.
  • Ваши данные имеют не совсем подходящее распределение для классического теста.

Весь код можно найти здесь.

Like what you read? Give Denis Gabaydulin a round of applause.

From a quick cheer to a standing ovation, clap to show how much you enjoyed this story.