Replication in R

R code that regenerates the numbers this paper reports, starting from the dataset published on this site. It reproduces 43 of 44. The one that does not match is listed below.

Run it

Rscript run.R

run.R is the whole package. Save it and run it: it reads the dataset from this site if the CSV is not sitting beside it, and loads the shared conventions file the same way, so it works on its own in an empty directory. It needs R with fixest, and depending on the paper lme4, metafor, plm, BMS or LowRankQP. It writes results.json, one value per number, each named for where it appears in the paper.

How it compares with Stata

Most of these papers were estimated in Stata, and the two programs differ in places that change printed digits. Those conventions are stated once, in stata_compat.R, and shared by every replication on this site: ivreg2's large-sample variance, SSC winsor's order statistics, xtreg's treatment of singleton groups, and the restricted-ML default of xtmixed, which is not the default of the mixed command that replaced it.

Numbers that do not match the printed paper

Cells are named as they are in results.json. The reason for each difference follows the table.

cellpaperthis code
T2 FE RMSE0.110.104077

Two things point the same way here. The printed 0.11 is exactly the value printed in the neighbouring OLS column, and the other four RMSE cells of this table reproduce. The do-file's esttab call carries no stats() option, so it printed only the sample size and the R-squared and RMSE rows had to be transferred by hand. The printed value is left exactly as published.

20 further numbers depend on a random draw, so neither a match nor a mismatch is meaningful.

Files