#r #statistics
#r #Статистика
Вопрос:
когда я использую wilcox.test для запуска непараметрического теста Манна Уитни U, возвращаемое значение W является большим из двух значений U. Мне это кажется странным, поскольку тест MWU использует меньшее из двух значений U в качестве статистики теста, поэтому я хотел бы увидеть это значение для отчета о данных. Ниже приведен пример. Если я запускаю код в R, значение W указано в 214.
wilcox.test(disp ~ am, data = mtcars)
Но если я вычислю это с помощью другой программы или веб-сайта (мне нравится этот калькулятор: https://www.socscistatistics.com/tests/mannwhitney /), я получаю, что два значения U равны 33 и 214. Затем мы используем 33 для проверки критического значения и сообщаем об этом значении.
Существует ли какой-либо пакет, который вычисляет MWU более удобным для пользователя способом, где он показывает правильное / меньшее значение U в качестве статистики теста? Я попробовал версию rstatix, и она делает то же самое. Кроме того, кто-нибудь знает, почему это будет поведение по умолчанию? Это кажется нелогичным.
Ответ №1:
Если у вас есть данные в широком формате, используйте wilcox.test
формат с двумя аргументами, а не формат формулы. Переключение аргументов предоставит два U
значения.
Поворот mtcars
на широкий:
library(dplyr)
library(magrittr)
mtcars_wide<- mtcars %>%
pivot_wider(names_from = "am", values_from = "disp", names_prefix = "am_")
Используйте формат с двумя аргументами для wilcox.test
, чтобы получить каждый U
:
mtcars_wide %$% wilcox.test(am_0, am_1, data = .)$statistic # 214
mtcars_wide %$% wilcox.test(am_1, am_0, data = .)$statistic # 33
Примечание: Не имеет значения, как вы перемещаете данные в широкий формат — я использую пакеты tidyverse, но они не нужны. Дело в том, что вы можете получить каждое U
из них, поменяв местами имена столбцов при запуске теста.
Комментарии:
1. Я думаю, также может стоить отметить, что ни одно из значений U не является «правильным»;
stats::wilcox.test.default
показывает, что R соответствующим образом обрабатывает разные хвосты:p <- if (STATISTIC > (n.x * n.y/2)) pwilcox(STATISTIC - 1, n.x, n.y, lower.tail = FALSE) else pwilcox(STATISTIC, n.x, n.y)
Ответ №2:
Обратите wilcox.test
внимание, что функция в пакете статистики не следует тому же соглашению, t.test
что и и меняет знак тестовой статистики на основе знака сгруппированных различий. Он вычисляет другую оценку статистики теста с тем же уровнем значимости. Знак статистики V теста всегда будет положительным, поскольку он представляет собой сумму положительных рангов со знаком.
Рассмотрите возможность ручного изменения порядка уровней коэффициентов, если вам нужно другое число mtcars пример
wilcox.test(disp ~ am, data = mtcars)
#> Wilcoxon rank sum test with continuity correction
#>
#> data: disp by am
#> W = 214, p-value = 0.0005493
#> alternative hypothesis: true location shift is not equal to 0
mtcars$am <- factor(mtcars$am, levels = c(1,0))
wilcox.test(disp ~ am, data = mtcars)
#> Wilcoxon rank sum test with continuity correction
#>
#> data: disp by am
#> W = 33, p-value = 0.0005493
#> alternative hypothesis: true location shift is not equal to 0