在具有交互的二项式glm上尝试事后分析时出错

问题描述 投票:1回答:1

链接到数据:https://drive.google.com/open?id=1aMgwSPOZAEO3cICqLeQyqsDF_5WrhFXe

我在使用上面链接的数据对二项式glm进行事后分析时遇到问题。

实验:我正在研究给出3个解释变量的昆虫标记的可检测性(存在/不存在);应用方法(apptreat - factor,2 level),marker(factor,2 levels)和曝光时间(exp - numeric,3 levels)。响应变量(检测)记录为1表示当前,0表示不存在。在运行模型几次以确定是否有任何相互作用之后,我想出了以下模型。

模型:

id.glm2<-glm(detec~apptreat+marker+exp+apptreat*exp, family=binomial,     data=indiv_detec2)
anova(id.glm2, test="Chisq")

输出:

Analysis of Deviance Table
Model: binomial, link: logit
Response: detec
Terms added sequentially (first to last)


         Df Deviance Resid. Df Resid. Dev  Pr(>Chi)    
NULL                           906    1182.37              
apptreat      1  238.847       905     943.52 < 2.2e-16 ***
marker        1  156.844       904     786.68 < 2.2e-16 ***
exp           1  138.098       903     648.58 < 2.2e-16 ***
apptreat:exp  1    9.414       902     639.17  0.002153 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

我想做一个事后多重比较分析来比较每个变量中的差异,包括使用glht CRAN中的multcomp函数的相互作用。我能够对主要效果进行比较,并发出关于存在交互的警告(正如其他帖子所预期的那样)。为了对交互进行posthoc分析,我使用以下代码在交互数据中添加了一列,并将其作为glm模型中的主效应包含在内

indiv_detec2$AE<-interaction(indiv_detec2$apptreat, indiv_detec2$exp)
id.glm2<-glm(detec~apptreat+marker+exp+AE, family=binomial, data=indiv_detec2)
anova(id.glm2, test="Chisq")

当我使用glht函数对交互变量(AE)进行posthoc分析时,会产生以下错误消息

glht(m1, linfct = mcp(AE = "Tukey"))

modelparm.default(model,...)中的错误:系数和协方差矩阵的维度不匹配

数据是不平衡的,但我不知道这将如何阻止交互变量上的posthoc而不是其他变量。我知道这个问题已经提到了其他帖子,但我无法让这些帖子中提到的解决方案起作用。我假设这是我做错了/简单的错误而且无法理解它。

glm interaction posthoc
1个回答
0
投票

你在一年前发布了这个问题 - 你有没有找到问题的答案?如果是这样,你应该回答你自己的问题并接受它。

关于你所做的事情有几个与你的问题不一定有关的事情,但它们是相关的:

1)当您使用“*”指定模型中的交互时,模型会自动包含没有交互的主效果,即您只需指定:

id.glm2<-glm(detec~apptreat*exp+marker, family=binomial, data=indiv_detec2)

而如果您指定与“:”的交互,则需要包含主效果。

2)你对anova()的使用看起来不正确,anova()通常用于比较不同的模型,你在上面使用它只指定m1(我假设你在你的例子中建立了相同的模型,但名称不同)请参阅anova()的信息页面:Description of anova usage。我想你的意思是使用Anova()代替?

至于你对交互功能的使用和你的主要问题,有点谷歌搜索引导我在交叉验证的这个answer,其中出现同样的问题。在他们的代码中,他们注意到列中的NA导致了问题,需要将其删除才能使代码工作。我建议您按照那里的说明手动删除它们,或尝试使用na.rm = TRUE,看看是否会改变您的结果。

© www.soinside.com 2019 - 2024. All rights reserved.