混合効果モデルのモデルマトリックス


10

ではlmer内機能lme4Rランダム効果のモデル行列を構築するための呼び出しがあり、、のように説明し、ここ 9 -ページ7。Z

計算には、2つの行列および KhatriRaoおよび/またはKronecker積が伴います。 ZJiXi

マトリックスは一口です:「グループ化因子インデックスのインジケーターマトリックス」ですが、より高い階層レベルに対応するユニット(たとえば、反復測定の対象)を選択するためのダミーコーディングを持つスパースマトリックスのようです。観察。マトリックスが共に「セレクタ」の組み合わせは、マトリックスを生じるように、下位階層での測定のセレクタとして機能するように思われ、形態の以下の例を介して紙に示します:JiXiZi

(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

これらの各行列を転置し、Khatri-Rao乗算を実行します。

[11......11......11][111111111111]=[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

作者はでデータベースを利用していますsleepstudylme4、この特定の研究に適用されるため、設計マトリックスについては詳しく説明していません。だから私は、上で再現された紙の構成されたコードがどのようにより意味のあるsleepstudy例に翻訳されるかを理解しようとしています。

見やすくするために、データセットを「309」、「330」、「371」の3つのサブジェクトに減らしました。

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好きな個人の選択であることを理解しています。たとえば、サブジェクト309はベースライン+ 9つの観測でオンになっているので、4 1が続きます。2番目の部分は明らかに実際の測定値です。0ベースライン、1睡眠不足の初日などです。

実際何 行列および対応又は方適切ですか?Ji Xi Zi=(JiTXiT) Zi=(JiTXiT)

ここに可能性があります、

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

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

問題は、lmer関数が要求しているように転置されておらず、を作成するためのルールがまだ不明であることです。Xi


1
これは、あなたが考えているよりもはるかに簡単です。ここでの行列は、単純に単位行列と設計行列のクロネッカー積(の転置)です。Z
ドニー

ヒントありがとうございます。この関数の線形代数スケルトンのすべてのサブインデックスを理解することに引き続き取り組みます。それが適切な場所でクリックされると、私は先に進んで自分の質問に答えますが、私は深く掘り下げた単純なことを知っていますが、数学の足場の命名法と任意の例への適用との対応は混乱を招きます。
Antoni Parellada、2015

1
もう1つの優れたリソースは、lme4pureRの実装である可能性があります。これは、上記のビネットに続き、完全にRで記述されています。たぶんmkZt()ここで検索してください)が良い出発点ですか?
alexforrence 2015

回答:


5
  1. マトリックスを作成するには、3つのレベル(、および)を作成する必要があり、それぞれに10の観測または測定()があります。OPの元のリンクのコードに従ってください。Ji309330371nrow(sleepstudy[sleepstudy$Subject==309,]) [1] 10

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

ここに画像の説明を入力してください

  1. 建物行列が機能を使用することによって支援することができます参照よう:XigetME

    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. Ziはとして計算され。Zi=(JiTXiT)

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

ここに画像の説明を入力してください

これは、元の論文の式(6)に対応します。

Zi=(JiTXiT)T=[Ji1TXi1TJi2TXi2TJinTXinT]

これを確認するには、代わりに、9つの測定値とベースライン(0)ではなく、1つの測定値(およびベースライン)しかないと想像して、切り捨てられたおよびマトリックスを操作します。結果の行列は次のようになります。JiTXiT

JiT=[110000001100000011]及び。XiT=[111111010101]

そして

JiTXiT=[(100)(10)(100)(11)(010)(10)(010)(11)(001)(10)(001)(11)]

=[Ji1TXi1TJi2TXi2TJi3TXi3TJi4TXi4TJi5TXi5TJi6TXi6T]

=[110000010000001100000100000011000001]。転置および拡張すると、。Zi=[100000110000120000001000001100001200000010000011000012]

  1. 変量効果係数のベクトルを抽出するには、次の関数を使用します。b

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. Zbはとして計算できますas.matrix(Zi)%*%b
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.