2017-02-10 13 views
1

Я использую stargazer для создания сводных таблиц.R Stargazer с моделью pglm - конвертировать биномиальную модель pglm в модель plm

library(plm) 
library(pglm) 
data("Unions", package = "pglm") 
anb1 <- plm(wage ~ union + exper + rural, Unions, model = "random", method = "bfgs") 
stargazer(anb1) 

К сожалению, stargazer не поддерживает модели pglm. Я ищу решение о том, как построить результаты модели pglm с переменной, зависящей от двоичного кода, поскольку следующий вызов stargazer не работает с моделями pglm.

anb2 <- pglm(union ~ wage + exper + rural, Unions, family = "binomial", 
      model = "random", method = "bfgs") 
stargazer(anb2) 

Любая альтернатива просто извлекать каждый итоговый элемент, а не форматировать его соответственно? Класса исхода является:

[1] "maxLik" "максим" "список"

+0

Я был удивлен, увидев попытки «запечатлеть» модель, используя «stargazer». Я думал, что это только форматированные резюме моделей. Можете ли вы рассказать о том, какого рода «сюжет» вам нравится? –

+0

Привет, 42, извините за путаницу. Я просто хотел создать красивые таблицы вывода. – Nils

+0

Поскольку 'pglm' не поддерживается' stargazer', а 'stargazer' не расширяется, проверьте [' texreg'] (https://cran.r-project.org/web/packages/texreg/vignettes/ texreg.pdf), который является расширяемым для моделей, не включенных в пакет. – paqmo

ответ

1

Вот простая функция экстракт сделать texreg работу с pglm:

extract.pglm <- function (model, include.nobs = TRUE, include.loglik = TRUE, ...) { 
    s <- summary(model, ...) 
    coefficient.names <- rownames(s$estimate) 
    coefficients <- s$estimate[, 1] 
    standard.errors <- s$estimate[, 2] 
    significance <- s$estimate[, 4] 
    loglik.value <- s$loglik 
    n <- nrow(model$model) 
    gof <- numeric() 
    gof.names <- character() 
    gof.decimal <- logical() 
    if (include.loglik == TRUE) { 
     gof <- c(gof, loglik.value) 
     gof.names <- c(gof.names, "Log-Likelihood") 
     gof.decimal <- c(gof.decimal, TRUE) 
    } 
    if (include.nobs == TRUE) { 
     gof <- c(gof, n) 
     gof.names <- c(gof.names, "Num. obs.") 
     gof.decimal <- c(gof.decimal, FALSE) 
    } 
    tr <- createTexreg(coef.names = coefficient.names, coef = coefficients, 
       se = standard.errors, pvalues = significance, gof.names = gof.names, 
       gof = gof, gof.decimal = gof.decimal) 
    return(tr) 
} 

для того, чтобы этот код, чтобы работать, вы должен также зарегистрировать функцию так, чтобы она обрабатывала объекты pglm maxLik по умолчанию, когда вызывается extract:

setMethod("extract", signature = className("maxLik", "maxLik"), 
     definition = extract.pglm) 

После этого вы можете использовать texreg с pglm точно так же, как с PLM или другими моделями, поддерживаемыми texreg.

1

Одним из возможных решений является сделать следующее.

anb2 <- pglm(union ~ wage + exper + rural, Unions, family = "binomial", 
     model = "random", method = "bfgs") 
model = summary(anb2) 

нагрузки или установить следующие библиотеки

library(dplyr) 
library(xtable) 
library('gtools') 

Создать вектор с именем со-переменными

var = c('Intercept', 'wage', 'exper', 'ruralyes', 'sigma') 

Затем сделайте

model_summary = model$estimate %>% as.data.frame() %>% 
mutate(term = var, Estimate = round(Estimate, 2), SE = round(`Std. error`, 2), p.value = stars.pval(`Pr(> t)`)) %>% 
select(term, Estimate, SE, p.value) 

> model_summary 
     term Estimate SE p.value 
1 Intercept -2.86 0.23  *** 
2  wage  0.12 0.02  *** 
3  exper -0.06 0.02  * 
4 ruralyes  0.09 0.25   
5  sigma  4.30 0.23  *** 

Тогда вы можете используйте xtable на данных.frame

library(xtable) 
xtable(model_summary) 
1

Другое решение (но не вполне удовлетворительное).

library(plm) 
library(pglm) 
library(stargazer) 
data("Unions", package = "pglm") 

anb2 <- pglm(union ~ wage + exper + rural, Unions, family = "binomial", 
      model = "random", method = "bfgs") 

# A "fake" model 
anb0 <- plm(union ~ wage + exper + rural, Unions, family = "binomial", 
      model = "random", method = "bfgs") 

tstats <- summary(anb2)$estimate[,3][-5] 
pvs <- summary(anb2)$estimate[,4][-5] 
SEs <- summary(anb2)$estimate[,2][-5] 
coefs <- summary(anb2)$estimate[,1][-5] 

stargazer(anb0, type="text", coef=list(coefs), se=list(SEs), 
p = list(pvs), omit.stat="all") 

Вот таблица генерируется stargazer:

==================================== 
      Dependent variable:  
     --------------------------- 
        union   
------------------------------------ 
wage    0.122***   
        (0.024)   

exper    -0.058**   
        (0.023)   

ruralyes   0.092   
        (0.249)   

Constant   -2.857***   
        (0.235)   

==================================== 
==================================== 
Note: *p<0.1; **p<0.05; ***p<0.01 

 Смежные вопросы

  • Нет связанных вопросов^_^