0

有没有办法在 lmer 模型中修改(覆盖)随机效应?对于固定效果,有一个称为插槽my_lmer@beta,我可以使用以下方法更改固定效果:

my_lmer@beta[1] <- 0.5

对于随机效应,是否有类似的方法可以做到这一点?lmer-object 是否已经包含随机效果,或者稍后由 eg 计算ranef()

4

1 回答 1

0

找出你想要做什么确实很好。修改引用类对象的内部是特别危险的——你可能会不小心修改对象的副本或导致分段错误......从这里

library(lme4)
fm1 <- lmer(Reaction~Days+(1|Subject),sleepstudy) ## just for example
fm1@pp$getRefClass()$methods()

将向您展示方法...但是,您必须比这更深入一些...事实证明(第 85 卷src/predModule.cppb实际上采取了内部u

 VectorXd merPredD::b(const double& f) const {return d_Lambdat.adjoint() * u(f);}

这反过来又调用

VectorXd merPredD::u(const double& f) const {return d_u0 + f * d_delu;}

这意味着为了改变b你需要改变u0; 目前我认为这是不可能的。

作为参考,这是一些代码(来自here),当随机效应z从它们的估计值被(向量)置换时,它会评估偏差......

rr <- m@resp                        ## extract response module
u0 <- getME(m,"u")                  ## conditional modes
L <- getME(m,"L")
## sd <- 1/getME(pp,"L")@x
## filled elements of L matrix==diag for simple case
## for more general case need the following -- still efficient
sd <- sqrt(diag(chol2inv(L)))
## fixed-effects contribution to linear predictor
fc <- getME(m,"X") %*% getME(m,"beta")
ZL <- t(getME(m,"Lambdat") %*% getME(m,"Zt"))
## evaluate the unscaled conditional density on the deviance scale
dc <- function(z) {
    uu <- u0 + z * sd    ## displace conditional modes
    ##  should still work if z is a vector (by recycling, because u values
    ##  applying to each group are stored adjacent to each other)
    rr$updateMu(fc + ZL %*% uu)     ## update linear predictor
    drc <- unname(as.vector(tapply(rr$devResid(), ff, sum)))
    uuc <- colSums(matrix(uu * uu,nrow=nvar))
    (drc + uuc)[grps]
}
于 2016-08-31T00:51:09.473 回答