Переформатировать результаты объединенных результатов вменения для регрессии в R

Я использую множественное вменение отсутствующих данных, а затем использую функцию 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 ) )

Вот выходная таблица, которую я получаю. введите здесь описание изображения

Но есть ли способ использовать звездочет или какую-либо другую функцию/пакет, где я могу переформатировать свои результаты, чтобы p-значения были округлены, а сбоку были звездочки для обозначения значимости? На рисунке ниже показано, как я хочу, чтобы результат выглядел. Я знаю, что регрессия на этом изображении - это совершенно другая функция/переменные/данные, но я включаю ее, чтобы прояснить, как я хотел бы, чтобы вывод для p-значений отображался. Благодарю вас!

введите здесь описание изображения


person juliah0494    schedule 22.04.2021    source источник


Ответы (1)


Я не знаю, как этого добиться в stargazer, но это очень легко сделать с помощью пакета modelsummary для R< /a> (отказ от ответственности: я автор).

modelsummary поддерживает более 100 моделей из коробки, но не объекты модели класса pool_mi, которые создает ваш код. К счастью, добавить поддержку новых моделей очень легко, как подробно описано в документации.

В частности, нам нужно определить два метода S3 с именами tidy.CLASSNAME и glance.CLASSNAME. Первый метод возвращает data.frame с одним коэффициентом на строку и с именами столбцов, которые следуют стандартной терминологии из пакета broom. Второй метод возвращает однострочный 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
person Vincent    schedule 25.04.2021
comment
Хорошо, я попробую! Спасибо, Винсент. - person juliah0494; 26.04.2021