R 如何从具有交互的GLM获得Tukey紧凑字母显示
我用一个广义线性模型分析了一组数据,该模型在三方交互作用中有三个分类因子(factorA、factorB、factorC)和一个简单添加到模型中的第四个连续因子(factorD)。我正试图从模型中获得一组Tukey字母组(即,紧凑的字母显示),但尚未找到成功包含交互的方法。我不想包括factorD,只想在交互中包含这三个 我得到了Tukey调整后的两两比较:R 如何从具有交互的GLM获得Tukey紧凑字母显示,r,interaction,glm,R,Interaction,Glm,我用一个广义线性模型分析了一组数据,该模型在三方交互作用中有三个分类因子(factorA、factorB、factorC)和一个简单添加到模型中的第四个连续因子(factorD)。我正试图从模型中获得一组Tukey字母组(即,紧凑的字母显示),但尚未找到成功包含交互的方法。我不想包括factorD,只想在交互中包含这三个 我得到了Tukey调整后的两两比较: lsmeans(my.glm, factorA*factorB*factorC) 但我没能弄明白如何从中产生一个紧凑的字母显示。它可以通
lsmeans(my.glm, factorA*factorB*factorC)
但我没能弄明白如何从中产生一个紧凑的字母显示。它可以通过multcomp
包来完成,但我只能通过该包的主要效果来完成,而不是交互
然后我尝试了agricolae
包,因为这篇文章()讨论了这一点。然而,按照该答案中的说明,HSD测试产生了非功能性响应。具体来说,我可以让主要效果测试正常工作,例如,HSD.test(my.glm,“factorA”)
但我无法让交互正常工作。我试过这个:
intxns<-with(my.data, interaction(factorA,factorB,factorC))
HSD.test(my.glm,"intxns",group=TRUE)
如果我只是在HSD.test函数调用中的factor字段中输入了无意义的内容,我会得到同样的错误。我检查了inxtns对象,它看起来不错,行数与剩余数匹配
agricolae的notes实际上没有涵盖HSD.test中交互的使用,但我认为它可以工作
有人知道如何让HSD.test与交互一起工作吗?或者,您是否还需要使用其他功能来为具有交互的glm生成紧凑的字母显示
我已经在这方面工作了好几天了,还没有找到解决方案,希望我没有遗漏一些明显的东西
谢谢 我不知道您是如何指定glm模型的,但对于HSD.test
,它希望将特定治疗名称与glm公式中指定的名称以及数据框中指定的名称相匹配。这就是为什么你的主要效果,factorA
会起作用,而不是三方互动。对于交互的多个比较测试,我发现单独生成交互并将它们作为附加列添加到数据框是最容易的。然后可以使用为交互编码的新变量指定glm模型
比如说,
set.seed(42)
glm.dat <- data.frame(y = rnorm(1000), factorA = sample(letters[1:2],
size = 1000, replace = TRUE),
factorB = sample(letters[1:2], size = 1000, replace = TRUE),
factorC = sample(letters[1:2], size = 1000, replace = TRUE))
# Generate interactions explicitly and add them to the data.frame
glm.dat$factorAB <- with(glm.dat, interaction(factorA, factorB))
glm.dat$factorAC <- with(glm.dat, interaction(factorA, factorC))
glm.dat$factorBC <- with(glm.dat, interaction(factorB, factorC))
glm.dat$factorABC <- with(glm.dat, interaction(factorA, factorB, factorC))
# General linear model
glm.mod <- glm(y ~ factorA + factorB + factorC + factorAB + factorAC +
factorBC + factorABC, family = 'gaussian', data = glm.dat)
# Multiple comparison test
library(agricolae)
comp <- HSD.test(glm.mod, trt = "factorABC", group = TRUE)
我不知道您是如何指定glm模型的,但对于HSD.test
,它希望将特定治疗名称与glm公式中指定的名称以及数据框中指定的名称相匹配。这就是为什么你的主要效果,factorA
会起作用,而不是三方互动。对于交互的多个比较测试,我发现单独生成交互并将它们作为附加列添加到数据框是最容易的。然后可以使用为交互编码的新变量指定glm模型
比如说,
set.seed(42)
glm.dat <- data.frame(y = rnorm(1000), factorA = sample(letters[1:2],
size = 1000, replace = TRUE),
factorB = sample(letters[1:2], size = 1000, replace = TRUE),
factorC = sample(letters[1:2], size = 1000, replace = TRUE))
# Generate interactions explicitly and add them to the data.frame
glm.dat$factorAB <- with(glm.dat, interaction(factorA, factorB))
glm.dat$factorAC <- with(glm.dat, interaction(factorA, factorC))
glm.dat$factorBC <- with(glm.dat, interaction(factorB, factorC))
glm.dat$factorABC <- with(glm.dat, interaction(factorA, factorB, factorC))
# General linear model
glm.mod <- glm(y ~ factorA + factorB + factorC + factorAB + factorAC +
factorBC + factorABC, family = 'gaussian', data = glm.dat)
# Multiple comparison test
library(agricolae)
comp <- HSD.test(glm.mod, trt = "factorABC", group = TRUE)
非常感谢,吉姆!这似乎适用于我的模型和数据。然而,现在lsmeans不喜欢这个模型——每当我试图运行这个模型时,它就会冻结对内存和处理能力的咀嚼,即使我没有使用新的交互术语。如果我使用新的相互作用项,它会给出一堆NA作为结果。你以前遇到过这个问题吗?@DirtStats-我的样本数据也遇到过这个问题,但我不知道这是我的数据的问题,还是我的解决方案存在某种潜在的问题。也许值得提醒版主将您的问题转移到stats.stackexchange。非常感谢,吉姆!这似乎适用于我的模型和数据。然而,现在lsmeans不喜欢这个模型——每当我试图运行这个模型时,它就会冻结对内存和处理能力的咀嚼,即使我没有使用新的交互术语。如果我使用新的相互作用项,它会给出一堆NA作为结果。你以前遇到过这个问题吗?@DirtStats-我的样本数据也遇到过这个问题,但我不知道这是我的数据的问题,还是我的解决方案存在某种潜在的问题。将您的问题转移到stats.stackexchange可能值得提醒版主。
comp$groups giving
trt means M
1 a.a.a 0.070052189 a
2 a.b.b 0.035684571 a
3 b.a.a 0.020517535 a
4 b.b.b -0.008153257 a
5 a.b.a -0.036136140 a
6 a.a.b -0.078891136 a
7 b.a.b -0.080845419 a
8 b.b.a -0.115808772 a