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

时间:2018-02-24 01:27:08

标签: glm interaction posthoc

数据链接: 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 个答案:

答案 0 :(得分:0)

您一年前发布了此问题-您是否找到问题的答案?如果是这样,您应该发布自己的问题的答案并接受。

关于您所做的事情,有几件事不一定与您的问题有关,而是相关的:

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

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

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

2)您对anova()的使用似乎是不正确的,通常使用anova()来比较不同的模型,并且您在上面的使用仅指定了m1(我假设它与您在示例中构建的模型相同,但使用不同的名称),请参见anova()上的信息页:Description of anova usage。我认为您打算使用Anova()代替?

关于您使用交互功能和主要问题的信息,经过一点点Google搜索,我发现交叉验证的answer会出现相同的问题。他们在他们的代码中注意到,其列中的NA导致了此问题,需要删除它们才能使代码正常工作。我建议您按照此处的说明进行操作,方法是手动将其删除,或者尝试使用na.rm = TRUE并查看是否会改变您的结果。