1

I have a data frame with estimates from multiple models, each ran on a separate country sample.

  cntry        term      estimate    std.error   statistic    p.value
1    DE (Intercept) -2.775951e+00 1.140836e+00 -2.43325992 0.01496355
2    DE        agea  7.329692e-02 3.933452e-02  1.86342470 0.06240254
3    DE       agesq -9.109431e-04 3.989225e-04 -2.28350889 0.02240041
4    DE   children1 -3.243184e-01 2.325079e-01 -1.39487027 0.16305496
5    DE    class817 -1.487238e+01 5.319496e+02 -0.02795825 0.97769545
6    DE     class82 -7.983340e-01 5.897445e-01 -1.35369461 0.17583383

The data, available here, is structured in the long format. Each country sample has the same terms included, as can be seen when the data is transformed into a wide format with:

pivot_wider(names_from = cntry, 
              values_from = c("estimate", "std.error", "statistic", "p.value"))

I am now struggling to create a side by side regression table. With the sample data provided on the link above, this would mean five columns for the five countries, with the individual terms as rows and stars based on the significance levels. All the relevant information is in the dataset (estimates, p values, standard errors). However, I don't know how to display it. I typically use packages like texreg or stargazer for this, and while this answer points to a possible solution, I could not figure out how to make it work.

Nimantha
  • 6,405
  • 6
  • 28
  • 69
Erdne Htábrob
  • 819
  • 11
  • 29
  • I would say that many people, myself included, are not usually willing to download linked files. Instead, the preferred way to provide your data would be to [edit] your question to include the output of the R command `dput(your_data)`, where you replace `your_data` with the actual name of your data frame. Since it looks like your data should have 30 rows and 6 columns, the `dput()` should be manageable to paste here – duckmayr Sep 11 '20 at 13:43
  • Sorry, I adjusted the link. i did not want to dput it, because it would be too ugly / long. You can check the raw version/ directly read it into R at: https://raw.githubusercontent.com/eborbath/eborbath.github.io/master/files/models.csv To directly read it in, you could use library(RCurl) dat <- "https://raw.githubusercontent.com/eborbath/eborbath.github.io/master/files/models.csv" %>% getURL() %>% read.csv(text = .) – Erdne Htábrob Sep 11 '20 at 13:46

1 Answers1

3

Like this?

library("texreg")
dta <- read.csv("models.csv")
countries <- unique(as.character(dta$cntry))
tr <- lapply(countries, function(x) {
  d <- dta[dta$cntry == x, ]
  t <- createTexreg(coef.names = as.character(d$term),
                    coef = d$estimate,
                    se = d$std.error,
                    pvalues = d$p.value,
                    model.name = x)
  return(t)
})
screenreg(tr)

Output:

===================================================================
             DE           ES        FR        PL           SE      
-------------------------------------------------------------------
(Intercept)    -2.78 *    -2.73 **  -3.26 *      -3.91     -2.74 * 
               (1.14)     (0.96)    (1.28)       (2.03)    (1.12)  
agea            0.07       0.06      0.08 *       0.08     -0.04   
               (0.04)     (0.03)    (0.04)       (0.07)    (0.03)  
agesq          -0.00 *    -0.00 *   -0.00 **     -0.00      0.00   
               (0.00)     (0.00)    (0.00)       (0.00)    (0.00)  
children1      -0.32      -0.44 *   -0.06        -0.96 **  -0.46   
               (0.23)     (0.18)    (0.23)       (0.35)    (0.24)  
class817      -14.87       0.32      0.46         0.11      0.03   
             (531.95)     (0.61)    (0.87)       (1.08)    (1.24)  
class82        -0.80      -0.35     -0.13        -0.18      0.99   
               (0.59)     (0.59)    (0.73)       (0.78)    (0.74)  
class83        -0.30       0.59      0.70        -2.63 **   0.88   
               (0.49)     (0.58)    (0.67)       (1.02)    (0.70)  
class84        -0.34       0.11      0.34        -0.96      0.43   
               (0.55)     (0.57)    (0.70)       (0.88)    (0.76)  
class85        -0.49       0.36      0.80        -0.18      1.04   
               (0.48)     (0.56)    (0.66)       (0.72)    (0.67)  
class86        -0.41       1.01      0.42        -0.66      0.83   
               (0.54)     (0.58)    (0.69)       (0.89)    (0.73)  
class87         0.09       0.49      1.27        -0.79      1.14   
               (0.47)     (0.58)    (0.65)       (0.82)    (0.66)  
class88        -0.56       0.14      0.28        -0.46      1.33   
               (0.55)     (0.56)    (0.72)       (0.84)    (0.68)  
domicil2       -0.69 *     0.01      0.00         1.16     -0.46   
               (0.30)     (0.34)    (0.34)       (0.64)    (0.27)  
domicil3       -0.71 **   -0.11     -0.09        -1.06 **  -0.13   
               (0.25)     (0.23)    (0.29)       (0.39)    (0.25)  
domicil4       -1.18 ***  -0.24     -0.01        -0.67     -1.43 **
               (0.30)     (0.23)    (0.29)       (0.37)    (0.44)  
domicil5       -0.93      -0.71      0.27       -14.99     -0.75   
               (0.66)     (0.59)    (0.41)    (1329.91)    (0.39)  
eduyrs          0.04       0.03 *    0.01         0.16 **   0.08 **
               (0.03)     (0.01)    (0.03)       (0.05)    (0.03)  
gndr2          -0.12       0.32     -0.46 *      -0.13      0.24   
               (0.22)     (0.18)    (0.20)       (0.31)    (0.20)  
hincfel2        0.17      -0.06     -0.23        -1.10 **  -0.03   
               (0.21)     (0.19)    (0.21)       (0.36)    (0.22)  
hincfel3       -0.29       0.04     -0.17        -1.07 *   -0.09   
               (0.52)     (0.26)    (0.32)       (0.53)    (0.46)  
hincfel4        0.55      -0.39      0.81       -14.97      0.36   
               (0.84)     (0.58)    (0.66)    (1185.50)    (0.83)  
unemployed1     0.43 *     0.31      0.39         0.00      0.12   
               (0.22)     (0.19)    (0.27)       (0.37)    (0.22)  
===================================================================
*** p < 0.001; ** p < 0.01; * p < 0.05
Philip Leifeld
  • 2,253
  • 15
  • 24