我尝试在使用mice()插补缺失数据的 Dataframe 上运行零膨胀泊松回归。我的代码成功运行了多重插补并合并了结果。但是,当我尝试汇总合并估计值时,我无法获得模型的完整结果。零膨胀泊松模型(zeroinfl()
)有两个组件:一个用于计数部分,一个用于我的数据中过多的零。我只能显示合并模型的一部分。
library(dplyr)
library(mice)
library(pscl)
library(poissonreg)
library(countimp)
# Set the seed for reproducibility
set.seed(123)
# Simulate data with one count outcome and three variables
n <- 1000
x1 <- rnorm(n)
x2 <- rbinom(n, 1, 0.5)
x3 <- rpois(n, 2)
y <- rpois(n, 1 + exp(0.5 * x1 + 0.8 * x2 + 0.3 * x3))
# Introduce missing data to the three variables
prop_missing <- 0.2
missing_x1 <- sample(c(TRUE, FALSE), size = n,
prob = c(prop_missing, 1 - prop_missing), replace = TRUE)
missing_x2 <- sample(c(TRUE, FALSE), size = n,
prob = c(prop_missing, 1 - prop_missing), replace = TRUE)
missing_x3 <- sample(c(TRUE, FALSE), size = n,
prob = c(prop_missing, 1 - prop_missing), replace = TRUE)
x1[missing_x1] <- NA
x2[missing_x2] <- NA
x3[missing_x3] <- NA
# Create a data frame with the simulated data
dat <- data.frame(y, x1, x2, x3)
#run intital imputation
ini <- mice( dat, m = 5, maxit = 0)
pred <- ini$predictorMatrix #set predictive matrix
pred[1, ] <- c(0, 2, 2, 3) #edit predictive matrix
imp.zip <- mice(dat, m = 5, maxit = 5, method = c("", "pmm", "pmm", "zip"),
pred , seed = 1234, print = T)
# run imputation with pred and specify methods
res.zinb <- with(imp.zip, zeroinfl( y ~ x1 + x2 | x3, dist = "poisson",
link = "logit" ) )
# run the zeroinflated poisson regression on the imputed data
summary(pool(res.zinb)) #summarize and pool
1条答案
按热度按时间zbq4xfa01#
问题
所以我认为这个问题与
mice::pool()
是如何实现的有关。据我所知,它做了以下事情:1.调用名为
pool.fitlist
的内部函数。(github源代码)pool.fitlist
接收mira类的对象,并在其上调用summary
。(github源代码)pool.fitlist
计算合并估计值。(github源代码)然后当你调用
summary(pool(res.zinb))
时,它会调用summary.mipo
(github源代码),因为pool(res.zinb)
是mipo
类。步骤(2)中调用的
summary
函数不知道如何显示zeroinfl
模型的所有组件,这就是summary(pool(...))
不显示模型的logit部分的原因broom
和broom.mixed
也没有实现zeroinfl
模型的简洁摘要-您可以通过加载broom.mixed
包并运行broom.mixed::get_methods()
来检查。我的解决方案:说明
poissonreg::tidy()
解决了我们步骤(2)中的问题:我提出的解决方案基本上是通过以下步骤手动执行
pool()
:1.为上述
fitlist
I中的每个zeroinfl
型号收集整齐的tibble1.对于每个(term,type)组,调用
mice::pool.scalar
来计算合并估计值,这与pool.fitlist
中的操作相同,但我认为该方法是为这个特定用例提供的(参见pool Rdocumentation)1.使用
pool.scalar
的结果,根据summary.mipo
的计算方式计算合并估计值、标准误、统计量和p值。我的解决方案:执行情况
以下是上述3个步骤的完整实施:
健全性检查
我们可以检查
summary(pool(res.zinb))
提供的估计值与pooled_summary
具有相同的值