โมเดลเมทริกซ์สำหรับโมเดลเอฟเฟกต์ผสม


10

ในlmerฟังก์ชั่นภายในlme4ในRมีการเรียกร้องให้สร้างเมทริกซ์รูปแบบของผลกระทบสุ่มตามที่อธิบายไว้ที่นี่ , หน้า 7-9Z

คำนวณ entails KhatriRao และ / หรือผลิตภัณฑ์ Kronecker สองเมทริกซ์และx_i J i X iZJผมXผม

เมทริกซ์เป็นคำหนึ่ง: "เมทริกซ์ตัวบ่งชี้ของดัชนีปัจจัยการจัดกลุ่ม" แต่ดูเหมือนว่าจะเป็นเมทริกซ์เบาบางที่มีการเข้ารหัสแบบดัมมี่เพื่อเลือกหน่วย (ตัวอย่างเช่นอาสาสมัครในการวัดซ้ำ) ที่สอดคล้องกับระดับลำดับขั้นสูง การสังเกตใด ๆ เมทริกซ์ที่ดูเหมือนว่าจะทำหน้าที่เป็นตัวเลือกของการวัดในระดับที่ต่ำกว่าลำดับชั้นเพื่อให้การรวมกันของทั้งสอง "เตอร์" จะให้ผลผลิตเมทริกซ์,ของแบบฟอร์มแสดงในกระดาษผ่านตัวอย่างต่อไปนี้:X i Z iJผมXผมZผม

(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]* * * *[111111-11-11-11]=[11....-11......11....-11......11....-11]

แต่เป็นทรานสโพสของมัน:Zผม

(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การเลือกบุคคลเช่น ตัวอย่างเช่นหัวเรื่อง309เปิดอยู่สำหรับการสำรวจพื้นฐาน + เก้าดังนั้นจึงได้รับสี่1รายการและอื่น ๆ ส่วนที่สองคือการวัดจริง: 0สำหรับพื้นฐาน1สำหรับวันแรกของการอดนอนเป็นต้น

แต่สิ่งที่เกิดขึ้นจริง และเมทริกซ์และสอดคล้องหรือ , แล้วแต่จำนวนใด ตรงประเด็นหรือไม่X ฉันZ ฉัน = ( J TฉันX Tฉัน ) Z ฉัน = ( J TฉันX Tฉัน ) Jผม Xผม Zผม=(JผมT* * * *XผมT) Zผม=(JผมTXผมT)

นี่คือความเป็นไปได้

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

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

ปัญหาคือว่ามันไม่ได้เป็นขนย้ายเป็นlmerฟังก์ชั่นที่ดูเหมือนว่าจะเรียกร้องให้และยังคงไม่มีความชัดเจนว่ากฎระเบียบที่มีการสร้างx_iXผม


1
มันง่ายกว่าที่คุณคิด เมทริกซ์นี่เป็นเพียง (transpose ของ) ผลิตภัณฑ์ Kronecker ของเมทริกซ์เอกลักษณ์ด้วยการออกแบบเมทริกซ์ Z
Donnie

ขอบคุณสำหรับคำใบ้ ฉันจะพยายามทำความเข้าใจกับดัชนีย่อยทั้งหมดในโครงกระดูกพีชคณิตเชิงเส้นของฟังก์ชันนี้ หากมันคลิกเข้าที่ฉันจะไปข้างหน้าและตอบคำถามของฉันเอง แต่ถึงแม้ว่าฉันรู้ว่ามันง่ายมากการโต้ตอบระหว่างการตั้งชื่อนั่งร้านคณิตศาสตร์และการประยุกต์ใช้กับตัวอย่างใด ๆ ก็สร้างความสับสน
Antoni Parellada

1
อีกแหล่งข้อมูลที่ดีสำหรับคุณอาจเป็นการใช้งานlme4pureRซึ่งตามมาด้วยบทความข้างต้นและเขียนเป็นภาษาอาร์บางทีการmkZt()ค้นหาที่นี่จะเป็นการเริ่มต้นที่ดีใช่ไหม
alexforrence

คำตอบ:


5
  1. สร้างสร้างความเมทริกซ์การผลิต 3 ระดับ ( , และ) แต่ละคนมี 10 ข้อสังเกตหรือวัด ( ) ติดตามรหัสในลิงค์ต้นฉบับใน OP:Jผม309330371nrow(sleepstudy[sleepstudy$Subject==309,]) [1] 10

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

ป้อนคำอธิบายรูปภาพที่นี่

  1. การสร้างเมทริกซ์สามารถช่วยได้โดยใช้ฟังก์ชันเป็นข้อมูลอ้างอิง:XผมgetME

    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. Z i = ( J TฉันX T i ) Zผมคำนวณเป็น :Zผม=(JผมT* * * *XผมT)

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

ป้อนคำอธิบายรูปภาพที่นี่

สอดคล้องนี้สมการ (6) ในต้นฉบับกระดาษ :

Zผม=(JผมT* * * *XผมT)T=[Jผม1TXผม1TJผม2TXผม2TJผมnTXผมnT]

JผมTXผมT

JผมT=[110000001100000011]XผมT=[111111010101]

และ

JผมT* * * *XผมT=[(100)(10)(100)(11)(010)(10)(010)(11)(001)(10)(001)(11)]

=[Jผม1TXผม1TJผม2TXผม2TJผม3TXผม3TJผม4TXผม4TJผม5TXผม5TJผม6TXผม6T]

=[110000010000001100000100000011000001]Zผม=[100000110000120000001000001100001200000010000011000012]

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. Zas.matrix(Zi)%*%b
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.