Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何从具有交互的GLM获得Tukey紧凑字母显示_R_Interaction_Glm - Fatal编程技术网

R 如何从具有交互的GLM获得Tukey紧凑字母显示

R 如何从具有交互的GLM获得Tukey紧凑字母显示,r,interaction,glm,R,Interaction,Glm,我用一个广义线性模型分析了一组数据,该模型在三方交互作用中有三个分类因子(factorA、factorB、factorC)和一个简单添加到模型中的第四个连续因子(factorD)。我正试图从模型中获得一组Tukey字母组(即,紧凑的字母显示),但尚未找到成功包含交互的方法。我不想包括factorD,只想在交互中包含这三个 我得到了Tukey调整后的两两比较: lsmeans(my.glm, factorA*factorB*factorC) 但我没能弄明白如何从中产生一个紧凑的字母显示。它可以通

我用一个广义线性模型分析了一组数据,该模型在三方交互作用中有三个分类因子(factorA、factorB、factorC)和一个简单添加到模型中的第四个连续因子(factorD)。我正试图从模型中获得一组Tukey字母组(即,紧凑的字母显示),但尚未找到成功包含交互的方法。我不想包括factorD,只想在交互中包含这三个

我得到了Tukey调整后的两两比较:

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