esb.R

richard — Jun 29, 2014, 11:02 PM

## This script is an attempt to reproduce the graphic of 
## "Alternatieve Economentop met meer kwaliteit" by
## Jaap Abbring, Bart Bronnenberg, Pieter Gautier, Jan van Ours
## ESB Jaargang 99 (4684) 2 mei 2014, 266-269
## The data-file is a somewhat edited version of a csv file
## given by Jaap Abbring to André van Delft.
##
## Following André, I prefer a "double logarithmic scale" !
##
## I apologize for any errors which have crept in during the 
## editing of the data file (separate fields for first name, 
##    surname; some new fields; ...)
##
## I am not done with "improving" this data file, nor with the script!

## We have data here on 226 Dutch economists plus 6 Clark medal winners (US)

esb <- read.csv("http://www.math.leidenuniv.nl/~gill/Data/esb_ed.csv",
                stringsAsFactors = FALSE)
esb$X <- NULL
attach(esb)
names(esb)
 [1] "seq_no"      "initials"    "first_name"  "prefix"      "surname"    
 [6] "uni"         "fte"         "dutch"       "in_alt"      "scr_esb"    
[11] "rank_esb"    "scr_alt"     "rank_alt"    "clark_medal" "part_time"  
[16] "top_40"     
nrow(esb)
[1] 233
head(esb, n = 10)
   seq_no initials first_name  prefix     surname uni fte dutch in_alt
1       1       F.       Rick van der       Ploeg  VU 0.2  TRUE  FALSE
2       2     E.H.      Erwin               Bulte WUR 0.8  TRUE   TRUE
3       3     D.L.       Daan     van Knippenberg EUR 1.0  TRUE   TRUE
4       4   A.H.O.     Arthur     van       Soest UvT 1.0  TRUE   TRUE
5       5     H.P.      Harry            Huizinga UvT 1.0  TRUE   TRUE
6       6       B.       Bart              Hobijn  VU 0.2  TRUE  FALSE
7       7       B.    Bernard             Nijstad RUG 1.0  TRUE   TRUE
8       8   J.H.J.       John             Einmahl UvT 1.0  TRUE   TRUE
9       9   R.S.J.    Richard                 Tol  VU 0.2  TRUE  FALSE
10     10     T.J.     Thomas              Dohmen  UM 0.2  TRUE  FALSE
   scr_esb rank_esb scr_alt rank_alt clark_medal part_time top_40
1    12.72       10   29.56       NA       FALSE      TRUE   TRUE
2    11.45       14   27.27        1       FALSE     FALSE   TRUE
3    19.49        4   27.26        2       FALSE     FALSE   TRUE
4    11.06       16   24.34        3       FALSE     FALSE   TRUE
5     4.59      115   22.96        4       FALSE     FALSE   TRUE
6     4.88       97   22.54       NA       FALSE      TRUE   TRUE
7    10.96       19   21.44        5       FALSE     FALSE   TRUE
8     8.88       28   21.40        6       FALSE     FALSE   TRUE
9    32.05        1   20.05       NA       FALSE      TRUE   TRUE
10    6.47       54   19.98       NA       FALSE      TRUE   TRUE
tail(esb, n = 10)
    seq_no initials first_name prefix              surname  uni fte dutch
224    224   O.F.G.    Olivier                      Furrer  RUN 1.0  TRUE
225    225       M.    Maarten                       Pronk  EUR 0.4  TRUE
226    226     T.M.     Teresa        Marreiros Bago d'Uva  EUR 1.0  TRUE
227    227     O.W.       Onno                   Steenbeek  EUR 0.2  TRUE
228    228       A.        Amy                 Finkelstein <NA>  NA FALSE
229    229       E.     Esther                       Duflo <NA>  NA FALSE
230    230       R.        Raj                      Chetty <NA>  NA FALSE
231    231       E.   Emmanuel                        Saez <NA>  NA FALSE
232    232       J.   Jonathan                       Levin <NA>  NA FALSE
233    233       M.    Matthew                    Gentzkow <NA>  NA FALSE
    in_alt scr_esb rank_esb scr_alt rank_alt clark_medal part_time top_40
224   TRUE    2.12      196    1.96      204       FALSE     FALSE  FALSE
225  FALSE    0.92      223    1.85       NA       FALSE      TRUE  FALSE
226   TRUE    0.48      227    1.49      205       FALSE     FALSE  FALSE
227  FALSE    0.68      225    1.39       NA       FALSE      TRUE  FALSE
228   TRUE   10.23       NA   68.74       NA        TRUE        NA   TRUE
229   TRUE    7.65       NA   45.26       NA        TRUE        NA   TRUE
230   TRUE    7.78       NA   37.38       NA        TRUE        NA   TRUE
231   TRUE    5.92       NA   30.31       NA        TRUE        NA   TRUE
232   TRUE    5.31       NA   27.09       NA        TRUE        NA   TRUE
233   TRUE    3.62       NA   26.34       NA        TRUE        NA   TRUE
str(esb)
'data.frame':   233 obs. of  16 variables:
 $ seq_no     : int  1 2 3 4 5 6 7 8 9 10 ...
 $ initials   : chr  "F." "E.H." "D.L." "A.H.O." ...
 $ first_name : chr  "Rick" "Erwin" "Daan" "Arthur" ...
 $ prefix     : chr  "van der" "" "van" "van" ...
 $ surname    : chr  "Ploeg" "Bulte" "Knippenberg" "Soest" ...
 $ uni        : chr  "VU" "WUR" "EUR" "UvT" ...
 $ fte        : num  0.2 0.8 1 1 1 0.2 1 1 0.2 0.2 ...
 $ dutch      : logi  TRUE TRUE TRUE TRUE TRUE TRUE ...
 $ in_alt     : logi  FALSE TRUE TRUE TRUE TRUE FALSE ...
 $ scr_esb    : num  12.72 11.45 19.49 11.06 4.59 ...
 $ rank_esb   : int  10 14 4 16 115 97 19 28 1 54 ...
 $ scr_alt    : num  29.6 27.3 27.3 24.3 23 ...
 $ rank_alt   : int  NA 1 2 3 4 NA 5 6 NA NA ...
 $ clark_medal: logi  FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ part_time  : logi  TRUE FALSE FALSE FALSE FALSE TRUE ...
 $ top_40     : logi  TRUE TRUE TRUE TRUE TRUE TRUE ...

## some checks

identical(part_time, fte < 0.5)
[1] TRUE
identical(dutch, !clark_medal)
[1] TRUE
identical(top_40, scr_alt > 13.5)
[1] TRUE
sum(top_40, na.rm = TRUE)
[1] 40

sum(dutch)
[1] 227
sum(clark_medal)
[1] 6

sum(scr_alt > 13.5, na.rm = TRUE)
[1] 40
sum(scr_esb > 7.6, na.rm = TRUE)
[1] 40

## Double logarithmic plot

plot(scr_esb, scr_alt, log="xy", pch = "*", type = "n", xlab = "", ylab = "")
title(main = "Alternative vs official ESB score & top 40's (logarithmic scales)", 
      sub = "Following Abbring et al., ESB Jaargang 99 (4684) 2 mei 2014, 266-269", 
      xlab = "Official ESB score", ylab = "Alternative score")
points(scr_esb[!part_time & !top_40 & !clark_medal], 
       scr_alt[!part_time & !top_40 & !clark_medal], 
       pch = "*")
points(scr_esb[part_time], 
       scr_alt[part_time], 
       pch = 0)
points(scr_esb[clark_medal], 
       scr_alt[clark_medal], 
       pch = 23, bg = "goldenrod3")
points(scr_esb[top_40 & !part_time], 
       scr_alt[top_40 & !part_time], 
       pch = 21, bg = "blue")
abline(v = 7.6)
abline(h = 13.5)
legend(x = 0.5, y = 70, 
    pch = c(8, 0, 21, 23), 
    col = c("black","black", "blue", "goldenrod3"), 
    legend = c("full-time (ex alt-top-40)", "part-time", "alt-top-40 (ex part-time)", "Clark medal"),
    text.col = c("black","black", "blue", "goldenrod3"))

text(scr_esb[surname == "Nijkamp"], scr_alt[surname == "Nijkamp"], 
     "Nijkamp", pos = 3, cex = 0.8)
text(scr_esb[surname == "McAleer"], scr_alt[surname == "McAleer"], 
     "McAleer", pos = 3, cex = 0.8)
text(scr_esb[surname == "Tol"], scr_alt[surname == "Tol"], 
     "Tol", pos = 3, cex = 0.8)
text(scr_esb[surname == "Knippenberg"], scr_alt[surname == "Knippenberg"], 
     "van Knippenberg", pos = 3, cex = 0.8, col = "blue")
text(scr_esb[surname == "Ploeg"], scr_alt[surname == "Ploeg"], 
     "van der Ploeg", pos = 3, cex = 0.8)
text(scr_esb[surname == "Bulte"], scr_alt[surname == "Bulte"], 
     "Bulte", pos = 2, cex = 0.8, col = "blue")
text(scr_esb[surname == "Soest" & scr_alt > 20], 
     scr_alt[surname == "Soest" & scr_alt > 20], 
     "van Soest", pos = 2, cex = 0.8, col = "blue")
text(scr_esb[surname == "Abbring"], scr_alt[surname == "Abbring"], 
     "Abbring", pos = 2, cex = 0.8, col = "blue")
text(scr_esb[surname == "Huizinga"], scr_alt[surname == "Huizinga"], 
     "Huizinga", pos = 2, cex = 0.8, col = "blue")

text(scr_esb[surname == "Franses"], scr_alt[surname == "Franses"], 
     "Franses", pos = 2, cex = 0.8, col = "red")
text(scr_esb[surname == "Einmahl"], scr_alt[surname == "Einmahl"], 
       "Einmahl", pos = 2, cex = 0.8, col = "red")

plot of chunk unnamed-chunk-1


## Original plot

plot(scr_esb, scr_alt, pch = "*", type = "n", xlab = "", ylab = "")
title(main = "Alternative vs official ESB score & top 40's", 
      sub = "Following Abbring et al., ESB Jaargang 99 (4684) 2 mei 2014, 266-269", 
      xlab = "Official ESB score", ylab = "Alternative score")
points(scr_esb[!part_time & !top_40 & !clark_medal], 
       scr_alt[!part_time & !top_40 & !clark_medal], 
       pch = "*")
points(scr_esb[part_time], 
       scr_alt[part_time], 
       pch = 0)
points(scr_esb[clark_medal], 
       scr_alt[clark_medal], 
       pch = 23, bg = "goldenrod3")
points(scr_esb[top_40 & !part_time], 
       scr_alt[top_40 & !part_time], 
       pch = 21, bg = "blue")
abline(v = 7.6)
abline(h = 13.5)
legend(x = 15, y = 70, 
       pch = c(8, 0, 21, 23), 
       col = c("black","black", "blue", "goldenrod3"), 
       legend = c("full-time (ex alt-top-40)", "part-time", "alt-top-40 (ex part-time)", "Clark medal"),
       text.col = c("black","black", "blue", "goldenrod3"))

text(scr_esb[surname == "Nijkamp"], scr_alt[surname == "Nijkamp"], 
     "Nijkamp", pos = 3, cex = 0.8)
text(scr_esb[surname == "McAleer"], scr_alt[surname == "McAleer"], 
     "McAleer", pos = 3, cex = 0.8)
text(scr_esb[surname == "Tol"], scr_alt[surname == "Tol"], 
     "Tol", pos = 3, cex = 0.8)
text(scr_esb[surname == "Knippenberg"], scr_alt[surname == "Knippenberg"], 
     "van Knippenberg", pos = 3, cex = 0.8, col = "blue")
text(scr_esb[surname == "Ploeg"], scr_alt[surname == "Ploeg"], 
     "van der Ploeg", pos = 3, cex = 0.8)
text(scr_esb[surname == "Bulte"], scr_alt[surname == "Bulte"], 
     "Bulte", pos = 2, cex = 0.8, col = "blue")
text(scr_esb[surname == "Soest" & scr_alt > 20], 
     scr_alt[surname == "Soest" & scr_alt > 20], 
     "van Soest", pos = 2, cex = 0.8, col = "blue")
text(scr_esb[surname == "Abbring"], scr_alt[surname == "Abbring"], 
     "Abbring", pos = 2, cex = 0.8, col = "blue")
text(scr_esb[surname == "Huizinga"], scr_alt[surname == "Huizinga"], 
     "Huizinga", pos = 2, cex = 0.8, col = "blue")

text(scr_esb[surname == "Franses"], scr_alt[surname == "Franses"], 
     "Franses", pos = 2, cex = 0.8, col = "red")
text(scr_esb[surname == "Einmahl"], scr_alt[surname == "Einmahl"], 
     "Einmahl", pos = 2, cex = 0.8, col = "red")

plot of chunk unnamed-chunk-1


## I am going to double the official ESB score so that both axes have the same range

scr_esb <- 2 * scr_esb

## Double logarithmic plot

plot(scr_esb, scr_alt, log="xy", pch = "*", type = "n",  xlab = "", ylab = "",
     xlim = c(5, 70), ylim = c(5, 70))
title(main = "Alternative vs 2x official ESB score & top 40's (logarithmic scales)", 
      sub = "Following Abbring et al., ESB Jaargang 99 (4684) 2 mei 2014, 266-269", 
      xlab = "2 x Official ESB score", ylab = "Alternative score")
points(scr_esb[!part_time & !top_40 & !clark_medal], 
       scr_alt[!part_time & !top_40 & !clark_medal], 
       pch = "*")
points(scr_esb[part_time], 
       scr_alt[part_time], 
       pch = 0)
points(scr_esb[clark_medal], 
       scr_alt[clark_medal], 
       pch = 23, bg = "goldenrod3")
points(scr_esb[top_40 & !part_time], 
       scr_alt[top_40 & !part_time], 
       pch = 21, bg = "blue")
abline(v = 15.2)
abline(h = 13.5)
legend(x = 4.7, y = 75, 
       pch = c(8, 0, 21, 23), 
       col = c("black","black", "blue", "goldenrod3"), 
       legend = c("full-time (ex alt-top-40)", "part-time", "alt-top-40 (ex part-time)", "Clark medal"),
       text.col = c("black","black", "blue", "goldenrod3"))

text(scr_esb[surname == "Nijkamp"], scr_alt[surname == "Nijkamp"], 
     "Nijkamp", pos = 3, cex = 0.8)
text(scr_esb[surname == "McAleer"], scr_alt[surname == "McAleer"], 
     "McAleer", pos = 3, cex = 0.8)
text(scr_esb[surname == "Tol"], scr_alt[surname == "Tol"], 
     "Tol", pos = 3, cex = 0.8)
text(scr_esb[surname == "Knippenberg"], scr_alt[surname == "Knippenberg"], 
     "van Knippenberg", pos = 3, cex = 0.8, col = "blue")
text(scr_esb[surname == "Ploeg"], scr_alt[surname == "Ploeg"], 
     "van der Ploeg", pos = 3, cex = 0.8)
text(scr_esb[surname == "Bulte"], scr_alt[surname == "Bulte"], 
     "Bulte", pos = 2, cex = 0.8, col = "blue")
text(scr_esb[surname == "Soest" & scr_alt > 20], 
     scr_alt[surname == "Soest" & scr_alt > 20], 
     "van Soest", pos = 2, cex = 0.8, col = "blue")
text(scr_esb[surname == "Abbring"], scr_alt[surname == "Abbring"], 
     "Abbring", pos = 3, cex = 0.8, col = "blue")
text(scr_esb[surname == "Huizinga"], scr_alt[surname == "Huizinga"], 
     "Huizinga", pos = 2, cex = 0.8, col = "blue")

text(scr_esb[surname == "Franses"], scr_alt[surname == "Franses"], 
     "Franses", pos = 2, cex = 0.8, col = "red")
text(scr_esb[surname == "Einmahl"], scr_alt[surname == "Einmahl"], 
     "Einmahl", pos = 2, cex = 0.8, col = "red")

plot of chunk unnamed-chunk-1


## Original plot

plot(scr_esb, scr_alt, pch = "*", type = "n",  xlab = "", ylab = "",
     xlim = c(4, 70), ylim = c(4, 70))
title(main = "Alternative vs 2x official ESB score & top 40's", 
      sub = "Following Abbring et al., ESB Jaargang 99 (4684) 2 mei 2014, 266-269", 
      xlab = "2 x Official ESB score", ylab = "Alternative score")
points(scr_esb[!part_time & !top_40 & !clark_medal], 
       scr_alt[!part_time & !top_40 & !clark_medal], 
       pch = "*")
points(scr_esb[part_time], 
       scr_alt[part_time], 
       pch = 0)
points(scr_esb[clark_medal], 
       scr_alt[clark_medal], 
       pch = 23, bg = "goldenrod3")
points(scr_esb[top_40 & !part_time], 
       scr_alt[top_40 & !part_time], 
       pch = 21, bg = "blue")
abline(v = 15.2)
abline(h = 13.5)
legend(x = 40, y = 70, 
       pch = c(8, 0, 21, 23), 
       col = c("black","black", "blue", "goldenrod3"), 
       legend = c("full-time (ex alt-top-40)", "part-time", "alt-top-40 (ex part-time)", "Clark medal"),
       text.col = c("black","black", "blue", "goldenrod3"))

text(scr_esb[surname == "Nijkamp"], scr_alt[surname == "Nijkamp"], 
     "Nijkamp", pos = 3, cex = 0.8)
text(scr_esb[surname == "McAleer"], scr_alt[surname == "McAleer"], 
     "McAleer", pos = 3, cex = 0.8)
text(scr_esb[surname == "Tol"], scr_alt[surname == "Tol"], 
     "Tol", pos = 3, cex = 0.8)
text(scr_esb[surname == "Knippenberg"], scr_alt[surname == "Knippenberg"], 
     "van Knippenberg", pos = 3, cex = 0.8, col = "blue")
text(scr_esb[surname == "Ploeg"], scr_alt[surname == "Ploeg"], 
     "van der Ploeg", pos = 3, cex = 0.8)
text(scr_esb[surname == "Bulte"], scr_alt[surname == "Bulte"], 
     "Bulte", pos = 2, cex = 0.8, col = "blue")
text(scr_esb[surname == "Soest" & scr_alt > 20], 
     scr_alt[surname == "Soest" & scr_alt > 20], 
     "van Soest", pos = 2, cex = 0.8, col = "blue")
text(scr_esb[surname == "Abbring"], scr_alt[surname == "Abbring"], 
     "Abbring", pos = 3, cex = 0.8, col = "blue")
text(scr_esb[surname == "Huizinga"], scr_alt[surname == "Huizinga"], 
     "Huizinga", pos = 2, cex = 0.8, col = "blue")

text(scr_esb[surname == "Franses"], scr_alt[surname == "Franses"], 
     "Franses", pos = 2, cex = 0.8, col = "red")
text(scr_esb[surname == "Einmahl"], scr_alt[surname == "Einmahl"], 
     "Einmahl", pos = 2, cex = 0.8, col = "red")

plot of chunk unnamed-chunk-1