ในlmer
ฟังก์ชั่นภายในlme4
ในR
มีการเรียกร้องให้สร้างเมทริกซ์รูปแบบของผลกระทบสุ่มตามที่อธิบายไว้ที่นี่ , หน้า 7-9
คำนวณ entails KhatriRao และ / หรือผลิตภัณฑ์ Kronecker สองเมทริกซ์และx_i J i X i
เมทริกซ์เป็นคำหนึ่ง: "เมทริกซ์ตัวบ่งชี้ของดัชนีปัจจัยการจัดกลุ่ม" แต่ดูเหมือนว่าจะเป็นเมทริกซ์เบาบางที่มีการเข้ารหัสแบบดัมมี่เพื่อเลือกหน่วย (ตัวอย่างเช่นอาสาสมัครในการวัดซ้ำ) ที่สอดคล้องกับระดับลำดับขั้นสูง การสังเกตใด ๆ เมทริกซ์ที่ดูเหมือนว่าจะทำหน้าที่เป็นตัวเลือกของการวัดในระดับที่ต่ำกว่าลำดับชั้นเพื่อให้การรวมกันของทั้งสอง "เตอร์" จะให้ผลผลิตเมทริกซ์,ของแบบฟอร์มแสดงในกระดาษผ่านตัวอย่างต่อไปนี้:X i Z i
(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:
แต่เป็นทรานสโพสของมัน:
(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ฉัน ) ⊤
นี่คือความเป็นไปได้
ปัญหาคือว่ามันไม่ได้เป็นขนย้ายเป็นlmer
ฟังก์ชั่นที่ดูเหมือนว่าจะเรียกร้องให้และยังคงไม่มีความชัดเจนว่ากฎระเบียบที่มีการสร้างx_i
mkZt()
ค้นหาที่นี่จะเป็นการเริ่มต้นที่ดีใช่ไหม