Singulariteit in backsolve op niveau 0, blok 1 in LME-model

dput voor gegevens,
kopiëren van https://pastebin.com/1f7VuBkx(te groot om hier op te nemen)

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

wanneer ik de volgende code uitvoer zonder “wait”, werkt het perfect, maar wanneer ik het probeer uit te voeren met “wait” in het model, geeft het het singulariteitsprobleem.

LME_01<-lme(data_mTBS ~ Adhesive*Approach*Aging*wait, na.action=na.exclude,data = Data, random = ~ 1|data_name);

Fout in MEEM(object, conLin, control$niterEM) : Singulariteit in
backsolve op niveau 0, blok 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))

Bij voorbaat dank.


Antwoord 1, autoriteit 100%

tl;drzoals @HongOoi je vertelt, waiten Adhesivezijn verward in je model. lmeis een beetje dommer/koppiger dan veel van de andere modelleringsfuncties in R, die je ofwel expliciet zullen waarschuwen dat je vaste effecten hebt verstoord of sommige ervan automatisch voor je laten vallen.

Het is een beetje makkelijker om dit te zien als je de gegevens plot:

## 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")

Dit laat zien dat weten dat wait=="no"hetzelfde is als weten dat Adhesive=="C-UBq".

Het zou waarschijnlijk logischer zijn om een back-up te maken en na te denken over de vragen die u stelt, maar als u dit doet met lme4::lmer, zal het u vertellen

modelmatrix met vast effect heeft een onvoldoende rangorde, dus 16 kolommen / coëfficiënten vallen weg

library(lme4)
LME_02<-lmer(data_mTBS ~ Adhesive*Approach*Aging*wait+
               (1|data_name), 
            na.action=na.exclude,data = dd)

Other episodes