ANOVA в рядах VS kruskal Уоллис, насколько он отличается - PullRequest
0 голосов
/ 30 апреля 2020

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

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

У меня обычно есть два решения: преобразовать мои данные или использовать непараметрический c эквивалент моего теста (здесь критерий ранга Крускала Уоллиса).

Ни одно из преобразований, которые я пробовал удалось удовлетворить нормальность (log, 1 / x, квадрат root, мощность tukey и boxcox), поэтому я хотел использовать kruskal и двигаться дальше.

Однако, мой менеджер проекта настоял на том, чтобы иметь только ANOVAs и говорил о ANOVA по рангу как о магическом c решении.

Работая над RI, я нашел несколько примеров и нашел функцию art из пакета ARTool, которая выполняет анову по рангу.

library(ARTool)
model <- art(variable~treatment,data)
anova(model)

По сути, он берет вашу переменную и заменяет ее своим рангом (имея дело со связями путем усреднения ранга) следующим образом:

model2 <- lm(rank(variable, ties.method = "average")~treatment,data)
anova(model2)

дает точно такой же результат.

Я не эксперт по статистике, и мне интересно, насколько правильно это решение / преобразование. Мне это кажется довольно жестоким, и это не так далеко от логики c теста Крускала-Уоллиса, даже если статистика c не рассчитывается непосредственно по рангу.

Меня очень смущает проведение теста «ANOVA в рядах», который отличается от kruskal-wallis (также известного как односторонний анализ ANOVA в рядах), и я не знаю, как выбирать между этими два теста.

Я не знаю, был ли я очень ясен и может ли кто-нибудь мне помочь, но, в любом случае, спасибо за ваше внимание и комментарии!

PS: вот пример по фиктивным данным

library(ARTool)

# note that dummy data are random so we shouldn't have the same results
treatment <- as.factor(c(rep("A",100),rep("B",100),rep("C",100)))
variable <- as.numeric(c(sample(c(0:30),100,replace=T),sample(c(10:40),100,replace=T),sample(c(5:35),100,replace=T)))
dummy <- data.frame(treatment,variable)

model <- art(variable~treatment)
anova(model) #f.value = 30.746 and p = 7.312e-13

model2 <- lm(rank(variable, ties.method = "average")~treatment,dummy)
anova(model2) #f.value = 30.746 and p = 7.312e-13

kruskal.test(variable~treatment,dummy)


...