首页 文章

如何从lme4获得随机效应的协方差矩阵(BLUP /条件模式)

提问于
浏览
3

所以,我在R中拟合了一个带有两个随机截距的线性混合模型:

Y = X beta  + Z b + e_i,

哪里 b ~ MVN (0, Sigma) ; XZ 分别是固定和随机效应模型矩阵, betab 是固定效应参数和随机效应BLUP /条件模式 .

我想了解 b 的基础协方差矩阵,这在 lme4 包中似乎不是一件小事 . 您只能通过 VarCorr 获得方差,而不是实际的相关矩阵 .

根据one of the package vignettes(第2页),您可以计算beta的协方差: e_i * lambda * t(lambda) . 您可以从 lme4 的输出中提取所有这些组件 .

我想知道这是不是要走了?或者您还有其他建议吗?

1 回答

  • 2

    ?ranef

    如果'condVar'为'TRUE',则每个数据帧都有一个名为'“postVar”'的属性,它是一个具有对称面的三维数组;每个面包含特定级别的分组因子的方差 - 协方差矩阵 . (此属性的名称是历史工件,并且可能在将来的某个时间点更改为“condVar” . )

    设置一个例子:

    library(lme4)
    fm1 <- lmer(Reaction ~ Days + (Days | Subject), sleepstudy)
    rr <- ranef(fm1,condVar=TRUE)
    

    获取截距的 b 值之间的方差 - 协方差矩阵

    pv <- attr(rr[[1]],"postVar")
    str(pv)
    ##num [1:2, 1:2, 1:18] 145.71 -21.44 -21.44 5.31 145.71 ...
    

    所以这是一个2x2x18阵列;每个切片是特定主题的条件截距和斜率中的方差 - 协方差矩阵(根据定义,每个主题的截距和斜率与所有其他主题的截距和斜率无关) .

    要将其转换为方差 - 协方差矩阵(请参阅 getMethod("image",sig="dgTMatrix") ...)

    library(Matrix)
    vc <- bdiag(  ## make a block-diagonal matrix
                lapply(
                    ## split 3d array into a list of sub-matrices
                    split(pv,slice.index(pv,3)),
                       ## ... put them back into 2x2 matrices
                          matrix,2)) 
    image(vc,sub="",xlab="",ylab="",useRaster=TRUE)
    

    enter image description here

相关问题