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.CLASSNAME
和 glance.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
我对缺失数据使用多重插补,然后使用 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.CLASSNAME
和 glance.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 |