二分变量混合模型的 lme 函数:第 0 级反向求解中的奇异性,块 1
lme function for mixed models for dichotomous variables: Singularity in backsolve at level 0, block 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是一个二分变量。在我看来,这似乎会干扰模型的收敛或估计。我该如何解决?
您的数据不平衡,使得 fixed-effect 模型 rank-deficient(或多重共线性,如果您愿意)。当您包含 X5/X6
时,您表示您想要估计 X5
和 X6
的所有组合的效果。然而:
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=Q
曾在 VarX6=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)
fixed-effect model matrix is rank deficient so dropping 7 columns / coefficients
您可以通过 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
这个问题和非常相似。当你有这样不平衡的设计时,“怎么办”不是一个只有一个简单答案的问题。
- 您可以自己从模型中删除项(例如,在这种情况下,您无法真正估计有关
VarX6
的任何内容,因为它与 VarX5
完全多余,因此请替换 VarX5/VarX6
在你的模型中 VarX5
.
- 您可以使用
lmer
等功能自动为您删除条款
您 不能 做的实际上是估计 VarX5/VarX6
- 您的设计只是不包含该信息。这有点像说“我想估计汽车颜色对速度的影响,但我只测量了红色汽车”。
我正在调整考虑一些协变量的固定效应模型。关于模型的规范,其中两个协变量是嵌套的并且具有固定效应。看到下面的错误正在发生。
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是一个二分变量。在我看来,这似乎会干扰模型的收敛或估计。我该如何解决?
您的数据不平衡,使得 fixed-effect 模型 rank-deficient(或多重共线性,如果您愿意)。当您包含 X5/X6
时,您表示您想要估计 X5
和 X6
的所有组合的效果。然而:
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=Q
曾在 VarX6=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)
fixed-effect model matrix is rank deficient so dropping 7 columns / coefficients
您可以通过 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
这个问题和
- 您可以自己从模型中删除项(例如,在这种情况下,您无法真正估计有关
VarX6
的任何内容,因为它与VarX5
完全多余,因此请替换VarX5/VarX6
在你的模型中VarX5
. - 您可以使用
lmer
等功能自动为您删除条款
您 不能 做的实际上是估计 VarX5/VarX6
- 您的设计只是不包含该信息。这有点像说“我想估计汽车颜色对速度的影响,但我只测量了红色汽车”。