二分变量混合模型的r-lme函数:0级反解的奇异性,块1



我正在调整一个考虑一些协变量的固定效应模型。关于模型的规范,其中两个协变量是嵌套的,具有固定的影响。请注意,下面的错误正在发生。

library(nlme)
library(lme4)
dados$VarCat=as.factor(dados$VarCat)
dados$VarX5=as.factor(dados$VarX5)
dados$VarX6=as.factor(dados$VarX6)
modelANew <- lme(log(Resp)~log(VarX1)+log(VarX2)+(VarX3)+(VarX4)+VarX5/VarX6 ,random = ~1|VarCat, 
dados, method="REML")
Error in MEEM(object, conLin, control$niterEM) : 
Singularity in backsolve at level 0, block 1

变量X6是一个二分变量。在我看来,这似乎干扰了模型的收敛或估计。我该如何解决?

您的数据不平衡,这会使固定效应模型排名不足(如果您愿意,也可以是多重共线(。当包含X5/X6时,表示要估计X5X6的所有组合的效果。但是:

with(dd, table(VarX6,VarX5))
VarX5
VarX6   A   B   H IND   Q   S   T
0   2   9  94 155   0   1  15
1   0   0   0   0   8   0   0

只有VarX5=QVarX6=1水平上被测量过,而它从未在VarX6=0水平上被测过。这意味着VarX6变量及其与VarX5的交互是冗余信息。

正如评论中所指出的,如果您在lme4::lmer()中运行此操作,它将自动为您删除冗余列,并显示一条消息:

library(lme4)
m2 <- lmer(log(Resp)~log(VarX1)+log(VarX2)+(VarX3)+(VarX4)+
VarX5/VarX6 + (1|VarCat),
dd, REML=TRUE)

固定效应模型矩阵秩不足,因此删除7列/系数

您可以通过attr(getME(m2,"X"), "col.dropped")找到它删除的列。

或者,如果你把它放在lm()中(我知道你想放一个混合模型,但这是一个很好的诊断(,你会发现它没有抱怨,但它会自动将所有冗余系数设置为NA:

m3 <- lm(log(Resp)~log(VarX1)+log(VarX2)+(VarX3)+(VarX4)+
VarX5/VarX6, data=dd)
coef(m3)
(Intercept)      log(VarX1)      log(VarX2)           VarX3           VarX4 
0.46921538      0.79476848     -0.45769296      1.85386835     -2.78321092 
VarX5B          VarX5H        VarX5IND          VarX5Q          VarX5S 
-0.04677216      0.21896140      0.24584351     -2.00226719      0.32677006 
VarX5T   VarX5A:VarX61   VarX5B:VarX61   VarX5H:VarX61 VarX5IND:VarX61 
0.17474369              NA              NA              NA              NA 
VarX5Q:VarX61   VarX5S:VarX61   VarX5T:VarX61 
NA              NA              NA 

这个问题非常类似于LME模型中块1的0级反解中的奇异性。当你有这样不平衡的设计时;该怎么办;不是一个只有一个简单答案的问题。

  • 您可以自己从模型中删除术语(例如,在这种情况下,您无法真正估计VarX6的任何内容,因为它与VarX5完全冗余,所以用VarX5替换模型中的VarX5/VarX6
  • 您可以使用lmer这样的函数,它可以自动为您删除术语

您不能做的实际上是估计VarX5/VarX6——您的设计只是不包括这些信息。这有点像在说";我想估计汽车颜色对速度的影响,但我只测量了红色汽车;。

相关内容

  • 没有找到相关文章

最新更新