【发布时间】:2018-01-20 21:03:23
【问题描述】:
我正在使用lme4 拟合线性混合效应模型:
library(lme4)
data(Orthodont)
dent <- Orthodont
d.test <- lmer(distance ~ age + (1|Subject), data=dent)
如果我们笼统地说Y = X * B + Z * d + e是线性混合效应模型的形式,那么我试图从模型的结果中得到Var(Y) = Z * Var(d) * Z^t + Var(e)。
以下公式是正确的方法吗?
k <- table(dent$Subject)[1]
vars <- VarCorr(d.test)
v <- as.data.frame(vars)
sigma <- attr(vars, "sc")
s.tech <- diag(v$vcov[1], nrow=k)
icc <- v$vcov[1]/sum(v$vcov)
s.tech[upper.tri(s.tech)] <- icc
s.tech[lower.tri(s.tech)] <- icc
sI <- diag(sigma^2, nrow=length(dent$age))
var.b <- kronecker(diag(1, nrow=length(dent$age)/k), s.tech)
var.y <- sI + var.b
我认为这是一个简单的问题,但我在任何地方都找不到执行此操作的代码,所以我问我是否做得对。
【问题讨论】:
-
运行代码会引发错误,因为您指的是未定义的
x对象(在sI <- diag(sigma^2, nrow=nrow(x))中)。在任何情况下,您都可以使用vcov方法获得任何merMod对象(这是lmer生成的)的方差-协方差矩阵。在您的情况下:vcov(d.test)。不过,这只提供了固定效果的矩阵。 -
@OriolMirosa 感谢您指出错误。但是,
vcov/VarCorr不是我要寻找的答案——它们为固定和随机效应提供方差/协方差。我正在尝试获取数据的方差/协方差Y