R 中回归的汇总插补结果的重新格式化结果

Reformat results of pooled imputation results for regression in R

我对缺失数据使用多重插补,然后使用 pool_mi 函数将插补试验的结果拟合到我的回归模型。但是输出的格式不是很容易解释 table 的方式,我希望得到一些关于如何这样做的指导。下面是我对输出的函数和图像所做的与我想要的输出的对比的示例代码。

library(mitools)
data(data.ma05)
dat <- data.ma05

# imputation of the dataset: use six imputations
resp <- dat[, - c(1:2) ]
imp <- mice::mice( resp, method="norm", maxit=3, m=6 )
datlist <- miceadds::mids2datlist( imp )

# linear regression with cluster robust standard errors
mod <- lapply(  datlist, FUN=function(data){
            miceadds::lm.cluster( data=data, formula=denote ~ migrant+ misei,
                    cluster=dat$idclass )
            }  )
# extract parameters and covariance matrix
betas <- lapply( mod, FUN=function(rr){ coef(rr) } )
vars <- lapply( mod, FUN=function(rr){ vcov(rr) } )
# conduct statistical inference
summary( miceadds::pool_mi( qhat=betas, u=vars ) )

这是我得到的输出 table。

但是有没有一种方法可以使用 stargazer 或其他一些 function/package 来重新格式化我的结果,使 p-values 变圆并且在侧面有星星来表示重要性?下图展示了更多我希望输出的外观。我知道此图像中的回归完全不同 function/variables/data,但我将其包括在内是为了清楚地说明我希望 p-values 的输出如何显示。谢谢!

我不知道如何在 stargazer 中实现这一点,但是使用 modelsummary package for R 很容易做到(免责声明:我是作者)。

modelsummary 支持 100 多个开箱即用的模型,但不支持 class pool_mi 的模型对象,这是您的代码生成的。幸运的是,添加对新模型的支持非常容易,as described in detail in the documentation.

具体来说,我们需要定义两个 S3 方法,名为 tidy.CLASSNAMEglance.CLASSNAME。第一种方法 returns data.frame 每行一个系数,列名跟在 standard terminology from the broom package 之后。第二种方法 returns 具有拟合优度或其他模型特征的单行 data.frame,每列一个。

在您的情况下,这些简单的方法似乎可以完成工作(显然,您可以自定义):

library(modelsummary)

tidy.pool_mi <- function(x, ...) {
  msg <- capture.output(out <- summary(x, ...))
  out$term <- row.names(out)
  colnames(out) <- c("estimate", "std.error", "statistic", "p.value",
                     "conf.low", "conf.high", "miss", "term")
  return(out)
} 

glance.pool_mi <- function(x, ...) {
  data.frame(nimp = x$m)
}

当我们在 pool_mi 的输出上调用这些方法时,我们得到:

mod_pooled <- miceadds::pool_mi( qhat=betas, u=vars )


glance(mod_pooled)
#>   nimp
#> 1    6

tidy(mod_pooled)
#>               estimate   std.error statistic      p.value    conf.low
#> (Intercept)  2.5875292 0.085702631 30.191946 3.808654e-55  2.41769205
#> migrant      0.5840870 0.087258478  6.693756 1.051145e-10  0.41237872
#> misei       -0.0140385 0.001661665 -8.448452 2.090746e-12 -0.01735046
#>               conf.high   miss        term
#> (Intercept)  2.75736637 22.7 % (Intercept)
#> migrant      0.75579526 13.4 %     migrant
#> misei       -0.01072654 28.2 %       misei

最后,一旦定义了这些方法,modelsummary 包应该会立即运行:

modelsummary(mod_pooled)
Model 1
(Intercept) 2.571
(0.089)
migrant 0.571
(0.086)
misei -0.014
(0.002)
Num.Imp. 6