如何从使用 ML 拟合的 `lme4::lmer` 模型中提取信息准则,并将其与使用 REML 拟合的模型摘要结合起来。

3
我正在尝试从使用最大似然(ML)在中拟合的HLM模型中访问AIC,BIC,logLik和deviance数据,并与基本上相同的使用受限制的最大似然(REML)拟合的模型结合。从和返回的对象结构混乱不堪,我无法找到存储这些数据的位置/方式。
【更新】根据我收到的回应,我已更新代码以反映所取得的进展:
代码示例:
# Least working example
library(lme4)
library(lmerTest)
df <- lme4::sleepstudy
names(df)
# Example model
model <- lmer(Reaction ~ (1|Subject), df, REML = TRUE)
information_criterion <- data.frame(
            "AIC" = AIC(model),
            "BIC" = BIC(model),
            "logLik" = logLik(model),
            "deviance" = deviance(model, REML=FALSE),
            "df.residual" = df.residual(model)
            )
mod_sum <- list(summary(model), information_criterion)
我希望修改输出结果,使其类似于summary的输出结果,如果REML = FALSE(目前无法实现):
> mod_sum

Linear mixed model fit by REML. t-tests use Satterthwaite's method [
lmerModLmerTest]
Formula: Reaction ~ (1 | Subject)
   Data: df

## Information criterion injected here: ##########################

     AIC      BIC   logLik deviance df.resid   # <-- THESE ARE THE LINES I WANT
  1916.5   1926.1   -955.3   1910.5      177   # <-- 

##################################################################

REML criterion at convergence: 1904.3

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.4983 -0.5501 -0.1476  0.5123  3.3446 

Random effects:
 Groups   Name        Variance Std.Dev.
 Subject  (Intercept) 1278     35.75   
 Residual             1959     44.26   
Number of obs: 180, groups:  Subject, 18

Fixed effects:
            Estimate Std. Error     df t value Pr(>|t|)    
(Intercept)   298.51       9.05  17.00   32.98   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

1
我认为这可能会有用?https://stats.stackexchange.com/questions/131272/lme4-why-is-aic-no-longer-displayed-when-using-reml - sjp
1个回答

2

以下是需要注意的几点:

  1. 这里有一个拼写错误:
    m2sum[["information_criterion"]] <- summary(model1)$information_criterion

应该是m2_sum

  1. 您可以使用m2_sum替代summary(model1)$information_criterion
     AIC(model1)

所以,以下内容应该可以正常运行:
m2_sum[["information_criterion"]] <- AIC(model1)

根据原帖的更改,更新如下。

这应该可以工作,但请看一下我的最后一条评论,因为这可能不是一个明智的做法:

> m2_sum$AICtab <- m1_sum$AICtab
> m2_sum

Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Reaction ~ (1 | Subject)
   Data: df

     AIC      BIC   logLik deviance df.resid 
  1916.5   1926.1   -955.3   1910.5      177 

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.4983 -0.5501 -0.1476  0.5123  3.3446 

谢谢您的反馈。我意识到我可以以同样的方式添加所有所需的信息标准,而无需实际适配机器学习模型。不过,我对如何像示例中那样添加输出很感兴趣。 - Pål Bjartan
我不知道你指的是“如何按照所示添加输出”? - Robert Long
你拥有一个对象m2_sum,你问如何给该对象的information_criterion槽位赋值,这就是我的回答。 - Robert Long
抱歉表述不够清晰。我已根据您的输入更新了模型,并尝试显示信息的位置。基本上,我希望输出类似于 summary 函数当 REML = FALSE 时的输出结果。 - Pål Bjartan
2
好的,我明白你想做什么。请注意,这并不是很有意义,因为使用REML拟合的模型实际上没有似然函数来计算AIC;而且这是一件好事,因为它有助于避免比较使用REML拟合的不同模型的似然函数的大错误。如果你对此有疑问,我建议你在Cross Validated上提问。我已经更新了我的答案,提供了一个可能的解决方案。 - Robert Long

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接