Tableau stargazer pour modèle de comptage

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Theo denis
Messages : 2
Enregistré le : 10 Sep 2020, 12:50

Tableau stargazer pour modèle de comptage

Messagepar Theo denis » 11 Sep 2020, 08:20

Bonjour à toutes et à tous,

Je souhaiterais obtenir un tableau de résultat d'un modèle hurdle (ou ZIP, ZINB) avec stargazer qui comprend le modèle count et le modèle inflation de zéro. Stargazer permet d'obtenir ces tableaux séparément avec l'option zero.component. Si zero.component = F on a les résultats du modèle de comptage, si zero.component = T on a les résultats du modèle inflation de zéro.
Mon problème est que je voudrais obtenir ces deux tableaux dans un seul avec deux colonnes, une pour le count et l'autre pour l'inflation de zéro.

Voici un code très court qui permettra de comprendre ma problématique:

Code : Tout sélectionner

A = data.frame(Ind = seq(1,50,1),
               Dep = c(rep(0,30),round(abs(rnorm(20,6,4)),0)),
               Var1 = c(rep(c("Oui","Oui","Non"),10),rep(c("Non","Oui","NSP","Non"),5)))

Model_H = hurdle(Dep~Var1, data = A, dist = "negbin")
summary(Model_H)
stargazer(Model_H, type = "text", zero.component = F)
stargazer(Model_H, type = "text", zero.component = T)


Merci beaucoup pour votre aide,

Théo

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: Tableau stargazer pour modèle de comptage

Messagepar Mickael Canouil » 14 Sep 2020, 08:10

Bonjour,

Code : Tout sélectionner

= data.frame(
  Ind = seq(1,50,1),
  Dep = c(rep(0,30),round(abs(rnorm(20,6,4)),0)),
  Var1 = c(rep(c("Oui","Oui","Non"),10),rep(c("Non","Oui","NSP","Non"),5))
 )
Model_H = hurdle(Dep~Var1, data = A, dist = "negbin")
#> Error in hurdle(Dep ~ Var1, data = A, dist = "negbin") : 
#>   could not find function "hurdle"
summary(Model_H)
#> Error in summary(Model_H) : object 'Model_H' not found
stargazer(Model_H, type = "text", zero.component = F)
#> Error in stargazer(Model_H, type = "text", zero.component = F) : 
#>   could not find function "stargazer"
stargazer(Model_H, type = "text", zero.component = T)
#> Error in stargazer(Model_H, type = "text", zero.component = T) : 
#>   could not find function "stargazer"   

un peu de lecture pour nous aider à vous aider :

Vous pouvez regarder les extensions broom, broom.mixed, modelsummary par exemple.
Ou tout simplement, combiner les résultats avec des cbind, rbind et toutes les autres fonctions de gestions des data.frames/matrices.

Cordialement,
Mickaël
mickael.canouil.fr | rlille.fr

Theo denis
Messages : 2
Enregistré le : 10 Sep 2020, 12:50

Re: Tableau stargazer pour modèle de comptage

Messagepar Theo denis » 14 Sep 2020, 10:15

Bonjour Mickael,

Merci beaucoup pour votre réponse. Malheureusement, les extensions broom, broom.mixed et modelsummary, ainsi que xtable ne supportent pas les modèles zeroinf et hurdle.

Désolé pour le code qui ne fonctionne pas. Avec les packages cela devrait être mieux!

Code : Tout sélectionner

install.packages(c("pscl","stargazer"))
library(pscl)
library(stargazer)

A = data.frame(Ind = seq(1,50,1),
               Dep = c(rep(0,30),round(abs(rnorm(20,6,4)),0)),
               Var1 = c(rep(c("Oui","Oui","Non"),10),rep(c("Non","Oui","NSP","Non"),5)))

Model_H = hurdle(Dep~Var1, data = A, dist = "negbin")
summary(Model_H)
stargazer(Model_H, type = "text", zero.component = F)
stargazer(Model_H, type = "text", zero.component = T)
cbind(stargazer(Model_H, type = "text", zero.component = F),
      stargazer(Model_H, type = "text", zero.component = T))

La commande cbind ne permet pas d'obtenir deux colonnes dans un même tableau mais "colle" les deux sorties stargazer.
L'objectif est d'obtenir un code latex comme celui-ci (les deux colonnes provenant du même modèle):

Code : Tout sélectionner

\documentclass[11pt]{article}
\begin{document}
\begin{table}[!htbp] \centering
\caption{}
\label{}
\begin{tabular}{@{\extracolsep{5pt}}lcc}
\\[-1.8ex]\hline
\hline \\[-1.8ex]
& \multicolumn{2}{c}{\textit{Dependent variable:}} \\
\cline{2-3}
\\[-1.8ex] & \multicolumn{2}{c}{Dep} \\
\\[-1.8ex] & count & zero-inflated \\
\hline \\[-1.8ex]
Var1NSP & 0.275 & 1.587 \\
& (0.339) & (1.205) \\
&  &\\
Var1Oui & $-$0.110 & $-$1.186$^{*}$ \\
& (0.334) & (0.449) \\
& & \\
Constant & 1.917$^{***}$ & $-$0.201 \\
& (0.196) & (0.449) \\
& & \\
\hline \\[-1.8ex]
Observations & 50 & 50 \\
Log Likelihood & $-$77.737 & $-$77.737 \\
\hline
\hline \\[-1.8ex]
\textit{Note:}  & \multicolumn{2}{r}{$^{*}$p$<$0.1; $^{**}$p$<$0.05; $^{***}$p$<$0.01} \\
\end{tabular}
\end{table}
\end{document}


Cordialement,
Théo

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: Tableau stargazer pour modèle de comptage

Messagepar Mickael Canouil » 14 Sep 2020, 10:23

Je ne suggérais pas d'utiliser cbind exactement de cette façon.
N'ayant pas stargazer, je ne peux pas proposer un code pour formater.

Code : Tout sélectionner

dput(stargazer(Model_H, type = "text", zero.component = F))


Un exemple plus simple pour combiner les coefficients de deux modèles :

Code : Tout sélectionner

ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14)
trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69)
group <- gl(2, 10, 20, labels = c("Ctl","Trt"))
weight <- c(ctl, trt)

lm.D9 <- lm(weight ~ group)
lm.D90 <- lm(weight ~ group - 1)

rbind(
  c(model = "lm.D9", coefficients(lm.D9)),
  c(model = "lm.D90", coefficients(lm.D90))
)
#>      model    (Intercept) groupTrt
#> [1,] "lm.D9"  "5.032"     "-0.371"
#> [2,] "lm.D90" "5.032"     "4.661"    

Il suffit donc de manipuler/formater vos deux objets stargazer de la "même" façon.

Ceci étant dit, stargazer est une extension d'affichage, si celui-ci ne convient pas, plutôt qu'essayer de transformer stargazer, il vaudrait mieux directement manipuler le résultat de hurdle().

EDIT :

Code : Tout sélectionner

library(pscl)
<- data.frame(
  Ind = seq(1, 50, 1),
  Dep = c(rep(0, 30), round(abs(rnorm(20, 6, 4)), 0)),
  Var1 = c(rep(c("Oui", "Oui", "Non"), 10), rep(c("Non", "Oui", "NSP", "Non"), 5))
)
Model_H <- hurdle(Dep ~ Var1, data = A, dist = "negbin")


Code : Tout sélectionner

model_coef <- coefficients(summary(Model_H))
do.
call("rbind", mapply(
  FUN = function(x, y) {
    out <- data.frame(x, check.names = FALSE)
    out[["term"]] <- rownames(x)
    out[["component"]] <- y
    out
[, c("component", "term", colnames(x))]
  }, 
  x 
= model_coef, 
  y 
= names(model_coef),
  SIMPLIFY = FALSE
))
#>                   component        term      Estimate   Std. Error       z value     Pr(>|z|)
#> count.(Intercept)     count (Intercept)  2.156663e+00    0.1792810  1.202951e+01 2.486295e-33
#> count.Var1NSP         count     Var1NSP -2.853151e-01    0.3242537 -8.799131e-01 3.789064e-01
#> count.Var1Oui         count     Var1Oui -3.588949e-02    0.3117618 -1.151183e-01 9.083514e-01
#> count.Log(theta)      count  Log(theta)  1.607403e+00    0.6206573  2.589840e+00 9.602062e-03
#> zero.(Intercept)       zero (Intercept)  2.350463e-08    0.4472136  5.255794e-08 1.000000e+00
#> zero.Var1NSP           zero     Var1NSP  1.756607e+01 2917.0125208  6.021938e-03 9.951952e-01
#> zero.Var1Oui           zero     Var1Oui -1.386294e+00    0.6708204 -2.066566e+00 3.877511e-02  


Cordialement,
Mickaël
mickael.canouil.fr | rlille.fr


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité

cron