我正在阅读一些关于混合模型的信息,但我不确定所使用的术语以及它们如何组合在一起。Pinheiro 在他的书“S 和 S-Plus 中的混合效应模型”的第 62 页上描述了似然函数。
第二个方程的第一项被描述为的边际密度。
我一直在尝试为简单的随机效应模型生成这些对数似然 (ll),因为我认为这将有助于我的理解,但我一定是误解了推导。
我尝试计算 ll 的示例。
示例模型
library(lme4)
model <- lmer(angle ~ temp + (1|replicate), data=cake, REML=FALSE)
条件对数似然
我尝试计算该模型的条件对数似然:从 看来,我应该能够通过在预测处找到数据的密度来计算这一点单位/复制级别。
sum(dnorm(cake$angle,
predict(model), # predictions at replicate unit (XB + Zb) level
sd=sigma(model),
log=TRUE))
#[1] -801.6044
# Which seems to agree with
cAIC4::cAIC(model)$loglikelihood
# [1] -801.6044
# or should we really be using a multivariate normal density
# but doesn't make a difference as variance is \sigma^2 I_n
dmvnorm(cake$angle, predict(model), diag(sigma(model)^2,270, 270), log=TRUE)
#[1] -801.6044
边际对数似然
我尝试计算边际对数似然,lme4
给出为
logLik(model)
#'log Lik.' -834.1132 (df=4)
采取与以前类似的方法,从 看来,我应该能够通过在人口水平的预测中找到数据的密度来计算这一点,但它不接近。
sum(dnorm(cake$angle,
predict(model, re.form=NA), # predictions at population (XB) level
sd=sigma(model),
log=TRUE))
# [1] -1019.202
所以也许我需要使用第二个等式并且需要使用y的条件模型和b的边际,但仍然没有接近。
sum(
dnorm(cake$angle, predict(model), sd=sigma(model), log=TRUE) , # conditional
dnorm(0, ranef(model)$replicate[[1]], # RE predictions
sd=sqrt(VarCorr(model)$replicate), log=TRUE)
)
# [1] -849.6086
编辑:接下来去...
对于线性混合模型,和我认为似然计算的方差应该估计为var(Y) =,但又错了!
所以在代码中
z = getME(model, "Z")
zt = getME(model, "Zt")
psi = bdiag(replicate(15, VarCorr(model)$replicate, simplify=FALSE))
betw = z%*%psi%*%zt
err = Diagonal(270, sigma(model)^2)
v = betw + err
sum(dnorm(cake$angle,
predict(model, re.form=NA),
sd=sqrt(diag(v)),
log=TRUE))
# [1] -935.652
我的问题:
- 你能告诉我在计算边际可能性时哪里出错了。我真的不需要代码来重现 ll,而是更多地描述为什么我尝试的方法不起作用。
非常感谢。
PS。我确实查看了生成这些值的函数,lme4:::logLik.merMod
并lme4:::devCrit
看到作者使用了一些困难/技术方法,这再次导致我需要帮助,为什么我的方法是错误的。