如何仅计算用于在 R 中创建模型 (GLMER) 的数据子集的 R^2?

问题描述 投票:0回答:1

我有一个广义线性混合模型,使用 lme4 包中的函数 glmer 拟合来自多个人群的数据。我想知道该模型是否比其他人群更适合某个人群的数据,并且我希望有一种巧妙的方法来定量报告这一点。我可以使用性能包中的函数 R2_nakakawa 计算该模型的 R 平方。有没有一种方法可以以相同的拟合度重新制作模型对象,但仅使用数据的子集(即一个总体)并获取该模型对象的 R^2 ?或者我是否缺少一种更简单的方法来完成我想做的事情?

r lme4 mixed-models
1个回答
0
投票

update
功能应该就是您正在寻找的功能。

library(lme4)
library(performance)

data(cbpp)

从包含所有数据的模型开始。

gm1 <- glmer(cbind(incidence, size - incidence) ~ period + (1 | herd),
             data = cbpp, family = binomial)

创建一个新的分组变量并在每个级别上再次运行模型。

ccbpp$group <- rep(paste("Group.", 1:2), each=nrow(cbpp)/2)

gm.group1 <- update(gm1, data=subset(cbpp, subset=group=="Group.1"))
gm.group2 <- update(gm1, data=subset(cbpp, subset=group=="Group.2"))

r2_nakagawa(gm.group1)
# R2 for Mixed Models

  Conditional R2: 0.770
     Marginal R2: 0.551

r2_nakagawa(gm.group2)
# R2 for Mixed Models

  Conditional R2: 0.809
     Marginal R2: 0.287

或更方便地使用

split
lapply
:

lapply(split(cbpp, cbpp$group), \(x) r2_nakagawa(update(gm1, data=x)))
$`Group. 1`
# R2 for Mixed Models

  Conditional R2: 0.770
     Marginal R2: 0.551

$`Group. 2`
# R2 for Mixed Models

  Conditional R2: 0.809
     Marginal R2: 0.287
© www.soinside.com 2019 - 2024. All rights reserved.