R 二分变量混合模型的lme函数:第1区第0级后解的奇异性

R 二分变量混合模型的lme函数:第1区第0级后解的奇异性,r,statistics,regression,lme4,mixed-models,R,Statistics,Regression,Lme4,Mixed Models,我正在调整一个考虑一些协变量的固定效应模型。关于模型的说明,其中两个协变量是嵌套的,具有固定效应。请注意下面的错误正在发生 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)

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

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

库(nlme)
图书馆(lme4)
护墙板$VarCat=as.factor(护墙板$VarCat)
护墙板$VarX5=基准系数(护墙板$VarX5)
护墙板$VarX6=基准系数(护墙板$VarX6)

modelANew您的数据在某种程度上是不平衡的,这使得固定效应模型排名不足(如果您愿意,也可以是多重共线性)。当您包括
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)
这个问题很类似于。当你有这样不平衡的设计时,“怎么办”不是一个简单答案的问题

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

你不能做的是实际估计
VarX5/VarX6
——你的设计不包括这些信息。这有点像说“我想估计汽车颜色对速度的影响,但我只测量红色汽车”。你的数据不平衡,这使得固定效果模型排名不足(或多重共线,如果您愿意)。当您包括
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)
这个问题非常类似于。当你有这样不平衡的设计时,“怎么办”不是一个简单答案的问题

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

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

看起来它在使用
lmer
时起作用:
lmer(log(Resp)~log(VarX1)+log(VarX2)+(VarX3)+(VarX4)+VarX5/VarX6+(1 | VarCat,data=dados)
我可能应该关闭它,因为当使用
lmer
时,它看起来很有效:
lmer(log(Resp)~log(VarX1)+log(VarX2)+(VarX3)+(VarX4)+x5/VarX6+(1 | VarCat,data=dados)
Ben Bolker,你能帮我解决这个问题吗?Ben Bolker,你能帮我解决这个问题吗?