【问题标题】:Multicollinearity in Linear Mixed model线性混合模型中的多重共线性
【发布时间】:2016-10-05 22:35:27
【问题描述】:

我正在 R 中安装以下 lmer 模型:

lmer(rt~deadline*cond+age+(1+deadline|task/pp), REML=FALSE) ##Model 1
lmer(rt~deadline+cond+age+(1+deadline|task/pp), REML=FALSE) ##Model 2

其中rt 是反应时间,deadline 有 2 个短或长级别,cond 也有两个级别:简单或困难。在我进行的研究中,30 名受试者完成了 4 项任务。每个任务受试者在四个级别(短/易、长/易、短/硬、长/硬)中的每一个中进行 50 次试验。在我上面的模型中,我对人和任务有随机截距,在截止日期前对人和任务有随机斜率。 因此,他们总共进行了 800 次试验。记录准确性和反应时间。如果复杂性(=cond)和紧迫性(=deadline)对反应时间有(交互)影响,我很感兴趣。由于可能存在交互作用,我将第一个模型与交互作用进行了拟合,并将其与没有交互作用的第二个模型进行了比较。

当我运行第一个模型时,我得到以下输出:

lm.rtfnew <- lmer(rt~deadline*cond+age+(1+deadline|task/pp), REML=FALSE)
fixed-effect model matrix is rank deficient so dropping 1 column / coefficient
summary(lm.rtfnew)
Linear mixed model fit by maximum likelihood  ['lmerMod']
Formula: rt ~ deadline * cond + age + (1 + deadline | task/pp)
 ...
                           Estimate Std. Error t value
   (Intercept)             5.874631   0.669971    8.77
 deadlineshort            -0.375643   0.171779   -2.19
      condhard            -4.685013   0.066538  -70.41
      condeasy            -4.658016   0.066538  -70.01
           age             0.006791   0.018018    0.38
   deadlineshort:condhard  0.007752   0.018960    0.41
 ...
 fit warnings:
     fixed-effect model matrix is rank deficient so dropping 1 column / coefficient 
所以我有一个问题,因为deadlinecond 都制作了两列,然后这两列显示完美的多重共线性?然后 R 通过为deadline 删除一列来修复它,但不为cond 删除一列(因为condhardcondeasy 存在固定效果)。 因此我有两个问题:

  1. 为什么 R 不删除 cond 的列?
  2. 我需要手动修复它吗?

【问题讨论】:

  • 搜索“治疗对比”。一级deadline和一级cond由截距表示。
  • 那么实际上没有问题吗?还是我必须手动创建对比?
  • 请发布一个可重现的示例(代码+数据)。没有它就很难诊断问题。
  • 从您的评论中很难看出,但显然有三个级别,即一个级别似乎是""。这些应该是NA 值。
  • 它们应该NA值,看起来不像。显然,它们是一个空字符串的因子级别。要么在数据导入期间修复此问题,要么执行cond[cond == ""] &lt;- NA。 (顺便说一句,你的数据应该放在一个 data.frame 中,你应该使用 lmer 中的 data 参数。)

标签: r lme4


【解决方案1】:

随着 OP 在 cmets 中提供的附加信息,一个问题变得明显:cond 中有一个因子水平 ""。此级别由截距表示,“硬”和“简单” rts 与“” rts 完全不同,但比较起来却非常相似。这些 "" 值实际上是 NA 值,应该这样编码。如果这样做,相应的观察将被na.action = na.omit 删除。这样做可能已经解决了排名不足的问题。如果没有,OP 可以考虑缩放变量或删除交互项。

【讨论】:

  • 谢谢!我终于找到了问题:我没有使用正确的data.frame。我创建了它,然后使用 droplevels 确实删除了空字符串,但后来忘记在我的 lmer 函数 (data=dat) 中使用它。感谢您的工作和精力。
猜你喜欢
  • 1970-01-01
  • 2011-12-11
  • 2015-05-26
  • 1970-01-01
  • 2018-07-26
  • 2018-10-22
  • 2017-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多