r - lmer中方差矩阵的提取
问题描述
我试图从 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 and 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
我希望解释足够清楚,非常感谢所有可能并愿意帮助我的人!
解决方案
推荐阅读
- python - django 类型错误“银行”模型对象不是 iterbale
- windows - 如何为 Windows CMD 正确过滤 ChromeDevTools cURL?
- c# - 加载 DataTable 后强制将新的自动增量列放入第 0 列
- c# - 通过 Azure 门户中的“身份验证”刀片与 Startup.cs 中的手动保护功能应用程序
- c - ZFS 快照(或其他文件系统快照)能否恢复文件系统内存组件?
- javascript - 如何在使用 AWS ECS FARGATE 时为 Web 应用程序存储上传的文件
- haskell - Haskell List Comprehension:List 中用作谓词的布尔项
- javascript - 将数组增加到最大项目
- c++ - 使用概念检查成员函数
- php - PHP-GD 已安装,但在 wordpress 安装期间需要