0

我不确定这是解决此类问题的理想场所,但也许您可以帮助我。

我想检查 3 次治疗之间定量变量的差异,即执行方差分析。
不幸的是,我的模型的残差不是正态分布的。

我通常有两种解决方案:转换我的数据或使用我的测试的非参数等效项(这里是 kruskal wallis 等级测试)。

我尝试过的所有转换都无法满足常态(log、1/x、平方根、tukey 和 boxcox 幂),所以我想使用 kruskal 并继续前进。

然而,我的项目经理坚持只使用 ANOVA,并谈到 ANOVA 作为一个神奇的解决方案。

在 RI 上工作查找了一些示例,并artARTool包中找到了一个在等级上执行 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)


4

0 回答 0