LME 模型中 0 级反向求解的奇点,块 1
Singularity in backsolve at level 0, block 1 in LME model
输入数据,
从 https://pastebin.com/1f7VuBkx 复制(太大而无法包含在此处)
data.frame': 972 obs. of 7 variables:
$ data_mTBS : num 20.3 22.7 0 47.8 58.7 ...
$ data_tooth: num 1 1 1 1 1 1 1 1 1 1 ...
$ Adhesive : Factor w/ 4 levels "C-SE2","C-UBq",..: 2 2 2 2 2 2 2 2 2 2 ...
$ Approach : Factor w/ 2 levels "ER","SE": 1 1 1 1 1 1 1 1 1 1 ...
$ Aging : Factor w/ 2 levels "1w","6m": 1 1 1 1 1 1 2 2 2 2 ...
$ data_name : Factor w/ 40 levels "C-SE2-1","C-SE2-10",..: 11 11 11 11 11 11 11 11 11 11 ...
$ wait : Factor w/ 2 levels "no","yes": 1 1 1 1 1 1 1 1 1 1 ...
head(Data)
data_mTBS data_tooth Adhesive Approach Aging data_name wait
1 20.27 1 C-UBq ER 1w C-UBq-1 no
2 22.73 1 C-UBq ER 1w C-UBq-1 no
3 0.00 1 C-UBq ER 1w C-UBq-1 no
4 47.79 1 C-UBq ER 1w C-UBq-1 no
5 58.73 1 C-UBq ER 1w C-UBq-1 no
6 57.02 1 C-UBq ER 1w C-UBq-1 no
当我 运行 下面的代码没有 "wait" 时,它工作得很好,但是当我尝试 运行 它并且模型中包含 "wait" 它给出了奇点问题。
LME_01<-lme(data_mTBS ~ Adhesive*Approach*Aging*wait, na.action=na.exclude,data = Data, random = ~ 1|data_name);
Error in MEEM(object, conLin, control$niterEM) : Singularity in
backsolve at level 0, block 1
contrast_Aging<-contrast(LME_01,a = list(Aging =c("1w"),Adhesive = levels(Data$Adhesive),Approach = levels(Data$Approach) ),b = list(Aging =c("6m"), Adhesive = levels(Data$Adhesive),Approach = levels(Data$Approach)))
c1<-as.matrix(contrast$X)
Contrastsi2<-summary(glht(LME_01, c1))
&
contrast_Approach<-contrast(LME_01,
a = list(Approach = c("SE"), Aging =levels(Data$Aging) ,Adhesive = levels(Data$Adhesive)),
b = list(Approach = c("ER"), Aging =levels(Data$Aging) ,Adhesive = levels(Data$Adhesive)))
c2<-as.matrix(contrast$X)
Contrastsi3<-summary(glht(LME_01, c2))
提前致谢。
tl;dr 正如@HongOoi 告诉您的那样,wait
和 Adhesive
在您的模型中混淆了。 lme
比 R 中的许多其他建模函数有点 stupider/more 固执,它会明确警告您混淆了固定效应或自动为您删除其中一些。
如果绘制数据,就更容易看出这一点:
## source("SO50505290_data.txt")
library(ggplot2)
ggplot(dd,aes(Adhesive,data_mTBS,
fill=Aging,
alpha=Approach))+
facet_grid(.~wait,scale="free_x",space="free",
labeller=label_both)+
guides(alpha = guide_legend(override.aes = list(fill = "darkgray")))+
geom_boxplot()
ggsave("SO50505290.png")
这表明知道 wait=="no"
等同于知道 Adhesive=="C-UBq"
。
备份并思考您提出的问题可能更有意义,但如果您使用 lme4::lmer
这样做,它会告诉您
fixed-effect model matrix is rank deficient so dropping 16 columns / coefficients
library(lme4)
LME_02<-lmer(data_mTBS ~ Adhesive*Approach*Aging*wait+
(1|data_name),
na.action=na.exclude,data = dd)
输入数据, 从 https://pastebin.com/1f7VuBkx 复制(太大而无法包含在此处)
data.frame': 972 obs. of 7 variables:
$ data_mTBS : num 20.3 22.7 0 47.8 58.7 ...
$ data_tooth: num 1 1 1 1 1 1 1 1 1 1 ...
$ Adhesive : Factor w/ 4 levels "C-SE2","C-UBq",..: 2 2 2 2 2 2 2 2 2 2 ...
$ Approach : Factor w/ 2 levels "ER","SE": 1 1 1 1 1 1 1 1 1 1 ...
$ Aging : Factor w/ 2 levels "1w","6m": 1 1 1 1 1 1 2 2 2 2 ...
$ data_name : Factor w/ 40 levels "C-SE2-1","C-SE2-10",..: 11 11 11 11 11 11 11 11 11 11 ...
$ wait : Factor w/ 2 levels "no","yes": 1 1 1 1 1 1 1 1 1 1 ...
head(Data)
data_mTBS data_tooth Adhesive Approach Aging data_name wait
1 20.27 1 C-UBq ER 1w C-UBq-1 no
2 22.73 1 C-UBq ER 1w C-UBq-1 no
3 0.00 1 C-UBq ER 1w C-UBq-1 no
4 47.79 1 C-UBq ER 1w C-UBq-1 no
5 58.73 1 C-UBq ER 1w C-UBq-1 no
6 57.02 1 C-UBq ER 1w C-UBq-1 no
当我 运行 下面的代码没有 "wait" 时,它工作得很好,但是当我尝试 运行 它并且模型中包含 "wait" 它给出了奇点问题。
LME_01<-lme(data_mTBS ~ Adhesive*Approach*Aging*wait, na.action=na.exclude,data = Data, random = ~ 1|data_name);
Error in MEEM(object, conLin, control$niterEM) : Singularity in backsolve at level 0, block 1
contrast_Aging<-contrast(LME_01,a = list(Aging =c("1w"),Adhesive = levels(Data$Adhesive),Approach = levels(Data$Approach) ),b = list(Aging =c("6m"), Adhesive = levels(Data$Adhesive),Approach = levels(Data$Approach)))
c1<-as.matrix(contrast$X)
Contrastsi2<-summary(glht(LME_01, c1))
&
contrast_Approach<-contrast(LME_01,
a = list(Approach = c("SE"), Aging =levels(Data$Aging) ,Adhesive = levels(Data$Adhesive)),
b = list(Approach = c("ER"), Aging =levels(Data$Aging) ,Adhesive = levels(Data$Adhesive)))
c2<-as.matrix(contrast$X)
Contrastsi3<-summary(glht(LME_01, c2))
提前致谢。
tl;dr 正如@HongOoi 告诉您的那样,wait
和 Adhesive
在您的模型中混淆了。 lme
比 R 中的许多其他建模函数有点 stupider/more 固执,它会明确警告您混淆了固定效应或自动为您删除其中一些。
如果绘制数据,就更容易看出这一点:
## source("SO50505290_data.txt")
library(ggplot2)
ggplot(dd,aes(Adhesive,data_mTBS,
fill=Aging,
alpha=Approach))+
facet_grid(.~wait,scale="free_x",space="free",
labeller=label_both)+
guides(alpha = guide_legend(override.aes = list(fill = "darkgray")))+
geom_boxplot()
ggsave("SO50505290.png")
这表明知道 wait=="no"
等同于知道 Adhesive=="C-UBq"
。
备份并思考您提出的问题可能更有意义,但如果您使用 lme4::lmer
这样做,它会告诉您
fixed-effect model matrix is rank deficient so dropping 16 columns / coefficients
library(lme4)
LME_02<-lmer(data_mTBS ~ Adhesive*Approach*Aging*wait+
(1|data_name),
na.action=na.exclude,data = dd)