链接到数据: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而不是其他变量。我知道这个问题已经提到了其他帖子,但我无法让这些帖子中提到的解决方案起作用。我假设这是我做错了/简单的错误而且无法理解它。
你在一年前发布了这个问题 - 你有没有找到问题的答案?如果是这样,你应该回答你自己的问题并接受它。
关于你所做的事情有几个与你的问题不一定有关的事情,但它们是相关的:
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,看看是否会改变您的结果。