Модельні матриці для моделей змішаних ефектів


10

У lmerфункції всередині lme4в Rє виклик для побудови матричної моделі випадкових ефектів Z , як пояснено тут , на сторінках 7 - 9.

Обчислення Z тягне за собою продукти ХатріРао та / або Кронекера з двох матриць, Ji та Хi .

Матриця Ji є виразною: "Показникова матриця групування факторних індексів", але, здається, це розріджена матриця з фіктивним кодуванням, щоб вибрати, яку одиницю (наприклад, суб'єкти в повторних вимірюваннях), що відповідають вищим ієрархічним рівням, "включено" для будь-якого спостереження. Хi матриця , здається, діє як селектор вимірювань в нижньому ієрархічному рівні, так що поєднання обох «селектор» дасть матрицю, Zi від форми , показаної на папері з допомогою наступного прикладу:

(f<-gl(3,2))

[1] 1 1 2 2 3 3
Levels: 1 2 3

(Ji<-t(as(f,Class="sparseMatrix")))

6 x 3 sparse Matrix of class "dgCMatrix"
     1 2 3
[1,] 1 . .
[2,] 1 . .
[3,] . 1 .
[4,] . 1 .
[5,] . . 1
[6,] . . 1

(Xi<-cbind(1,rep.int(c(-1,1),3L)))
     [,1] [,2]
[1,]    1   -1
[2,]    1    1
[3,]    1   -1
[4,]    1    1
[5,]    1   -1
[6,]    1    1

Транспонування кожної з цих матриць та виконання множення Хатрі-Рао:

[11......11......11][111111-11-11-11]=[11....-11......11....-11......11....-11]

Але є його транспозитом:Zi

(Zi<-t(KhatriRao(t(Ji),t(Xi))))

6 x 6 sparse Matrix of class "dgCMatrix"

[1,] 1 -1 .  . .  .
[2,] 1  1 .  . .  .
[3,] .  . 1 -1 .  .
[4,] .  . 1  1 .  .
[5,] .  . .  . 1 -1
[6,] .  . .  . 1  1

Виявляється, автори використовують базу даних sleepstudyу lme4, але не дуже детально розробляють матриці дизайну, оскільки вони застосовуються до цього конкретного дослідження. Тому я намагаюся зрозуміти, як складений код у відтвореному вище документі перетворюється на більш змістовний sleepstudyприклад.

Для візуальної простоти я скоротив набір даних лише до трьох предметів - "309", "330" і "371":

require(lme4)
sleepstudy <- sleepstudy[sleepstudy$Subject %in% c(309, 330, 371), ]
rownames(sleepstudy) <- NULL

Кожна людина проявлятиме дуже різний перехват і нахил, якщо просту регресію OLS розглядати індивідуально, що говорить про необхідність моделі змішаного ефекту з вищою ієрархією або рівнем одиниці, що відповідає суб'єктам:

    par(bg = 'peachpuff')
    plot(1,type="n", xlim=c(0, 12), ylim=c(200, 360),
             xlab='Days', ylab='Reaction')
    for (i in sleepstudy$Subject){
            fit<-lm(Reaction ~ Days, sleepstudy[sleepstudy$Subject==i,])
            lines(predict(fit), col=i, lwd=3)
            text(x=11, y=predict(fit, data.frame(Days=9)), cex=0.6,labels=i)
        }

введіть тут опис зображення

Виклик регресії змішаного ефекту:

fm1<-lmer(Reaction~Days+(Days|Subject), sleepstudy)

А матриця, витягнута з функції, дає наступне:

parsedFormula<-lFormula(formula= Reaction~Days+(Days|Subject),data= sleepstudy)
parsedFormula$reTrms

$Ztlist
$Ztlist$`Days | Subject`
6 x 12 sparse Matrix of class "dgCMatrix"

309 1 1 1 1 1 1 1 1 1 1 . . . . . . . . . . . . . . . . . . . .
309 0 1 2 3 4 5 6 7 8 9 . . . . . . . . . . . . . . . . . . . .
330 . . . . . . . . . . 1 1 1 1 1 1 1 1 1 1 . . . . . . . . . .
330 . . . . . . . . . . 0 1 2 3 4 5 6 7 8 9 . . . . . . . . . .
371 . . . . . . . . . . . . . . . . . . . . 1 1 1 1 1 1 1 1 1 1
371 . . . . . . . . . . . . . . . . . . . . 0 1 2 3 4 5 6 7 8 9

Це здається правильним, але якщо воно є, то за якою лінійною алгеброю? Я розумію, що рядки 1's - це вибір людей. Наприклад, тема 309включена для базової лінії + дев'ять спостережень, тому вона отримує чотири 1і так далі. Друга частина явно є фактичним вимірюванням: 0для базового рівня, 1для першого дня позбавлення сну тощо.

Ji Хi Zi=(JiТХiТ) Zi=(JiТХiТ)

Ось така можливість,

[1111111111..............................1111111111.............................1111111111][11111111110123456789]=

[1111111111....................0123456789.............................1111111111...................0123456789..............................1111111111...................0123456789]

lmerХi


1
Z

Дякую за вашу підказку Я продовжуватиму працювати над осмисленням усіх субіндексів у скелеті лінійної алгебри цієї функції. Якщо він клацне на місці, я продовжую відповідати на власне запитання, але хоча я знаю, що в глибині душі просте, відповідність між номенклатурою математичних лісів та додатком до будь-якого прикладу є заплутаною.
Антоні Пареллада

1
Ще одним хорошим ресурсом для вас може стати їх реалізація lme4pureR , яка випливає з вищевказаною віньєткою і повністю написана в Р. Можливо mkZt()(шукайте її тут ) вдалий початок?
alexforrence

Відповіді:


5
  1. Ji309330371nrow(sleepstudy[sleepstudy$Subject==309,]) [1] 10

f <- gl(3,10) Ji<-t(as(f,Class="sparseMatrix"))

введіть тут опис зображення

  1. ХigetME

    library(lme4) sleepstudy <- sleepstudy[sleepstudy$Subject %in% c(309, 330, 371), ] rownames(sleepstudy) <- NULL fm1<-lmer(Reaction~Days+(Days|Subject), sleepstudy)

Xi <- getME(fm1,"mmList")

введіть тут опис зображення

Оскільки нам знадобиться транспонінг, а об'єкт Xiне є матрицею, то t(Xi)можна побудувати так:

t_Xi <- rbind(c(rep(1,30)),c(rep(0:9,3)))

  1. ZiZi=(JiТХiТ)

Zi<-t(KhatriRao(t_Ji,t_Xi)):

введіть тут опис зображення

Це відповідає рівнянню (6) у вихідній статті :

Zi=(JiТХiТ)Т=[Ji1ТХi1ТJi2ТХi2ТJiнТХiнТ]

JiТХiТ

JiТ=[110000001100000011]ХiТ=[111111010101]

І

JiТХiТ=[(100)(10)(100)(11)(010)(10)(010)(11)(001)(10)(001)(11)]

=[Ji1ТХi1ТJi2ТХi2ТJi3ТХi3ТJi4ТХi4ТJi5ТХi5ТJi6ТХi6Т]

=[110000010000001100000100000011000001]. Що перенесене і розширене, це призведе доZi=[100000110000120000001000001100001200000010000011000012].

  1. Витяг б вектор коефіцієнтів випадкових ефектів можна виконати за допомогою функції:

b <- getME(fm1,"b")

[1,] -44.1573839
[2,]  -2.4118590
[3,]  32.8633489
[4,]  -0.3998801
[5,]  11.2940350
[6,]   2.8117392

Якщо додати ці значення до фіксованих ефектів виклику, fm1<-lmer(Reaction~Days+(Days|Subject), sleepstudy)ми отримаємо перехоплення:

205.3016 for 309; 282.3223 for 330; and 260.7530 for 371

і схили:

2.407141 for 309; 4.419120 for 330; and 7.630739 for 371

значення, що відповідають:

library(lattice)
xyplot(Reaction ~ Days | Subject, groups = Subject, data = sleepstudy, 
       pch=19, lwd=2, type=c('p','r'))

введіть тут опис зображення

  1. Zбможна обчислити як as.matrix(Zi)%*%b.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.