1

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

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

实验:我正在查看给定 3 个解释变量的昆虫标记的可检测性(存在/不存在);应用方法(apptreat - 因子,2 级)、标记(因子,2 级)和曝光时间(exp - 数值,3 级)。响应变量(检测)记录为 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

我想做一个事后多重比较分析来比较每个变量内的差异,包括使用CRAN中的glht函数的交互。multcomp我可以通过有关存在交互的警告来比较主要影响(正如其他帖子所预期的那样)。为了对交互进行事后分析,我使用以下代码在交互数据中添加了一列,并将其作为主要效果包含在 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) 进行事后分析时,会出现以下错误消息

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

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

数据不平衡,但我看不出这将如何防止交互变量而不是其他变量的事后发生。我知道这个问题已经在其他帖子中提出,但我无法让这些帖子中提到的解决方案起作用。我假设这是我做错了/简单的错误,只是想不通。

4

1 回答 1

0

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

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

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

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

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

2)您对 anova() 的使用似乎不正确,anova() 通常用于比较不同的模型,并且您在上面使用它仅指定 m1 (我假设它与您在示例中构建的模型相同,但名称不同)请参阅 anova() 上的信息页面:anova 使用说明。我认为您打算改用 Anova() 吗?

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

于 2019-05-02T00:49:39.483 回答