class: center, middle, inverse, title-slide .title[ # 18: Preparing Regression Tables. ] .subtitle[ ## Linear Models ] .author[ ###
Jaye Seawright
] .institute[ ###
Northwestern Political Science
] .date[ ### March 9, 2026 ] --- class: center, middle <style type="text/css"> pre { max-height: 400px; overflow-y: auto; } pre[class] { max-height: 200px; } </style> # Why Professional Tables Matter ### **Communication Goals** 1. **Clarity:** Readers should understand your findings 2. **Reproducibility:** Others should be able to replicate 3. **Efficiency:** One table can convey what paragraphs cannot --- ### **Political Science Standards** - **Top journals** (APSR, AJPS, JOP) have specific formatting - **Replication archives** require clean code - **Policy audiences** need accessible presentation - **Your own workflow** benefits from organization --- ### **Common Problems in Student Work** ``` r # What NOT to do > summary(model) Call: lm(formula = y ~ x1 + x2) Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 1.23456 0.09876 12.345 < 2e-16 *** x1 0.56789 0.12345 4.567 5.67e-06 *** x2 -0.34567 0.23456 -1.234 0.218 R-squared: 0.3456 Adj R-squared: 0.3345 ``` --- # The R Ecosystem for Tables ### **Main Packages** 1. **`modelsummary`** - Modern, flexible, actively maintained - Works with many model types - Excellent documentation 2. **`stargazer`** (legacy but still used) - Long history in political science - Simple syntax - Some limitations with new models --- 3\. **`gtsummary`** (medical/social science focus) - Beautiful default formatting - Great for clinical/epidemiological papers - Less common in political science 4\. **`kableExtra`** (manual control) - Complete customization - Steeper learning curve - For when others fail --- ### **Choosing the Right Tool** <table class="table" style="width: auto !important; margin-left: auto; margin-right: auto;"> <caption>Which Tool When?</caption> <thead> <tr> <th style="text-align:left;"> Use_Case </th> <th style="text-align:left;"> Primary_Tool </th> <th style="text-align:left;"> Key_Feature </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> General political science </td> <td style="text-align:left;"> modelsummary </td> <td style="text-align:left;"> Flexibility </td> </tr> <tr> <td style="text-align:left;"> Quick tables for drafts </td> <td style="text-align:left;"> stargazer </td> <td style="text-align:left;"> Simplicity </td> </tr> <tr> <td style="text-align:left;"> Medical/clinical style </td> <td style="text-align:left;"> gtsummary </td> <td style="text-align:left;"> Pretty defaults </td> </tr> <tr> <td style="text-align:left;"> Complete customization </td> <td style="text-align:left;"> kableExtra </td> <td style="text-align:left;"> Total control </td> </tr> <tr> <td style="text-align:left;"> Teaching/learning </td> <td style="text-align:left;"> any </td> <td style="text-align:left;"> Clarity </td> </tr> </tbody> </table> --- ### **Our Focus Today:** **`modelsummary`** - the modern standard --- # Package 1: `modelsummary` ### **Key Advantages** 1. **Inclusive:** Works with 100+ model types 2. **Flexible output:** HTML, LaTeX, Word, PDF, Markdown 3. **Customizable:** Every aspect can be modified --- ### **Basic Syntax** ``` r library(modelsummary) # Single model model <- lm(y ~ x1 + x2, data = df) msummary(model) # Multiple models models <- list("Model 1" = mod1, "Model 2" = mod2) msummary(models) # With robust SEs msummary(models, vcov = "HC3") ``` --- ### **Worked Example** ``` r # Load data data("Mroz", package = "carData") Mroz$lfp <- 1*(Mroz$lfp=="yes") # Estimate models model1 <- lm(lfp ~ k5 + k618 + age + wc + hc, data = Mroz) model2 <- lm(lfp ~ k5 + k618 + age + wc + hc + lwg, data = Mroz) model3 <- lm(lfp ~ k5 + k618 + age + wc + hc + lwg + inc, data = Mroz) # Create table models <- list("(1)" = model1, "(2)" = model2, "(3)" = model3) we.ms <- msummary(models, stars = TRUE, gof_omit = "AIC|BIC|Log|Adj", output = "kableExtra") %>% kable_styling(font_size = 10) ``` --- <table style="NAborder-bottom: 0; width: auto !important; margin-left: auto; margin-right: auto; font-size: 10px; margin-left: auto; margin-right: auto;" class="table table"> <thead> <tr> <th style="text-align:left;"> </th> <th style="text-align:center;"> &nbsp;(1) </th> <th style="text-align:center;"> &nbsp;&nbsp;(2) </th> <th style="text-align:center;"> &nbsp;&nbsp;(3) </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> (Intercept) </td> <td style="text-align:center;"> 1.248*** </td> <td style="text-align:center;"> 1.115*** </td> <td style="text-align:center;"> 1.144*** </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> (0.125) </td> <td style="text-align:center;"> (0.128) </td> <td style="text-align:center;"> (0.127) </td> </tr> <tr> <td style="text-align:left;"> k5 </td> <td style="text-align:center;"> −0.309*** </td> <td style="text-align:center;"> −0.302*** </td> <td style="text-align:center;"> −0.295*** </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> (0.037) </td> <td style="text-align:center;"> (0.036) </td> <td style="text-align:center;"> (0.036) </td> </tr> <tr> <td style="text-align:left;"> k618 </td> <td style="text-align:center;"> −0.021 </td> <td style="text-align:center;"> −0.016 </td> <td style="text-align:center;"> −0.011 </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> (0.014) </td> <td style="text-align:center;"> (0.014) </td> <td style="text-align:center;"> (0.014) </td> </tr> <tr> <td style="text-align:left;"> age </td> <td style="text-align:center;"> −0.015*** </td> <td style="text-align:center;"> −0.014*** </td> <td style="text-align:center;"> −0.013*** </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> (0.003) </td> <td style="text-align:center;"> (0.003) </td> <td style="text-align:center;"> (0.003) </td> </tr> <tr> <td style="text-align:left;"> wcyes </td> <td style="text-align:center;"> 0.190*** </td> <td style="text-align:center;"> 0.145** </td> <td style="text-align:center;"> 0.164*** </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> (0.045) </td> <td style="text-align:center;"> (0.046) </td> <td style="text-align:center;"> (0.046) </td> </tr> <tr> <td style="text-align:left;"> hcyes </td> <td style="text-align:center;"> −0.027 </td> <td style="text-align:center;"> −0.031 </td> <td style="text-align:center;"> 0.019 </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> (0.042) </td> <td style="text-align:center;"> (0.041) </td> <td style="text-align:center;"> (0.043) </td> </tr> <tr> <td style="text-align:left;"> lwg </td> <td style="text-align:center;"> </td> <td style="text-align:center;"> 0.117*** </td> <td style="text-align:center;"> 0.123*** </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> </td> <td style="text-align:center;"> (0.031) </td> <td style="text-align:center;"> (0.030) </td> </tr> <tr> <td style="text-align:left;"> inc </td> <td style="text-align:center;"> </td> <td style="text-align:center;"> </td> <td style="text-align:center;"> −0.007*** </td> </tr> <tr> <td style="text-align:left;box-shadow: 0px 1.5px"> </td> <td style="text-align:center;box-shadow: 0px 1.5px"> </td> <td style="text-align:center;box-shadow: 0px 1.5px"> </td> <td style="text-align:center;box-shadow: 0px 1.5px"> (0.002) </td> </tr> <tr> <td style="text-align:left;"> Num.Obs. </td> <td style="text-align:center;"> 753 </td> <td style="text-align:center;"> 753 </td> <td style="text-align:center;"> 753 </td> </tr> <tr> <td style="text-align:left;"> R2 </td> <td style="text-align:center;"> 0.112 </td> <td style="text-align:center;"> 0.129 </td> <td style="text-align:center;"> 0.150 </td> </tr> <tr> <td style="text-align:left;"> F </td> <td style="text-align:center;"> 18.836 </td> <td style="text-align:center;"> 18.444 </td> <td style="text-align:center;"> 18.827 </td> </tr> <tr> <td style="text-align:left;"> RMSE </td> <td style="text-align:center;"> 0.47 </td> <td style="text-align:center;"> 0.46 </td> <td style="text-align:center;"> 0.46 </td> </tr> </tbody> <tfoot><tr><td style="padding: 0; " colspan="100%"> <sup></sup> + p < 0.1, * p < 0.05, ** p < 0.01, *** p < 0.001</td></tr></tfoot> </table> --- # Customizing `modelsummary` Output ### **1. Variable Labels** ``` r cm <- c('k5' = 'Children < 6', 'k618' = 'Children 6-18', 'age' = 'Age', 'wc' = 'Wife college', 'hc' = 'Husband college', 'lwg' = 'Log wage rate', 'inc' = 'Family income') vl.ms <- msummary(models, coef_map = cm, stars = TRUE, output = "kableExtra") %>% kable_styling(font_size = 10) ``` --- <table style="NAborder-bottom: 0; width: auto !important; margin-left: auto; margin-right: auto; font-size: 10px; margin-left: auto; margin-right: auto;" class="table table"> <thead> <tr> <th style="text-align:left;"> </th> <th style="text-align:center;"> &nbsp;(1) </th> <th style="text-align:center;"> &nbsp;&nbsp;(2) </th> <th style="text-align:center;"> &nbsp;&nbsp;(3) </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> Children &lt; 6 </td> <td style="text-align:center;"> −0.309*** </td> <td style="text-align:center;"> −0.302*** </td> <td style="text-align:center;"> −0.295*** </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> (0.037) </td> <td style="text-align:center;"> (0.036) </td> <td style="text-align:center;"> (0.036) </td> </tr> <tr> <td style="text-align:left;"> Children 6-18 </td> <td style="text-align:center;"> −0.021 </td> <td style="text-align:center;"> −0.016 </td> <td style="text-align:center;"> −0.011 </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> (0.014) </td> <td style="text-align:center;"> (0.014) </td> <td style="text-align:center;"> (0.014) </td> </tr> <tr> <td style="text-align:left;"> Age </td> <td style="text-align:center;"> −0.015*** </td> <td style="text-align:center;"> −0.014*** </td> <td style="text-align:center;"> −0.013*** </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> (0.003) </td> <td style="text-align:center;"> (0.003) </td> <td style="text-align:center;"> (0.003) </td> </tr> <tr> <td style="text-align:left;"> Log wage rate </td> <td style="text-align:center;"> </td> <td style="text-align:center;"> 0.117*** </td> <td style="text-align:center;"> 0.123*** </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> </td> <td style="text-align:center;"> (0.031) </td> <td style="text-align:center;"> (0.030) </td> </tr> <tr> <td style="text-align:left;"> Family income </td> <td style="text-align:center;"> </td> <td style="text-align:center;"> </td> <td style="text-align:center;"> −0.007*** </td> </tr> <tr> <td style="text-align:left;box-shadow: 0px 1.5px"> </td> <td style="text-align:center;box-shadow: 0px 1.5px"> </td> <td style="text-align:center;box-shadow: 0px 1.5px"> </td> <td style="text-align:center;box-shadow: 0px 1.5px"> (0.002) </td> </tr> <tr> <td style="text-align:left;"> Num.Obs. </td> <td style="text-align:center;"> 753 </td> <td style="text-align:center;"> 753 </td> <td style="text-align:center;"> 753 </td> </tr> <tr> <td style="text-align:left;"> R2 </td> <td style="text-align:center;"> 0.112 </td> <td style="text-align:center;"> 0.129 </td> <td style="text-align:center;"> 0.150 </td> </tr> <tr> <td style="text-align:left;"> R2 Adj. </td> <td style="text-align:center;"> 0.106 </td> <td style="text-align:center;"> 0.122 </td> <td style="text-align:center;"> 0.142 </td> </tr> <tr> <td style="text-align:left;"> AIC </td> <td style="text-align:center;"> 1003.4 </td> <td style="text-align:center;"> 990.7 </td> <td style="text-align:center;"> 974.2 </td> </tr> <tr> <td style="text-align:left;"> BIC </td> <td style="text-align:center;"> 1035.8 </td> <td style="text-align:center;"> 1027.7 </td> <td style="text-align:center;"> 1015.8 </td> </tr> <tr> <td style="text-align:left;"> Log.Lik. </td> <td style="text-align:center;"> −494.704 </td> <td style="text-align:center;"> −487.332 </td> <td style="text-align:center;"> −478.086 </td> </tr> <tr> <td style="text-align:left;"> F </td> <td style="text-align:center;"> 18.836 </td> <td style="text-align:center;"> 18.444 </td> <td style="text-align:center;"> 18.827 </td> </tr> <tr> <td style="text-align:left;"> RMSE </td> <td style="text-align:center;"> 0.47 </td> <td style="text-align:center;"> 0.46 </td> <td style="text-align:center;"> 0.46 </td> </tr> </tbody> <tfoot><tr><td style="padding: 0; " colspan="100%"> <sup></sup> + p < 0.1, * p < 0.05, ** p < 0.01, *** p < 0.001</td></tr></tfoot> </table> --- ### **2. Statistics Selection** ``` r ss.ms <- msummary(models, gof_omit = 'AIC|BIC|Log|RMSE', gof_map = list( list("raw" = "nobs", "clean" = "N", "fmt" = 0), list("raw" = "r.squared", "clean" = "R²", "fmt" = 3) ), output = "kableExtra") %>% kable_styling(font_size = 10) ``` --- <table class="table table" style="width: auto !important; margin-left: auto; margin-right: auto; font-size: 10px; margin-left: auto; margin-right: auto;"> <thead> <tr> <th style="text-align:left;"> </th> <th style="text-align:center;"> &nbsp;(1) </th> <th style="text-align:center;"> &nbsp;&nbsp;(2) </th> <th style="text-align:center;"> &nbsp;&nbsp;(3) </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> (Intercept) </td> <td style="text-align:center;"> 1.248 </td> <td style="text-align:center;"> 1.115 </td> <td style="text-align:center;"> 1.144 </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> (0.125) </td> <td style="text-align:center;"> (0.128) </td> <td style="text-align:center;"> (0.127) </td> </tr> <tr> <td style="text-align:left;"> k5 </td> <td style="text-align:center;"> −0.309 </td> <td style="text-align:center;"> −0.302 </td> <td style="text-align:center;"> −0.295 </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> (0.037) </td> <td style="text-align:center;"> (0.036) </td> <td style="text-align:center;"> (0.036) </td> </tr> <tr> <td style="text-align:left;"> k618 </td> <td style="text-align:center;"> −0.021 </td> <td style="text-align:center;"> −0.016 </td> <td style="text-align:center;"> −0.011 </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> (0.014) </td> <td style="text-align:center;"> (0.014) </td> <td style="text-align:center;"> (0.014) </td> </tr> <tr> <td style="text-align:left;"> age </td> <td style="text-align:center;"> −0.015 </td> <td style="text-align:center;"> −0.014 </td> <td style="text-align:center;"> −0.013 </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> (0.003) </td> <td style="text-align:center;"> (0.003) </td> <td style="text-align:center;"> (0.003) </td> </tr> <tr> <td style="text-align:left;"> wcyes </td> <td style="text-align:center;"> 0.190 </td> <td style="text-align:center;"> 0.145 </td> <td style="text-align:center;"> 0.164 </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> (0.045) </td> <td style="text-align:center;"> (0.046) </td> <td style="text-align:center;"> (0.046) </td> </tr> <tr> <td style="text-align:left;"> hcyes </td> <td style="text-align:center;"> −0.027 </td> <td style="text-align:center;"> −0.031 </td> <td style="text-align:center;"> 0.019 </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> (0.042) </td> <td style="text-align:center;"> (0.041) </td> <td style="text-align:center;"> (0.043) </td> </tr> <tr> <td style="text-align:left;"> lwg </td> <td style="text-align:center;"> </td> <td style="text-align:center;"> 0.117 </td> <td style="text-align:center;"> 0.123 </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> </td> <td style="text-align:center;"> (0.031) </td> <td style="text-align:center;"> (0.030) </td> </tr> <tr> <td style="text-align:left;"> inc </td> <td style="text-align:center;"> </td> <td style="text-align:center;"> </td> <td style="text-align:center;"> −0.007 </td> </tr> <tr> <td style="text-align:left;box-shadow: 0px 1.5px"> </td> <td style="text-align:center;box-shadow: 0px 1.5px"> </td> <td style="text-align:center;box-shadow: 0px 1.5px"> </td> <td style="text-align:center;box-shadow: 0px 1.5px"> (0.002) </td> </tr> <tr> <td style="text-align:left;"> N </td> <td style="text-align:center;"> 753 </td> <td style="text-align:center;"> 753 </td> <td style="text-align:center;"> 753 </td> </tr> <tr> <td style="text-align:left;"> R² </td> <td style="text-align:center;"> 0.112 </td> <td style="text-align:center;"> 0.129 </td> <td style="text-align:center;"> 0.150 </td> </tr> </tbody> </table> --- ### **3. Standard Errors** ``` r # Robust SEs se.ms <- msummary(models, vcov = "HC3", output = "kableExtra") %>% kable_styling(font_size = 10) ``` --- <table class="table table" style="width: auto !important; margin-left: auto; margin-right: auto; font-size: 10px; margin-left: auto; margin-right: auto;"> <thead> <tr> <th style="text-align:left;"> </th> <th style="text-align:center;"> &nbsp;(1) </th> <th style="text-align:center;"> &nbsp;&nbsp;(2) </th> <th style="text-align:center;"> &nbsp;&nbsp;(3) </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> (Intercept) </td> <td style="text-align:center;"> 1.248 </td> <td style="text-align:center;"> 1.115 </td> <td style="text-align:center;"> 1.144 </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> (0.118) </td> <td style="text-align:center;"> (0.125) </td> <td style="text-align:center;"> (0.125) </td> </tr> <tr> <td style="text-align:left;"> k5 </td> <td style="text-align:center;"> −0.309 </td> <td style="text-align:center;"> −0.302 </td> <td style="text-align:center;"> −0.295 </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> (0.033) </td> <td style="text-align:center;"> (0.033) </td> <td style="text-align:center;"> (0.034) </td> </tr> <tr> <td style="text-align:left;"> k618 </td> <td style="text-align:center;"> −0.021 </td> <td style="text-align:center;"> −0.016 </td> <td style="text-align:center;"> −0.011 </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> (0.015) </td> <td style="text-align:center;"> (0.014) </td> <td style="text-align:center;"> (0.015) </td> </tr> <tr> <td style="text-align:left;"> age </td> <td style="text-align:center;"> −0.015 </td> <td style="text-align:center;"> −0.014 </td> <td style="text-align:center;"> −0.013 </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> (0.002) </td> <td style="text-align:center;"> (0.002) </td> <td style="text-align:center;"> (0.002) </td> </tr> <tr> <td style="text-align:left;"> wcyes </td> <td style="text-align:center;"> 0.190 </td> <td style="text-align:center;"> 0.145 </td> <td style="text-align:center;"> 0.164 </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> (0.043) </td> <td style="text-align:center;"> (0.047) </td> <td style="text-align:center;"> (0.046) </td> </tr> <tr> <td style="text-align:left;"> hcyes </td> <td style="text-align:center;"> −0.027 </td> <td style="text-align:center;"> −0.031 </td> <td style="text-align:center;"> 0.019 </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> (0.042) </td> <td style="text-align:center;"> (0.042) </td> <td style="text-align:center;"> (0.043) </td> </tr> <tr> <td style="text-align:left;"> lwg </td> <td style="text-align:center;"> </td> <td style="text-align:center;"> 0.117 </td> <td style="text-align:center;"> 0.123 </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> </td> <td style="text-align:center;"> (0.034) </td> <td style="text-align:center;"> (0.033) </td> </tr> <tr> <td style="text-align:left;"> inc </td> <td style="text-align:center;"> </td> <td style="text-align:center;"> </td> <td style="text-align:center;"> −0.007 </td> </tr> <tr> <td style="text-align:left;box-shadow: 0px 1.5px"> </td> <td style="text-align:center;box-shadow: 0px 1.5px"> </td> <td style="text-align:center;box-shadow: 0px 1.5px"> </td> <td style="text-align:center;box-shadow: 0px 1.5px"> (0.002) </td> </tr> <tr> <td style="text-align:left;"> Num.Obs. </td> <td style="text-align:center;"> 753 </td> <td style="text-align:center;"> 753 </td> <td style="text-align:center;"> 753 </td> </tr> <tr> <td style="text-align:left;"> R2 </td> <td style="text-align:center;"> 0.112 </td> <td style="text-align:center;"> 0.129 </td> <td style="text-align:center;"> 0.150 </td> </tr> <tr> <td style="text-align:left;"> R2 Adj. </td> <td style="text-align:center;"> 0.106 </td> <td style="text-align:center;"> 0.122 </td> <td style="text-align:center;"> 0.142 </td> </tr> <tr> <td style="text-align:left;"> AIC </td> <td style="text-align:center;"> 1003.4 </td> <td style="text-align:center;"> 990.7 </td> <td style="text-align:center;"> 974.2 </td> </tr> <tr> <td style="text-align:left;"> BIC </td> <td style="text-align:center;"> 1035.8 </td> <td style="text-align:center;"> 1027.7 </td> <td style="text-align:center;"> 1015.8 </td> </tr> <tr> <td style="text-align:left;"> Log.Lik. </td> <td style="text-align:center;"> −494.704 </td> <td style="text-align:center;"> −487.332 </td> <td style="text-align:center;"> −478.086 </td> </tr> <tr> <td style="text-align:left;"> F </td> <td style="text-align:center;"> 22.832 </td> <td style="text-align:center;"> 23.081 </td> <td style="text-align:center;"> 24.057 </td> </tr> <tr> <td style="text-align:left;"> RMSE </td> <td style="text-align:center;"> 0.47 </td> <td style="text-align:center;"> 0.46 </td> <td style="text-align:center;"> 0.46 </td> </tr> <tr> <td style="text-align:left;"> Std.Errors </td> <td style="text-align:center;"> HC3 </td> <td style="text-align:center;"> HC3 </td> <td style="text-align:center;"> HC3 </td> </tr> </tbody> </table> --- ### **4. Formatting** ``` r # Decimal places msummary(models, fmt = 2, output = "kableExtra") %>% kable_styling(font_size = 10) ``` <table class="table table" style="width: auto !important; margin-left: auto; margin-right: auto; font-size: 10px; margin-left: auto; margin-right: auto;"> <thead> <tr> <th style="text-align:left;"> </th> <th style="text-align:center;"> &nbsp;(1) </th> <th style="text-align:center;"> &nbsp;&nbsp;(2) </th> <th style="text-align:center;"> &nbsp;&nbsp;(3) </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> (Intercept) </td> <td style="text-align:center;"> 1.25 </td> <td style="text-align:center;"> 1.12 </td> <td style="text-align:center;"> 1.14 </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> (0.12) </td> <td style="text-align:center;"> (0.13) </td> <td style="text-align:center;"> (0.13) </td> </tr> <tr> <td style="text-align:left;"> k5 </td> <td style="text-align:center;"> −0.31 </td> <td style="text-align:center;"> −0.30 </td> <td style="text-align:center;"> −0.29 </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> (0.04) </td> <td style="text-align:center;"> (0.04) </td> <td style="text-align:center;"> (0.04) </td> </tr> <tr> <td style="text-align:left;"> k618 </td> <td style="text-align:center;"> −0.02 </td> <td style="text-align:center;"> −0.02 </td> <td style="text-align:center;"> −0.01 </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> (0.01) </td> <td style="text-align:center;"> (0.01) </td> <td style="text-align:center;"> (0.01) </td> </tr> <tr> <td style="text-align:left;"> age </td> <td style="text-align:center;"> −0.01 </td> <td style="text-align:center;"> −0.01 </td> <td style="text-align:center;"> −0.01 </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> (0.00) </td> <td style="text-align:center;"> (0.00) </td> <td style="text-align:center;"> (0.00) </td> </tr> <tr> <td style="text-align:left;"> wcyes </td> <td style="text-align:center;"> 0.19 </td> <td style="text-align:center;"> 0.14 </td> <td style="text-align:center;"> 0.16 </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> (0.05) </td> <td style="text-align:center;"> (0.05) </td> <td style="text-align:center;"> (0.05) </td> </tr> <tr> <td style="text-align:left;"> hcyes </td> <td style="text-align:center;"> −0.03 </td> <td style="text-align:center;"> −0.03 </td> <td style="text-align:center;"> 0.02 </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> (0.04) </td> <td style="text-align:center;"> (0.04) </td> <td style="text-align:center;"> (0.04) </td> </tr> <tr> <td style="text-align:left;"> lwg </td> <td style="text-align:center;"> </td> <td style="text-align:center;"> 0.12 </td> <td style="text-align:center;"> 0.12 </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> </td> <td style="text-align:center;"> (0.03) </td> <td style="text-align:center;"> (0.03) </td> </tr> <tr> <td style="text-align:left;"> inc </td> <td style="text-align:center;"> </td> <td style="text-align:center;"> </td> <td style="text-align:center;"> −0.01 </td> </tr> <tr> <td style="text-align:left;box-shadow: 0px 1.5px"> </td> <td style="text-align:center;box-shadow: 0px 1.5px"> </td> <td style="text-align:center;box-shadow: 0px 1.5px"> </td> <td style="text-align:center;box-shadow: 0px 1.5px"> (0.00) </td> </tr> <tr> <td style="text-align:left;"> Num.Obs. </td> <td style="text-align:center;"> 753 </td> <td style="text-align:center;"> 753 </td> <td style="text-align:center;"> 753 </td> </tr> <tr> <td style="text-align:left;"> R2 </td> <td style="text-align:center;"> 0.112 </td> <td style="text-align:center;"> 0.129 </td> <td style="text-align:center;"> 0.150 </td> </tr> <tr> <td style="text-align:left;"> R2 Adj. </td> <td style="text-align:center;"> 0.106 </td> <td style="text-align:center;"> 0.122 </td> <td style="text-align:center;"> 0.142 </td> </tr> <tr> <td style="text-align:left;"> AIC </td> <td style="text-align:center;"> 1003.4 </td> <td style="text-align:center;"> 990.7 </td> <td style="text-align:center;"> 974.2 </td> </tr> <tr> <td style="text-align:left;"> BIC </td> <td style="text-align:center;"> 1035.8 </td> <td style="text-align:center;"> 1027.7 </td> <td style="text-align:center;"> 1015.8 </td> </tr> <tr> <td style="text-align:left;"> Log.Lik. </td> <td style="text-align:center;"> −494.704 </td> <td style="text-align:center;"> −487.332 </td> <td style="text-align:center;"> −478.086 </td> </tr> <tr> <td style="text-align:left;"> F </td> <td style="text-align:center;"> 18.836 </td> <td style="text-align:center;"> 18.444 </td> <td style="text-align:center;"> 18.827 </td> </tr> <tr> <td style="text-align:left;"> RMSE </td> <td style="text-align:center;"> 0.47 </td> <td style="text-align:center;"> 0.46 </td> <td style="text-align:center;"> 0.46 </td> </tr> </tbody> </table> --- ``` r # Different formats for estimates and SEs msummary(models, fmt = fmt_statistic(estimate = 3, std.error = 2), output = "kableExtra") %>% kable_styling(font_size = 10) ``` <table class="table table" style="width: auto !important; margin-left: auto; margin-right: auto; font-size: 10px; margin-left: auto; margin-right: auto;"> <thead> <tr> <th style="text-align:left;"> </th> <th style="text-align:center;"> &nbsp;(1) </th> <th style="text-align:center;"> &nbsp;&nbsp;(2) </th> <th style="text-align:center;"> &nbsp;&nbsp;(3) </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> (Intercept) </td> <td style="text-align:center;"> 1.248 </td> <td style="text-align:center;"> 1.115 </td> <td style="text-align:center;"> 1.144 </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> (0.12) </td> <td style="text-align:center;"> (0.13) </td> <td style="text-align:center;"> (0.13) </td> </tr> <tr> <td style="text-align:left;"> k5 </td> <td style="text-align:center;"> −0.309 </td> <td style="text-align:center;"> −0.302 </td> <td style="text-align:center;"> −0.295 </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> (0.04) </td> <td style="text-align:center;"> (0.04) </td> <td style="text-align:center;"> (0.04) </td> </tr> <tr> <td style="text-align:left;"> k618 </td> <td style="text-align:center;"> −0.021 </td> <td style="text-align:center;"> −0.016 </td> <td style="text-align:center;"> −0.011 </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> (0.01) </td> <td style="text-align:center;"> (0.01) </td> <td style="text-align:center;"> (0.01) </td> </tr> <tr> <td style="text-align:left;"> age </td> <td style="text-align:center;"> −0.015 </td> <td style="text-align:center;"> −0.014 </td> <td style="text-align:center;"> −0.013 </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> (0.00) </td> <td style="text-align:center;"> (0.00) </td> <td style="text-align:center;"> (0.00) </td> </tr> <tr> <td style="text-align:left;"> wcyes </td> <td style="text-align:center;"> 0.190 </td> <td style="text-align:center;"> 0.145 </td> <td style="text-align:center;"> 0.164 </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> (0.05) </td> <td style="text-align:center;"> (0.05) </td> <td style="text-align:center;"> (0.05) </td> </tr> <tr> <td style="text-align:left;"> hcyes </td> <td style="text-align:center;"> −0.027 </td> <td style="text-align:center;"> −0.031 </td> <td style="text-align:center;"> 0.019 </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> (0.04) </td> <td style="text-align:center;"> (0.04) </td> <td style="text-align:center;"> (0.04) </td> </tr> <tr> <td style="text-align:left;"> lwg </td> <td style="text-align:center;"> </td> <td style="text-align:center;"> 0.117 </td> <td style="text-align:center;"> 0.123 </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> </td> <td style="text-align:center;"> (0.03) </td> <td style="text-align:center;"> (0.03) </td> </tr> <tr> <td style="text-align:left;"> inc </td> <td style="text-align:center;"> </td> <td style="text-align:center;"> </td> <td style="text-align:center;"> −0.007 </td> </tr> <tr> <td style="text-align:left;box-shadow: 0px 1.5px"> </td> <td style="text-align:center;box-shadow: 0px 1.5px"> </td> <td style="text-align:center;box-shadow: 0px 1.5px"> </td> <td style="text-align:center;box-shadow: 0px 1.5px"> (0.00) </td> </tr> <tr> <td style="text-align:left;"> Num.Obs. </td> <td style="text-align:center;"> 753 </td> <td style="text-align:center;"> 753 </td> <td style="text-align:center;"> 753 </td> </tr> <tr> <td style="text-align:left;"> R2 </td> <td style="text-align:center;"> 0.112 </td> <td style="text-align:center;"> 0.129 </td> <td style="text-align:center;"> 0.150 </td> </tr> <tr> <td style="text-align:left;"> R2 Adj. </td> <td style="text-align:center;"> 0.106 </td> <td style="text-align:center;"> 0.122 </td> <td style="text-align:center;"> 0.142 </td> </tr> <tr> <td style="text-align:left;"> AIC </td> <td style="text-align:center;"> 1003.4 </td> <td style="text-align:center;"> 990.7 </td> <td style="text-align:center;"> 974.2 </td> </tr> <tr> <td style="text-align:left;"> BIC </td> <td style="text-align:center;"> 1035.8 </td> <td style="text-align:center;"> 1027.7 </td> <td style="text-align:center;"> 1015.8 </td> </tr> <tr> <td style="text-align:left;"> Log.Lik. </td> <td style="text-align:center;"> −494.704 </td> <td style="text-align:center;"> −487.332 </td> <td style="text-align:center;"> −478.086 </td> </tr> <tr> <td style="text-align:left;"> F </td> <td style="text-align:center;"> 18.836 </td> <td style="text-align:center;"> 18.444 </td> <td style="text-align:center;"> 18.827 </td> </tr> <tr> <td style="text-align:left;"> RMSE </td> <td style="text-align:center;"> 0.47 </td> <td style="text-align:center;"> 0.46 </td> <td style="text-align:center;"> 0.46 </td> </tr> </tbody> </table> --- ``` r # Confidence intervals instead of SEs msummary(models, statistic = "conf.int", conf_level = 0.95, output = "kableExtra") %>% kable_styling(font_size = 10) ``` <table class="table table" style="width: auto !important; margin-left: auto; margin-right: auto; font-size: 10px; margin-left: auto; margin-right: auto;"> <thead> <tr> <th style="text-align:left;"> </th> <th style="text-align:center;"> &nbsp;(1) </th> <th style="text-align:center;"> &nbsp;&nbsp;(2) </th> <th style="text-align:center;"> &nbsp;&nbsp;(3) </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> (Intercept) </td> <td style="text-align:center;"> 1.248 </td> <td style="text-align:center;"> 1.115 </td> <td style="text-align:center;"> 1.144 </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> [1.003, 1.493] </td> <td style="text-align:center;"> [0.863, 1.367] </td> <td style="text-align:center;"> [0.894, 1.393] </td> </tr> <tr> <td style="text-align:left;"> k5 </td> <td style="text-align:center;"> −0.309 </td> <td style="text-align:center;"> −0.302 </td> <td style="text-align:center;"> −0.295 </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> [−0.381, −0.238] </td> <td style="text-align:center;"> [−0.373, −0.230] </td> <td style="text-align:center;"> [−0.365, −0.224] </td> </tr> <tr> <td style="text-align:left;"> k618 </td> <td style="text-align:center;"> −0.021 </td> <td style="text-align:center;"> −0.016 </td> <td style="text-align:center;"> −0.011 </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> [−0.049, 0.006] </td> <td style="text-align:center;"> [−0.044, 0.011] </td> <td style="text-align:center;"> [−0.039, 0.016] </td> </tr> <tr> <td style="text-align:left;"> age </td> <td style="text-align:center;"> −0.015 </td> <td style="text-align:center;"> −0.014 </td> <td style="text-align:center;"> −0.013 </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> [−0.020, −0.010] </td> <td style="text-align:center;"> [−0.019, −0.009] </td> <td style="text-align:center;"> [−0.018, −0.008] </td> </tr> <tr> <td style="text-align:left;"> wcyes </td> <td style="text-align:center;"> 0.190 </td> <td style="text-align:center;"> 0.145 </td> <td style="text-align:center;"> 0.164 </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> [0.101, 0.278] </td> <td style="text-align:center;"> [0.054, 0.235] </td> <td style="text-align:center;"> [0.074, 0.254] </td> </tr> <tr> <td style="text-align:left;"> hcyes </td> <td style="text-align:center;"> −0.027 </td> <td style="text-align:center;"> −0.031 </td> <td style="text-align:center;"> 0.019 </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> [−0.109, 0.055] </td> <td style="text-align:center;"> [−0.112, 0.050] </td> <td style="text-align:center;"> [−0.065, 0.102] </td> </tr> <tr> <td style="text-align:left;"> lwg </td> <td style="text-align:center;"> </td> <td style="text-align:center;"> 0.117 </td> <td style="text-align:center;"> 0.123 </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> </td> <td style="text-align:center;"> [0.057, 0.177] </td> <td style="text-align:center;"> [0.063, 0.182] </td> </tr> <tr> <td style="text-align:left;"> inc </td> <td style="text-align:center;"> </td> <td style="text-align:center;"> </td> <td style="text-align:center;"> −0.007 </td> </tr> <tr> <td style="text-align:left;box-shadow: 0px 1.5px"> </td> <td style="text-align:center;box-shadow: 0px 1.5px"> </td> <td style="text-align:center;box-shadow: 0px 1.5px"> </td> <td style="text-align:center;box-shadow: 0px 1.5px"> [−0.010, −0.004] </td> </tr> <tr> <td style="text-align:left;"> Num.Obs. </td> <td style="text-align:center;"> 753 </td> <td style="text-align:center;"> 753 </td> <td style="text-align:center;"> 753 </td> </tr> <tr> <td style="text-align:left;"> R2 </td> <td style="text-align:center;"> 0.112 </td> <td style="text-align:center;"> 0.129 </td> <td style="text-align:center;"> 0.150 </td> </tr> <tr> <td style="text-align:left;"> R2 Adj. </td> <td style="text-align:center;"> 0.106 </td> <td style="text-align:center;"> 0.122 </td> <td style="text-align:center;"> 0.142 </td> </tr> <tr> <td style="text-align:left;"> AIC </td> <td style="text-align:center;"> 1003.4 </td> <td style="text-align:center;"> 990.7 </td> <td style="text-align:center;"> 974.2 </td> </tr> <tr> <td style="text-align:left;"> BIC </td> <td style="text-align:center;"> 1035.8 </td> <td style="text-align:center;"> 1027.7 </td> <td style="text-align:center;"> 1015.8 </td> </tr> <tr> <td style="text-align:left;"> Log.Lik. </td> <td style="text-align:center;"> −494.704 </td> <td style="text-align:center;"> −487.332 </td> <td style="text-align:center;"> −478.086 </td> </tr> <tr> <td style="text-align:left;"> F </td> <td style="text-align:center;"> 18.836 </td> <td style="text-align:center;"> 18.444 </td> <td style="text-align:center;"> 18.827 </td> </tr> <tr> <td style="text-align:left;"> RMSE </td> <td style="text-align:center;"> 0.47 </td> <td style="text-align:center;"> 0.46 </td> <td style="text-align:center;"> 0.46 </td> </tr> </tbody> </table> --- ``` r # Add title and notes msummary(models, title = "Table 1: Labor Force Participation", notes = c("Data: Mroz (1987)", "Robust standard errors in parentheses", "*p<0.1, **p<0.05, ***p<0.01"), output = "kableExtra") %>% kable_styling(font_size = 10) ``` <table style="NAborder-bottom: 0; width: auto !important; margin-left: auto; margin-right: auto; font-size: 10px; margin-left: auto; margin-right: auto;" class="table table"> <caption style="font-size: initial !important;">Table 1: Labor Force Participation</caption> <thead> <tr> <th style="text-align:left;"> </th> <th style="text-align:center;"> &nbsp;(1) </th> <th style="text-align:center;"> &nbsp;&nbsp;(2) </th> <th style="text-align:center;"> &nbsp;&nbsp;(3) </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> (Intercept) </td> <td style="text-align:center;"> 1.248 </td> <td style="text-align:center;"> 1.115 </td> <td style="text-align:center;"> 1.144 </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> (0.125) </td> <td style="text-align:center;"> (0.128) </td> <td style="text-align:center;"> (0.127) </td> </tr> <tr> <td style="text-align:left;"> k5 </td> <td style="text-align:center;"> −0.309 </td> <td style="text-align:center;"> −0.302 </td> <td style="text-align:center;"> −0.295 </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> (0.037) </td> <td style="text-align:center;"> (0.036) </td> <td style="text-align:center;"> (0.036) </td> </tr> <tr> <td style="text-align:left;"> k618 </td> <td style="text-align:center;"> −0.021 </td> <td style="text-align:center;"> −0.016 </td> <td style="text-align:center;"> −0.011 </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> (0.014) </td> <td style="text-align:center;"> (0.014) </td> <td style="text-align:center;"> (0.014) </td> </tr> <tr> <td style="text-align:left;"> age </td> <td style="text-align:center;"> −0.015 </td> <td style="text-align:center;"> −0.014 </td> <td style="text-align:center;"> −0.013 </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> (0.003) </td> <td style="text-align:center;"> (0.003) </td> <td style="text-align:center;"> (0.003) </td> </tr> <tr> <td style="text-align:left;"> wcyes </td> <td style="text-align:center;"> 0.190 </td> <td style="text-align:center;"> 0.145 </td> <td style="text-align:center;"> 0.164 </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> (0.045) </td> <td style="text-align:center;"> (0.046) </td> <td style="text-align:center;"> (0.046) </td> </tr> <tr> <td style="text-align:left;"> hcyes </td> <td style="text-align:center;"> −0.027 </td> <td style="text-align:center;"> −0.031 </td> <td style="text-align:center;"> 0.019 </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> (0.042) </td> <td style="text-align:center;"> (0.041) </td> <td style="text-align:center;"> (0.043) </td> </tr> <tr> <td style="text-align:left;"> lwg </td> <td style="text-align:center;"> </td> <td style="text-align:center;"> 0.117 </td> <td style="text-align:center;"> 0.123 </td> </tr> <tr> <td style="text-align:left;"> </td> <td style="text-align:center;"> </td> <td style="text-align:center;"> (0.031) </td> <td style="text-align:center;"> (0.030) </td> </tr> <tr> <td style="text-align:left;"> inc </td> <td style="text-align:center;"> </td> <td style="text-align:center;"> </td> <td style="text-align:center;"> −0.007 </td> </tr> <tr> <td style="text-align:left;box-shadow: 0px 1.5px"> </td> <td style="text-align:center;box-shadow: 0px 1.5px"> </td> <td style="text-align:center;box-shadow: 0px 1.5px"> </td> <td style="text-align:center;box-shadow: 0px 1.5px"> (0.002) </td> </tr> <tr> <td style="text-align:left;"> Num.Obs. </td> <td style="text-align:center;"> 753 </td> <td style="text-align:center;"> 753 </td> <td style="text-align:center;"> 753 </td> </tr> <tr> <td style="text-align:left;"> R2 </td> <td style="text-align:center;"> 0.112 </td> <td style="text-align:center;"> 0.129 </td> <td style="text-align:center;"> 0.150 </td> </tr> <tr> <td style="text-align:left;"> R2 Adj. </td> <td style="text-align:center;"> 0.106 </td> <td style="text-align:center;"> 0.122 </td> <td style="text-align:center;"> 0.142 </td> </tr> <tr> <td style="text-align:left;"> AIC </td> <td style="text-align:center;"> 1003.4 </td> <td style="text-align:center;"> 990.7 </td> <td style="text-align:center;"> 974.2 </td> </tr> <tr> <td style="text-align:left;"> BIC </td> <td style="text-align:center;"> 1035.8 </td> <td style="text-align:center;"> 1027.7 </td> <td style="text-align:center;"> 1015.8 </td> </tr> <tr> <td style="text-align:left;"> Log.Lik. </td> <td style="text-align:center;"> −494.704 </td> <td style="text-align:center;"> −487.332 </td> <td style="text-align:center;"> −478.086 </td> </tr> <tr> <td style="text-align:left;"> F </td> <td style="text-align:center;"> 18.836 </td> <td style="text-align:center;"> 18.444 </td> <td style="text-align:center;"> 18.827 </td> </tr> <tr> <td style="text-align:left;"> RMSE </td> <td style="text-align:center;"> 0.47 </td> <td style="text-align:center;"> 0.46 </td> <td style="text-align:center;"> 0.46 </td> </tr> </tbody> <tfoot> <tr><td style="padding: 0; " colspan="100%"> <sup></sup> Data: Mroz (1987)</td></tr> <tr><td style="padding: 0; " colspan="100%"> <sup></sup> Robust standard errors in parentheses</td></tr> <tr><td style="padding: 0; " colspan="100%"> <sup></sup> *p<0.1, **p<0.05, ***p<0.01</td></tr> </tfoot> </table> --- # Advanced `modelsummary` Features ### **1. Model Comparison** ``` r # Compare different model types library(fixest) library(lme4) models <- list( "OLS" = lm(y ~ x, data = df), "Fixed Effects" = feols(y ~ x | state, data = df), "Random Effects" = lmer(y ~ x + (1|state), data = df) ) msummary(models, stars = TRUE, output = "table.html") ``` --- ### **2. Output Formats** ``` r # Save to different formats msummary(models, output = "table.tex") # LaTeX msummary(models, output = "table.docx") # Word msummary(models, output = "table.html") # HTML msummary(models, output = "table.md") # Markdown msummary(models, output = "table.txt") # Plain text msummary(models, output = "gt") # gt object ``` --- ### **3. Custom Tidiers** ``` r # For unsupported models custom_tidy <- function(model) { # Extract coefficients coefs <- coef(summary(model)) data.frame( term = rownames(coefs), estimate = coefs[, 1], std.error = coefs[, 2], statistic = coefs[, 3], p.value = coefs[, 4] ) } msummary(model, tidy = custom_tidy) ``` --- ### **4. Theme System** ``` r # Set global defaults modelsummary::modelsummary_settings( fmt_decimal = 3, stars = c('*' = 0.1, '**' = 0.05, '***' = 0.01), estimate = "{estimate} ({std.error})", statistic = NULL ) # Now all tables use these settings msummary(models) ``` --- # Package 2: `stargazer` - The Legacy Workhorse ### **Still Common in Political Science** - Used in many published papers - Simple syntax for basic tables --- ### **Basic Usage** ``` r library(stargazer) # Single model stargazer(model1, type = "text") ``` ``` ## ## =============================================== ## Dependent variable: ## --------------------------- ## lfp ## ----------------------------------------------- ## k5 -0.309*** ## (0.037) ## ## k618 -0.021 ## (0.014) ## ## age -0.015*** ## (0.003) ## ## wcyes 0.190*** ## (0.045) ## ## hcyes -0.027 ## (0.042) ## ## Constant 1.248*** ## (0.125) ## ## ----------------------------------------------- ## Observations 753 ## R2 0.112 ## Adjusted R2 0.106 ## Residual Std. Error 0.469 (df = 747) ## F Statistic 18.836*** (df = 5; 747) ## =============================================== ## Note: *p<0.1; **p<0.05; ***p<0.01 ``` --- ``` r # Multiple models stargazer(list(model1, model2, model3), type = "text", title = "Regression Results", align = TRUE) ``` ``` ## ## Regression Results ## =========================================================================================== ## Dependent variable: ## ----------------------------------------------------------------------- ## lfp ## (1) (2) (3) ## ------------------------------------------------------------------------------------------- ## k5 -0.309*** -0.302*** -0.295*** ## (0.037) (0.036) (0.036) ## ## k618 -0.021 -0.016 -0.011 ## (0.014) (0.014) (0.014) ## ## age -0.015*** -0.014*** -0.013*** ## (0.003) (0.003) (0.003) ## ## wcyes 0.190*** 0.145*** 0.164*** ## (0.045) (0.046) (0.046) ## ## hcyes -0.027 -0.031 0.019 ## (0.042) (0.041) (0.043) ## ## lwg 0.117*** 0.123*** ## (0.031) (0.030) ## ## inc -0.007*** ## (0.002) ## ## Constant 1.248*** 1.115*** 1.144*** ## (0.125) (0.128) (0.127) ## ## ------------------------------------------------------------------------------------------- ## Observations 753 753 753 ## R2 0.112 0.129 0.150 ## Adjusted R2 0.106 0.122 0.142 ## Residual Std. Error 0.469 (df = 747) 0.464 (df = 746) 0.459 (df = 745) ## F Statistic 18.836*** (df = 5; 747) 18.444*** (df = 6; 746) 18.827*** (df = 7; 745) ## =========================================================================================== ## Note: *p<0.1; **p<0.05; ***p<0.01 ``` --- ``` r # Better stargazer(model1, model2, model3, type = "html", dep.var.labels = "Dependent Variable", covariate.labels = c("Var1", "Var2", "Var3")) ``` <table style="text-align:center"><tr><td colspan="4" style="border-bottom: 1px solid black"></td></tr><tr><td style="text-align:left"></td><td colspan="3"><em>Dependent variable:</em></td></tr> <tr><td></td><td colspan="3" style="border-bottom: 1px solid black"></td></tr> <tr><td style="text-align:left"></td><td colspan="3">Dependent Variable</td></tr> <tr><td style="text-align:left"></td><td>(1)</td><td>(2)</td><td>(3)</td></tr> <tr><td colspan="4" style="border-bottom: 1px solid black"></td></tr><tr><td style="text-align:left">Var1</td><td>-0.309<sup>***</sup></td><td>-0.302<sup>***</sup></td><td>-0.295<sup>***</sup></td></tr> <tr><td style="text-align:left"></td><td>(0.037)</td><td>(0.036)</td><td>(0.036)</td></tr> <tr><td style="text-align:left"></td><td></td><td></td><td></td></tr> <tr><td style="text-align:left">Var2</td><td>-0.021</td><td>-0.016</td><td>-0.011</td></tr> <tr><td style="text-align:left"></td><td>(0.014)</td><td>(0.014)</td><td>(0.014)</td></tr> <tr><td style="text-align:left"></td><td></td><td></td><td></td></tr> <tr><td style="text-align:left">Var3</td><td>-0.015<sup>***</sup></td><td>-0.014<sup>***</sup></td><td>-0.013<sup>***</sup></td></tr> <tr><td style="text-align:left"></td><td>(0.003)</td><td>(0.003)</td><td>(0.003)</td></tr> <tr><td style="text-align:left"></td><td></td><td></td><td></td></tr> <tr><td style="text-align:left">wcyes</td><td>0.190<sup>***</sup></td><td>0.145<sup>***</sup></td><td>0.164<sup>***</sup></td></tr> <tr><td style="text-align:left"></td><td>(0.045)</td><td>(0.046)</td><td>(0.046)</td></tr> <tr><td style="text-align:left"></td><td></td><td></td><td></td></tr> <tr><td style="text-align:left">hcyes</td><td>-0.027</td><td>-0.031</td><td>0.019</td></tr> <tr><td style="text-align:left"></td><td>(0.042)</td><td>(0.041)</td><td>(0.043)</td></tr> <tr><td style="text-align:left"></td><td></td><td></td><td></td></tr> <tr><td style="text-align:left">lwg</td><td></td><td>0.117<sup>***</sup></td><td>0.123<sup>***</sup></td></tr> <tr><td style="text-align:left"></td><td></td><td>(0.031)</td><td>(0.030)</td></tr> <tr><td style="text-align:left"></td><td></td><td></td><td></td></tr> <tr><td style="text-align:left">inc</td><td></td><td></td><td>-0.007<sup>***</sup></td></tr> <tr><td style="text-align:left"></td><td></td><td></td><td>(0.002)</td></tr> <tr><td style="text-align:left"></td><td></td><td></td><td></td></tr> <tr><td style="text-align:left">Constant</td><td>1.248<sup>***</sup></td><td>1.115<sup>***</sup></td><td>1.144<sup>***</sup></td></tr> <tr><td style="text-align:left"></td><td>(0.125)</td><td>(0.128)</td><td>(0.127)</td></tr> <tr><td style="text-align:left"></td><td></td><td></td><td></td></tr> <tr><td colspan="4" style="border-bottom: 1px solid black"></td></tr><tr><td style="text-align:left">Observations</td><td>753</td><td>753</td><td>753</td></tr> <tr><td style="text-align:left">R<sup>2</sup></td><td>0.112</td><td>0.129</td><td>0.150</td></tr> <tr><td style="text-align:left">Adjusted R<sup>2</sup></td><td>0.106</td><td>0.122</td><td>0.142</td></tr> <tr><td style="text-align:left">Residual Std. Error</td><td>0.469 (df = 747)</td><td>0.464 (df = 746)</td><td>0.459 (df = 745)</td></tr> <tr><td style="text-align:left">F Statistic</td><td>18.836<sup>***</sup> (df = 5; 747)</td><td>18.444<sup>***</sup> (df = 6; 746)</td><td>18.827<sup>***</sup> (df = 7; 745)</td></tr> <tr><td colspan="4" style="border-bottom: 1px solid black"></td></tr><tr><td style="text-align:left"><em>Note:</em></td><td colspan="3" style="text-align:right"><sup>*</sup>p<0.1; <sup>**</sup>p<0.05; <sup>***</sup>p<0.01</td></tr> </table> --- ### **Strengths and Weaknesses** <table class="table" style="width: auto !important; margin-left: auto; margin-right: auto;"> <caption>Stargazer: Pros and Cons</caption> <thead> <tr> <th style="text-align:left;"> Strength </th> <th style="text-align:left;"> Weakness </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> Simple syntax </td> <td style="text-align:left;"> Limited customization </td> </tr> <tr> <td style="text-align:left;"> Widely used/recognized </td> <td style="text-align:left;"> Less active development </td> </tr> <tr> <td style="text-align:left;"> Good HTML output for Word </td> <td style="text-align:left;"> Can be buggy with new models </td> </tr> <tr> <td style="text-align:left;"> Handles many model types </td> <td style="text-align:left;"> LaTeX-focused originally </td> </tr> <tr> <td style="text-align:left;"> Good for teaching </td> <td style="text-align:left;"> Verbose syntax for complex tables </td> </tr> </tbody> </table> --- # Package 3: `gtsummary` ### **Medical/Social Science Focus** - Designed for clinical research - Beautiful automatic formatting - Great for descriptive statistics too --- ### **Basic Regression Tables** ``` r library(gtsummary) tbl_regression(model1, exponentiate = FALSE) ```
Characteristic
Beta
95% CI
p-value
k5
-0.31
-0.38, -0.24
<0.001
k618
-0.02
-0.05, 0.01
0.13
age
-0.01
-0.02, -0.01
<0.001
wc
no
—
—
yes
0.19
0.10, 0.28
<0.001
hc
no
—
—
yes
-0.03
-0.11, 0.05
0.5
Abbreviation: CI = Confidence Interval
--- ### **Strengths** 1. **Automatic formatting** of categorical variables 2. **Clean defaults** with minimal code 3. **Good descriptive statistics** tables 4. **Medical journal style** if that's your target --- ### **Limitations** 1. **Less common** in political science 2. **Focus on medical models** (survival, etc.) 3. **Less flexible** for complex model comparisons 4. **Different syntax** from other packages --- # Package 4: `kableExtra` - Complete Control ### **When You Need Total Control** - Customize every aspect - Combine multiple tables - Complex formatting needs --- ### **Basic Workflow** ``` r library(kableExtra) # Start with kable() table <- model %>% broom::tidy() %>% kable(format = "html", digits = 3, col.names = c("Variable", "Coefficient", "SE", "t-stat", "p-value")) %>% kable_styling(bootstrap_options = "striped", full_width = FALSE) %>% add_header_above(c(" " = 1, "Estimate" = 4)) %>% footnote(general = "Standard errors in parentheses") # Save save_kable(table, "table.html") ``` --- ### **Advantages** 1. **Total control** over formatting 2. **Combine** models, summary stats, etc. 3. **Advanced features:** grouping, coloring, etc. 4. **Works with any data frame** --- # Table Design Principles ### **1. Clarity First** - **Clear variable names** (not R variable names) - **Consistent formatting** across tables - **Adequate white space** - **Logical ordering** of variables/models --- ### **2. Information Hierarchy** <!-- --> --- ### **3. Social Science Practices** - **Report robust/clustered SEs** - **Include `\(R^2\)` and `\(N\)`** (always) - **Consistent decimal places** - **p-values, maybe also stars** (check journal rules) ### **4. Accessibility** ``` r # Good practices: # 1. Avoid color-only coding # 2. Provide alternative text if images # 3. Use clear, sans-serif fonts # 4. Ensure sufficient contrast # 5. Provide machine-readable versions # In modelsummary: msummary(models, notes = c("Note: Standard errors in parentheses", "Data available upon request"), title = "Table 1: Main Results") ``` --- ###Example [This One's For the Boys](https://www.cambridge.org/core/journals/american-political-science-review/article/this-ones-for-the-boys-how-gendered-political-socialization-limits-girls-political-ambition-and-interest/FC49F85EDDAAA804DCBFBA63C6C437F0)