1. ホーム
  2. r

[解決済み】LMEモデルのレベル0、ブロック1でのバックソルブにおける特異性

2022-01-28 21:45:59

質問事項

データを入力してください。 からのコピー 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);

MEEM(object, conLin, control$niterEM) でのエラー : Singularity in. レベル0、ブロック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さんが教えてくれているように。 waitAdhesive が混同されていることがわかります。 lme は、Rの他の多くのモデリング関数よりも少し愚かで頑固です。Rは、交絡した固定効果があることを明示的に警告するか、自動的にその一部を削除します。

データをプロットしてみると、少しわかりやすいと思います。

## 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 を教えてくれる

<ブロッククオート

固定効果モデル行列はランク不足なので、16列/係数を落とす

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