【问题标题】:Reformat results of pooled imputation results for regression in R重新格式化 R 中回归的汇总插补结果的结果
【发布时间】:2021-04-22 17:15:59
【问题描述】:

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

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 ) )

这是我得到的输出表。

但是有没有一种方法可以使用 stargazer 或其他一些函数/包,我可以重新格式化我的结果,以便 p 值是四舍五入的,并且旁边有星号来表示重要性?下图展示了我希望输出的更多外观。我知道此图像中的回归是完全不同的函数/变量/数据,但我将其包括在内是为了清楚地说明我希望 p 值的输出如何出现。谢谢!

【问题讨论】:

    标签: r output regression imputation r-mice


    【解决方案1】:

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

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

    具体来说,我们需要定义两个 S3 方法,分别称为 tidy.CLASSNAMEglance.CLASSNAME。第一种方法返回一个 data.frame,每行有一个系数,列名跟在standard terminology from the broom package 后面。第二种方法返回一个具有拟合优度或其他模型特征的单行 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

    【讨论】:

    • 好的,我会试一试!谢谢文森特。
    猜你喜欢
    • 2017-09-01
    • 2021-09-11
    • 2015-10-16
    • 1970-01-01
    • 2018-10-02
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 2017-07-05
    相关资源
    最近更新 更多