我不确定这是解决此类问题的理想场所,但也许您可以帮助我。
我想检查 3 次治疗之间定量变量的差异,即执行方差分析。
不幸的是,我的模型的残差不是正态分布的。
我通常有两种解决方案:转换我的数据或使用我的测试的非参数等效项(这里是 kruskal wallis 等级测试)。
我尝试过的所有转换都无法满足常态(log、1/x、平方根、tukey 和 boxcox 幂),所以我想使用 kruskal 并继续前进。
然而,我的项目经理坚持只使用 ANOVA,并谈到 ANOVA 作为一个神奇的解决方案。
在 RI 上工作查找了一些示例,并art
从ARTool
包中找到了一个在等级上执行 anova 的函数。
library(ARTool)
model <- art(variable~treatment,data)
anova(model)
基本上它需要你的变量并用它的等级替换它(通过平均等级来处理平局):
model2 <- lm(rank(variable, ties.method = "average")~treatment,data)
anova(model2)
给出完全相同的输出。
我不是专业的统计学家,我想知道这个解决方案/转换有多有效。对我来说,这似乎很残酷,并且与 kruskal-wallis 测试的逻辑相距不远,即使统计数据不是直接根据等级计算的。
我发现有一个与 kruskal-wallis 不同的“等级方差分析”测试非常令人困惑(也称为等级单向方差分析),我不知道如何在这两个测试之间进行选择。
我不知道我是否说得很清楚,是否有人可以帮助我,但无论如何,感谢您的关注和评论!
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)