使用来自mice()库的填充数据集,在R中拟合一个多层次模型

8

我对R语言中的mice包不太熟悉。但是我正在尝试从popmis中填补5个数据集,然后用with()每个数据集分别拟合一个lmer()模型,最后通过pool()函数汇总。

我认为mice()包中的pool()函数无法与lme4包中的lmer()函数一起使用,对吗?

如果是这样的话,是否有一种方法可以编写自定义函数,以便像下面的情况一样运作类似于pool()的函数?

library(mice)
library(lme4)

imp <- mice(popmis, m = 5) # `popmis` is a dataset from `mice`

fit <- with(imp, lme4::lmer(popular ~ sex + (1|school))) # works fine.

pool(fit) # BUT this one fails, should I loop here?
1个回答

5

我有解决方案。它非常简单:install.packages("broom.mixed"),然后使用library(broom.mixed)命令。 broom.mixed软件包提供了适当的glance方法。

# install.packages("broom.mixed")
library(mice)
library(lme4)
library(broom.mixed)
imp <- mice(popmis, m = 5) # `popmis` is a dataset from `mice`

fit <- with(data = imp, exp = lme4::lmer(popular ~ sex + (1|school)))

pool(fit) 

结果:

> pool(fit)
Class: mipo    m = 5 
         term m  estimate        ubar            b           t dfcom       df        riv     lambda        fmi
1 (Intercept) 5 4.9122016 0.007589694 0.0003823641 0.008048531  1996 743.8691 0.06045526 0.05700878 0.05953397
2         sex 5 0.8378947 0.001187606 0.0002937859 0.001540149  1996  72.7305 0.29685175 0.22890184 0.24926611

Ben Bolker是broom.mixed的作者。


但是,与您的解决方案中的随机效应相关的ubar应该仅显示为(intercept)而不是sex(因为该模型仅具有截距的随机效应),这里发生了什么? - rnorouzian
@BenBolker是broom.mixed的作者。对我来说,它看起来还不错,尽管我不是混合模型的专家。 - polkas

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