混合效果模型的模型矩阵


10

lmer函数内lme4R存在是构建随机效应,模型矩阵的呼叫,作为解释在这里,7页- 9。Z

计算需要两个矩阵和 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乘法:

[1个1个1个1个1个1个][1个1个1个1个1个1个-1个1个-1个1个-1个1个]=[1个1个-1个1个1个1个-1个1个1个1个-1个1个]

但是是它的转置:ž一世

(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”:

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等等。第二部分显然是实际测量值:0用于基线,1睡眠剥夺的第一天等。

但是,什么是实际 矩阵和相应的取其相关吗?X ž = Ĵ Ť * X Ť Ž = Ĵ ŤX ŤĴ一世 X一世 ž一世=Ĵ一世ŤX一世Ť ž一世=Ĵ一世ŤX一世Ť

这是可能的

[1个1个1个1个1个1个1个1个1个1个1个1个1个1个1个1个1个1个1个1个1个1个1个1个1个1个1个1个1个1个][1个1个1个1个1个1个1个1个1个1个01个23456789]=

[1个1个1个1个1个1个1个1个1个1个01个234567891个1个1个1个1个1个1个1个1个1个01个234567891个1个1个1个1个1个1个1个1个1个01个23456789]

问题在于它不是lmer函数所要求的转置,并且仍然不清楚创建的规则是什么。X一世


1
这比您实际要做的要容易得多。这里的矩阵只是单位矩阵与设计矩阵的Kronecker乘积(转置)。ž
唐尼2015年

谢谢您的提示。我将继续研究此函数的线性代数骨架中的所有子指标。如果单击到位,我将继续回答我自己的问题,但是尽管我知道这很简单,但是数学脚手架命名法与任何示例的应用之间的对应关系令人困惑。
安东尼·帕雷拉达

1
另一个适合您的好资源可能是它们的lme4pureR实现,它随同上述小插图,并且完全用R编写。也许mkZt()在这里搜索)是一个好的开始?
alexforrence

Answers:


5
  1. 创建矩阵需要产生3个级别(,和)每一个与10个观察或测量()。遵循OP中原始链接中的代码:Ĵ一世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. ž一世的计算公式为:ž一世=Ĵ一世ŤX一世Ť

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

在此处输入图片说明

这对应于原始论文中的方程式(6):

ž一世=Ĵ一世ŤX一世ŤŤ=[Ĵ一世1个ŤX一世1个ŤĴ一世2ŤX一世2ŤĴ一世ñŤX一世ñŤ]

并且要看到这一点,我们只有9个测量值和一个基线(0),而不是9个测量值和一个基线(0),而可以处理截断的和矩阵。结果矩阵为:Ĵ一世ŤX一世Ť

Ĵ一世Ť=[1个1个0000001个1个0000001个1个]和。X一世Ť=[1个1个1个1个1个1个01个01个01个]

Ĵ一世ŤX一世Ť=[1个001个01个001个1个01个01个001个01个1个001个1个0001个1个1个]

=[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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.