在 R 的逻辑回归公式中加入随机效应

机器算法验证 r 物流 逐步回归
2022-03-29 13:18:59

direction = both我正在尝试使用 MASS 包中的 stepAIC 在 R 中使用 stepAIC 模型选择来找到基于 AIC 的最佳模型。

这是我使用的脚本:

stepAIC (glmer(decision ~ as.factor(Age) + as.factor(Educ) + as.factor(Child), family=binomial, data=RShifting), direction="both")

但是我得到了这个错误结果:

Error in lmerFactorList(formula, fr, 0L, 0L) : 
  No random effects terms specified in formula

我试图添加(1|town)到公式中,因为城镇是随机效应(受访者嵌套的地方)并运行了这个脚本):

stepAIC (glmer(decision ~ as.factor(Age) + as.factor(Educ) + as.factor(Child) + (1|town), family=binomial, data=RShifting), direction="both")

结果是这样的:

Error in x$terms : $ operator not defined for this S4 class

我希望你能帮助我弄清楚如何解决这个问题。非常感谢。

1个回答

简短的回答是你不能 - 好吧,如果不重新编码一个stepAIC()知道如何处理 S4 对象的版本。对和模型stepAIC()一无所知,并且lme4中没有等效的代码可以让您执行这种步进。lmer()glmer()

我也认为你的整个过程需要仔细重新思考——为什么要有一个最好的模型?AIC 可用于识别执行相似工作的多个候选模型并对这些模型进行平均,而不是尝试为您的数据样本找到最佳模型。

通过 AIC 进行选择实际上是在进行多项测试 - 但是您应该如何更正 AIC 以考虑到您正在进行所有这些测试的事实?您如何解释您可能选择的最终模型的系数精度?

最后一点;不要as.factor()在模型公式中做所有事情,因为它只会使整个事情变得一团糟,占用大量空间并且无助于理解您安装的模型。首先获取正确格式的数据,然后拟合模型,例如:

RShifting <- transform(RShifting,
                       Age = as.factor(Age),
                       Educ = as.factor(Educ),
                       Child = as.factor(Child))

然后

glmer(decision ~ Age + Educ + Child + (1|town), family=binomial, 
      data=RShifting)

除了使事情更具可读性之外,它将数据处理任务与数据分析步骤分开。