2017-02-10 16 views
1

私はstargazerを使用して私のplmサマリーテーブルを作成しています。R Stargazer with pglm model - plmモデルのbinominal pglmモデルに変換

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

残念ながら、stargazerはpglmモデルをサポートしていません。私はpglmモデルでバイナリ従属変数を使用して結果をプロットする方法を探しています。次のスタルマジャーコールはpglmモデルでは機能しません。

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

代わりに、各要約項目を抽出して、それをそれぞれフォーマットするのではなく、 結果のクラスである:

[1] "maxLik" "格言" "リスト"

+0

私は、「スターゲイザー」を使ってモデルを「プロット」しようとする試みに驚きました。モデルの要約だけをフォーマットしたと思った。あなたが望む「プロット」の種類について詳しく説明できますか? –

+0

こんにちは42、混乱のために申し訳ありません。私はちょうど良い見栄えの出力テーブルを作成するつもりだった。 – Nils

+0

'pglm'は' stargazer'によってサポートされておらず、 'stargazer'は拡張できませんので、[' texreg'](https://cran.r-project.org/web/packages/texreg/vignettes/)をチェックしてください。 texreg.pdf)は、パッケージに含まれていないモデル用に拡張可能です。 – paqmo

答えて

1

ここpglmでtexregの仕事をするために、単純な抽出機能です:

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

このコードが動作するためには、あなたは、 extractが呼び出されたときにデフォルトでpglm maxLikオブジェクトを処理するように関数を登録する必要があります。

その後、plsmやtexregでサポートされている他のモデルと同じように、texregをpglmで使用できます。

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を使用データ上のフレーム

library(xtable) 
xtable(model_summary) 
1

もう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