Соблюдаю ли я правильные процедуры с помощью функции dunn.test?

Я проверил различия между участками отбора проб с точки зрения значений численности, используя kruskal.test, Однако я хочу определить множественные различия между сайтами.

dunn.test Функция имеет возможность использовать векторные данные с категориальным вектором или использовать выражение формулы как lm,

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

library(dunn.test)

df<-data.frame(a=runif(5,1,20),b=runif(5,1,20), c=runif(5,1,20))

kruskal.test(df)

dunn.test(df)

Мои результаты были:

Kruskal-Wallis chi-squared = 6.02, df = 2, p-value = 0.04929  

Kruskal-Wallis chi-squared = 6.02, df = 2, p-value = 0.05  

      Comparison of df by group                           

      Between 1 and 2   2.050609, 0.0202
      Between 1 and 3  -0.141421, 0.4438
      Between 2 and 3  -2.192031, 0.0142

1 ответ

Решение

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

Исправление для нескольких сравнений

Для данных вашего примера я буду использовать вариант Бенджамини-Екутиэли " Ложного обнаружения" (FDR). Причины, по которым я считаю это хорошим исполнителем для ваших данных, выходят за рамки Stackru, но вы можете прочитать больше об этом и других методах исправления здесь. Я также предлагаю вам прочитать соответствующие документы; большинство из них имеют открытый доступ.

library(dunn.test)

set.seed(711) # set pseudorandom seed

df <- data.frame(a = runif(5,1,20),
                 b = runif(5,1,20), 
                 c = runif(5,1,20))

dunn.test(df, method = "by") # correct for multiple comparisons using "B-Y" procedure

# Output
data: df and group
Kruskal-Wallis chi-squared = 3.62, df = 2, p-value = 0.16


                           Comparison of df by group                           
                             (Benjamini-Yekuteili)                             
Col Mean-|
Row Mean |          1          2
---------+----------------------
       2 |   0.494974
         |     0.5689
         |
       3 |  -1.343502  -1.838477
         |     0.2463     0.1815

alpha = 0.05
Reject Ho if p <= alpha/2

Интерпретация результатов

Первая строка в каждой ячейке предоставляет попарно z-тестовую статистику Данна для каждого сравнения, а вторая строка содержит ваши скорректированные p-значения.

Обратите внимание, что после поправки на множественные сравнения ни один из ваших парных тестов не имеет значения при альфа-уровне 0,05, что неудивительно, учитывая, что каждый из ваших примеров "сайтов" был сгенерирован абсолютно одинаковым распределением. Я надеюсь, что это было полезно. Приятного анализа!

PS В будущем вы должны использовать set.seed() если вы собираетесь построить пример данных с использованием runif (или любой другой вид генерации псевдослучайных чисел). Кроме того, если у вас есть другие вопросы о статистическом анализе, лучше задать их по адресу: https://stats.stackexchange.com/

Другие вопросы по тегам