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