Mô hình ma trận cho các mô hình hiệu ứng hỗn hợp


10

Trong lmerhàm bên lme4trong Rcó một lời kêu gọi xây dựng ma trận mô hình các hiệu ứng ngẫu nhiên, , như được giải thích ở đây , trang 7-9.Z

Tính Z đòi hỏi các sản phẩm KhatriRao và / hoặc Kronecker của hai ma trận, JiXi .

Ma trận Ji là một câu cửa miệng: "Ma trận chỉ số của các chỉ số yếu tố nhóm", nhưng nó dường như là một ma trận thưa thớt với mã hóa giả để chọn đơn vị nào (ví dụ, các đối tượng trong các phép đo lặp đi lặp lại) tương ứng với các mức phân cấp cao hơn là "bật" cho bất kỳ quan sát. Các Xi ma trận dường như đóng vai trò như một chọn của các phép đo ở mức độ thứ bậc thấp hơn, do đó sự kết hợp của cả hai "selectors" sẽ mang lại một ma trận, Zi của mẫu minh họa trong bài báo thông qua các ví dụ sau:

(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

Chuyển đổi từng ma trận này và thực hiện phép nhân Khatri-Rao:

[11......11......11][111111111111]=[11....11......11....11......11....11]

Nhưng là hoán vị của nó: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

Nó chỉ ra rằng các tác giả sử dụng cơ sở dữ liệu sleepstudytrong lme4, nhưng không thực sự xây dựng các ma trận thiết kế khi họ áp dụng cho nghiên cứu cụ thể này. Vì vậy, tôi đang cố gắng hiểu làm thế nào mã tạo thành trong bài báo được sao chép ở trên sẽ chuyển thành sleepstudyví dụ có ý nghĩa hơn .

Để đơn giản trực quan, tôi đã giảm tập dữ liệu xuống chỉ còn ba đối tượng - "309", "330" và "371":

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

Mỗi cá nhân sẽ thể hiện một giao thoa và độ dốc rất khác nhau nên xem xét hồi quy OLS đơn giản, cho thấy sự cần thiết của một mô hình hiệu ứng hỗn hợp với hệ thống phân cấp hoặc đơn vị cao hơn tương ứng với các đối tượng:

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

nhập mô tả hình ảnh ở đây

Cuộc gọi hồi quy hiệu ứng hỗn hợp là:

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

Và ma trận trích xuất từ ​​hàm mang lại kết quả như sau:

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

Điều này có vẻ đúng, nhưng nếu có, đại số tuyến tính đằng sau nó là gì? Tôi hiểu các hàng của 1sự lựa chọn của các cá nhân như thế nào. Chẳng hạn, chủ đề 309được bật cho đường cơ sở + chín quan sát, do đó, nó nhận được bốn 1và nhiều hơn nữa. Phần thứ hai rõ ràng là phép đo thực tế: 0cho đường cơ sở, 1cho ngày đầu tiên thiếu ngủ, v.v.

Ji Xi Zi=(JiTXiT) Zi=(JiTXiT)

Đây là một khả năng,

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

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

lmerXi


1
Z

Cảm ơn bạn đã gợi ý của bạn. Tôi sẽ tiếp tục tìm hiểu ý nghĩa của tất cả các phân phụ trong khung đại số tuyến tính của hàm này. Nếu nó nhấp vào vị trí, tôi sẽ tiếp tục và trả lời câu hỏi của riêng mình, nhưng mặc dù tôi biết rất đơn giản, sự tương ứng giữa danh pháp toán học giàn giáo và ứng dụng cho bất kỳ ví dụ nào là khó hiểu.
Antoni Parellada

1
Một tài nguyên tốt khác cho bạn có thể là triển khai lme4pureR của họ , theo sau với họa tiết trên và được viết hoàn toàn bằng R. Có lẽ mkZt()(tìm kiếm nó ở đây ) là một khởi đầu tốt?
alexforrence 8/07/2015

Câu trả lời:


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

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

nhập mô tả hình ảnh ở đây

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

nhập mô tả hình ảnh ở đây

Vì chúng ta sẽ cần chuyển vị và đối tượng Xikhông phải là ma trận, nên t(Xi)có thể được xây dựng như:

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

  1. ZiZi=(JiTXiT)

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

nhập mô tả hình ảnh ở đây

Điều này tương ứng với phương trình (6) trong bài báo gốc :

Zi=(JiTXiT)T=[Ji1TXi1TJi2TXi2TJinTXinT]

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

Nếu chúng ta thêm những giá trị này đến cố định ảnh hưởng của các cuộc gọi fm1<-lmer(Reaction~Days+(Days|Subject), sleepstudy)chúng tôi nhận được chặn:

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

và các sườn dốc:

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

các giá trị phù hợp với:

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

nhập mô tả hình ảnh ở đây

  1. Zbas.matrix(Zi)%*%b
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.