汇集估算数据集的 glmers
Pooling glmers of imputed datasets
问题:
我有一个数据集,其中缺少一些预测变量值。我想将已应用于这些插补集的 glmer
个模型集中在一起。我正在使用 mice
包来创建插补(我也使用了 amelia
和 mi
但没有成功)。我想主要提取固定效应。
使用 mice 包中的 pool()
函数 returns 错误:
Error in qhat[i, ] : incorrect number of dimensions
我尝试在这里使用和改编之前重写的 pool()
函数:
https://github.com/stefvanbuuren/mice/pull/5
我可能忽略了一个明显的解决方案!
这是一个例子:
# 1. create data (that can be replicated and converge later)
data = data.frame(x1=c(rep("1",0.1*1000), rep("0",0.5*1000),
rep("1",0.3*1000), rep("0",0.1*1000)),
x2=c(rep("fact1",0.55*1000), rep("fact2",0.1*1000),
rep(NA,0.05*1000), rep("fact3",0.3*1000)),
centre=c(rep("city1",0.1*1000), rep("city2",0.2*1000),
rep("city3",0.15*1000), rep("city1",0.25*1000),
rep("city2",0.3*1000) ))
# 2. set factors
data = sapply(data, as.factor)
# 3. mice imputation
library(mice)
imp.data = mice(data, m=5, maxit=20, seed=1234, pri=F)
# 4. apply the glmer function
library(lme4)
mice.fit = with(imp.data, glmer(x1~x2+(1|centre), family='binomial'))
# 5. pool imputations together
pooled.mi = pool(mice.fit)
下面是我在第 4 步应用的另一个函数,希望它能创建一个适合 pool()
.
的对象
mice.fit = lapply(imp.data$imp, function(d){ glmer(x1~x2+(1|centre), data=d,
family='binomial') })
我有一个解决方法,涉及使用元分析模型来汇总 glmer
模型的每个固定效应的结果。这行得通 - 但让 Rubin 模型工作会更好。
我自己制作了 mice
的分支,将上面引用的扩展版本拉入其中,并稍微清理一下:试试
devtools::install_github("bbolker/mice")
然后看看你的流程是如何进行的。 (如果有效,应该有人提交 reminder/new 拉取请求...)
class"glmerMod"和"lmerMod"的对象有区别吗?我不熟悉那个包 lme4。但如果没有区别,你可以将 mice.fit 分析的 class 更改为 "lmerMod" 然后它应该 运行 没问题。
问题:
我有一个数据集,其中缺少一些预测变量值。我想将已应用于这些插补集的 glmer
个模型集中在一起。我正在使用 mice
包来创建插补(我也使用了 amelia
和 mi
但没有成功)。我想主要提取固定效应。
使用 mice 包中的 pool()
函数 returns 错误:
Error in qhat[i, ] : incorrect number of dimensions
我尝试在这里使用和改编之前重写的 pool()
函数:
https://github.com/stefvanbuuren/mice/pull/5
我可能忽略了一个明显的解决方案!
这是一个例子:
# 1. create data (that can be replicated and converge later)
data = data.frame(x1=c(rep("1",0.1*1000), rep("0",0.5*1000),
rep("1",0.3*1000), rep("0",0.1*1000)),
x2=c(rep("fact1",0.55*1000), rep("fact2",0.1*1000),
rep(NA,0.05*1000), rep("fact3",0.3*1000)),
centre=c(rep("city1",0.1*1000), rep("city2",0.2*1000),
rep("city3",0.15*1000), rep("city1",0.25*1000),
rep("city2",0.3*1000) ))
# 2. set factors
data = sapply(data, as.factor)
# 3. mice imputation
library(mice)
imp.data = mice(data, m=5, maxit=20, seed=1234, pri=F)
# 4. apply the glmer function
library(lme4)
mice.fit = with(imp.data, glmer(x1~x2+(1|centre), family='binomial'))
# 5. pool imputations together
pooled.mi = pool(mice.fit)
下面是我在第 4 步应用的另一个函数,希望它能创建一个适合 pool()
.
mice.fit = lapply(imp.data$imp, function(d){ glmer(x1~x2+(1|centre), data=d,
family='binomial') })
我有一个解决方法,涉及使用元分析模型来汇总 glmer
模型的每个固定效应的结果。这行得通 - 但让 Rubin 模型工作会更好。
我自己制作了 mice
的分支,将上面引用的扩展版本拉入其中,并稍微清理一下:试试
devtools::install_github("bbolker/mice")
然后看看你的流程是如何进行的。 (如果有效,应该有人提交 reminder/new 拉取请求...)
class"glmerMod"和"lmerMod"的对象有区别吗?我不熟悉那个包 lme4。但如果没有区别,你可以将 mice.fit 分析的 class 更改为 "lmerMod" 然后它应该 运行 没问题。