时间:2018-06-01 10:17:38

标签: r matrix hierarchy hierarchical-data lme4

我试图从lmer中提取随机效应的方差分量,但是在一个非常具体和复杂的设置中,即fMRI。

我将首先解释问题,然后提供一个可重复的示例。

我正在使用功能性fMRI数据并测试聚合技术。在这个特定的背景下,我有3个主题,每个主题都有一个包含第一级估计的矩阵。 这里每行代表大脑中的一个特定节点 i ,系数是节点 ij 的回归参数(暂时不重要,它们是如何计算的或为什么。 我想要做的是使用线性混合建模来聚合结果。

问题在于,在lmer中使用矩阵至少从我的经验来看,实际上是不可能的。 所以这就是我所做的: 首先,我创建了一些随机矩阵,然后将它们转换为向量

   set.seed(49830)
   S.1 <- matrix(rexp(400, rate = 10),20,20)
   S.2 <- matrix(rexp(400, rate = 10),20,20)
   S.3 <- matrix(rexp(400, rate = 10),20,20)

   S1.vec <- as.vector(S.1)
   S2.vec <- as.vector(S.2)
   S3.vec <- as.vector(S.3)
   S.Vec.all <- c(S1.vec, S2.vec, S3.vec)

其次,我正在创建一个固定的效果(让我们说平均激活对每个人来说都是相同的)和分组变量。 在这种情况下,我只是创建了一个以数据为中心的向量。 center_scale 函数的代码位于:http://www.gastonsanchez.com/visually-enforced/how-to/2014/01/15/Center-data-in-R/

     constant <- as.vector(center_scale(S.Vec.all)) 
     Group1 <- rep(1, length(S1.vec))
     Group2 <- rep(2, length(S2.vec))
     Group3 <- rep(3, length(S3.vec))
     Group.all <- c(Group1, Group2, Group3)

第三,制作数据集,将分组变量指定为因子,然后运行模型。

            data.comp <- data.frame(Group.all, constant, S.Vec.all) 
            data.comp$Group.all <- as.factor(data.comp$Group.all)

            mod <- lmer(S.Vec.all ~ constant + (constant|Group.all),
            data = data.comp,
            REML = T,
            control = lmerControl(calc.derivs = FALSE))

            summary(mod)
            ranef(mod)$Group.all    

现在,问题在于,即使我找到了一种提取随机效果并将它们放入矩阵格式的方法,我仍然需要一种方法来计算这些单个矩阵的方差以进行进一步的计算。

有没有办法提取随机系数的方差并再次将它们放入矩阵格式? 我找到了一些伪代码来计算它们,使用Laird和Ware(1982)的配方,这是我想要使用的配方,但它仍然给了我一个非常大的矩阵,这对我来说是完全不可理解的。 这是代码:

            var.d <- crossprod(getME(mod,'Lambdat'))
            Zt <- getME(mod,"Zt")
            vr <- sigma(mod)^2
            var.b <- vr*(t(Zt) %*% var.d %*% Zt)
            sI <- vr * Diagonal(nrow(data.comp))
            var.y <- var.b + sI              

我希望解释清楚得多,并且非常感谢能够并愿意帮助我的所有人!

0 个答案:

没有答案