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")
## 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")
## 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")
## 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")