Karma Efekt Modelleri için Model Matrisler


10

In lmeriçindeki işlevi lme4de Rrastgele etkileri modeli matris oluşturmak için bir çağrı var olarak açıklanabilir, burada , sayfalar 7-9.Z

hesaplanması ve üzere iki matrisin KhatriRao ve / veya Kronecker ürünlerini gerektirir . J i X iZJbenXben

matrisi bir ağız : "Gruplama faktörü indekslerinin gösterge matrisi", ancak daha yüksek hiyerarşik seviyelere karşılık gelen birimi seçmek için kukla kodlamaya sahip seyrek bir matris gibi görünüyor (örneğin, tekrarlayan ölçümlerdeki özneler) herhangi bir gözlem. matrikstir "seçiciler" kombinasyonu, bir matris doğuracak böylece, alt hiyerarşik düzeyde ölçümlerin bir seçici olarak hareket ediyor gibi görünmektedir aşağıdaki örnekte ile kağıt gösterilen formun:X i Z iJbenXbenZben

(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

Bu matrislerin her birinin transpozisyonu ve bir Khatri-Rao çarpımı:

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

Ama bunun aktarımıdır:Zben

(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

Bu yazarlar veritabanı faydalanmak çıkıyor sleepstudyiçinde lme4, ancak bu özel çalışma için de geçerlidir olarak gerçekten tasarım matrisleri üzerinde durmak yok. Bu yüzden, yukarıda çoğaltılmış makaledeki uydurma kodun nasıl daha anlamlı bir sleepstudyörneğe dönüşeceğini anlamaya çalışıyorum .

Görsel sadelik için veri setini sadece üç nesneye indirdim - "309", "330" ve "371":

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

Basit bir OLS regresyonunun ayrı ayrı ele alınması durumunda her birey çok farklı bir kesişme ve eğim sergileyecek ve bu da konulara karşılık gelen daha yüksek hiyerarşiye veya birim seviyesine sahip karışık etkili bir modele ihtiyaç olduğunu düşündürmektedir:

    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)
        }

resim açıklamasını buraya girin

Karma efekt regresyon çağrısı:

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

Ve fonksiyondan çıkarılan matris aşağıdakileri verir:

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

Bu doğru görünüyor, ama öyleyse, arkasında lineer cebir nedir? Anladığım kadarıyla, insanların 1bireylerin seçimi olma sıraları . Örneğin, konu 309temel + dokuz gözlem için açıktır, bu yüzden dört tane 1vb. İkinci bölüm açıkça gerçek ölçümdür: 0başlangıç 1için, uyku yoksunluğunun ilk günü için, vb.

Ancak gerçek ve matrisleri ve karşılık gelen veya , hangisi uygun mu?X i Z i = ( J T iX T i ) Z i = ( J T iX T i ) Jben Xben Zben=(JbenT*XbenT) Zben=(JbenTXbenT)

İşte bir olasılık,

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

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

Sorun, lmerfonksiyonun çağırdığı gibi transpoze olmaması ve hala oluşturmak için kuralların ne olduğu belirsizdir .Xben


1
Bu, olduğundan daha kolay. Buradaki matrisi, tasarım matrisine sahip bir kimlik matrisinin Kronecker ürünüdür. Z
Donnie

İpucu için teşekkürler. Bu işlevin doğrusal cebir iskeletindeki tüm alt-uçları anlamaya çalışacağım. Yerine tıklarsa, devam edip kendi sorumu cevaplayacağım, ancak derinlemesine basit olduğunu bilmeme rağmen, matematik iskele isimlendirmesi ile herhangi bir örneğe uygulama arasındaki yazışma kafa karıştırıcı.
Antoni Parellada

1
Sizin için bir başka iyi kaynak , yukarıdaki skeçle birlikte takip eden ve tamamen R'de yazılmış olan lme4pureR uygulaması olabilir . Belki mkZt()( burada arayın ) iyi bir başlangıç ​​mıdır?
alexforrence

Yanıtlar:


5
  1. Oluşturma matrisi 3 seviyeleri meydana getirir ( , ve 10 gözlem ya da ölçüm ile her biri () ). OP'deki orijinal bağlantıdaki kodu takip ederek:Jben309330371nrow(sleepstudy[sleepstudy$Subject==309,]) [1] 10

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

resim açıklamasını buraya girin

  1. Bina matris fonksiyonunu kullanarak yardımcı olabilir referans olarak:XbengetME

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

resim açıklamasını buraya girin

Transpoze ihtiyaç duyacağımız ve nesne Xibir matris olmadığından, t(Xi)şu şekilde oluşturulabilir:

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

  1. Zben , :Zben=(JbenT*XbenT)

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

resim açıklamasını buraya girin

Bu, orijinal kağıttaki denklem (6) 'ya karşılık gelir :

Zben=(JbenT*XbenT)T=[Jben1TXben1TJben2TXben2TJbennTXbennT]

Bunu görmek için bunun yerine, kesilmiş ve matrisleri ile 9 ölçüm ve bir taban çizgisi (0) yerine sadece 1 ölçümün (ve bir taban çizgisinin) olduğunu hayal ederek oynayabiliriz . Ortaya çıkan matrisler:JbenTXbenT

JbenT=[110000001100000011] ve .XbenT=[111111010101]

Ve

JbenT*XbenT=[(100)(10)(100)(11)(010)(10)(010)(11)(001)(10)(001)(11)]

=[Jben1TXben1TJben2TXben2TJben3TXben3TJben4TXben4TJben5TXben5TJben6TXben6T]

=[110000010000001100000100000011000001] . ve genişletilen .Zben=[100000110000120000001000001100001200000010000011000012]

  1. Rastgele efekt katsayılarının vektörünün çıkarılması şu fonksiyonla yapılabilir:b

b <- getME(fm1,"b")

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

Bu değerleri çağrının sabit etkilerine eklersek fm1<-lmer(Reaction~Days+(Days|Subject), sleepstudy)engelleri alırız:

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

ve eğimler:

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

ile tutarlı değerler:

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

resim açıklamasını buraya girin

  1. Zb olarak hesaplanabilir as.matrix(Zi)%*%b.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.