了解混合效应模型的边际可能性

机器算法验证 混合模式 可能性 lme4-nlme
2022-03-20 20:54:08

我正在阅读一些关于混合模型的信息,但我不确定所使用的术语以及它们如何组合在一起。Pinheiro 在他的书“S 和 S-Plus 中的混合效应模型”的第 62 页上描述了似然函数。

在此处输入图像描述

第二个方程的第一项被描述为的边际密度yibi

我一直在尝试为简单的随机效应模型生成这些对数似然 (ll),因为我认为这将有助于我的理解,但我一定是误解了推导。


我尝试计算 ll 的示例。

示例模型

library(lme4)
model <- lmer(angle  ~ temp + (1|replicate), data=cake, REML=FALSE)

条件对数似然

我尝试计算该模型的条件对数似然:从 看来,我应该能够通过在预测处找到数据的密度来计算这一点单位/复制级别。p(yibi,β,σ2)

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)

采取与以前类似的方法,从 看来,我应该能够通过在人口水平的预测中找到数据的密度来计算这一点,但它不接近。p(yiβ,θ,σ2)

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) =,但又错了!Y=Xβ+Zb+ϵbiN(0,ψ)eiN(0,Σ)ZψZT+Σ

所以在代码中

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.merModlme4:::devCrit看到作者使用了一些困难/技术方法,这再次导致我需要帮助,为什么我的方法是错误的。

1个回答

lme4:::logLik.merMod我可以通过意识到Y的边际分布是多元正态 (MVN)来重现返回的边际对数似然(因为b的边际分布和Y的条件是 MVN)。

所以这段代码会重现

library(mvtnorm)
dmvnorm(cake$angle, predict(model, re.form=NA), as.matrix(v), log=TRUE)
#[1] -834.1132

其中cake$angle是观察值,predict(model, re.form=NA)是总体预测(使用固定效应系数计算),并且v是边际模型的方差(如问题所示)。


关于我的问题中失败的努力的一些评论。

在计算条件对数似然时,我使用了单变量正态密度函数,而我可以/应该使用多变量。在这种情况下,它没有区别,因为单位方差是σ2In

mvtnorm::dmvnorm(cake$angle, predict(model), diag(sigma(model)^2,270, 270), log=TRUE)
#[1] -801.6044

试图计算边际分布

  • 首先尝试使用总体(XB)级别的预测,但方差不正确(它忽略了单位间误差)

    sum(dnorm(cake$angle, predict(model, re.form=NA), sd=sigma(model), log=TRUE))
    
  • 我认为第二次尝试只是胡说八道

  • 第三次尝试使用单变量而不是多变量正态分布。