Errata

These errata are errors in the printed book. These changes are implemented in this online version.

Due to final copyediting by the Press, the website version may differ slightly from the print version. If you discover a discrepency, please email us at graeme.blair@gmail.com, acoppock@gmail.com, and macartan@gmail.com and we will fix it and send you DeclareDesign stickers!

Substantive changes

  • On pg. 210-211, we changed the inquiry to be the ATT rather than the ATE, to reflect the more common practice of targeting the ATT in matching designs. Declaration 16.2 now declares the ATT as the inquiry; we now write “Our inquiry is the average treatment effect on the treated (ATT). This is the average treatment effect among the units who are in fact treated.”; and Figure 16.4 is updated to reflect the change in the x-axis title.

Code updates

We are committed to maintaining the code in this book as the R ecosystem evolves. The following changes reflect differences between the printed book and the online version.

  • On pg. 103, Declaration 9.3 now reads .summary = ~tidy(., exponentiate = TRUE) instead of .summary = ~tidy_stan(., exponentiate = TRUE), reflecting the use of the standard broom.mixed package for tidying stan objects. In addition, the library rdss is replaced with the library broom.mixed in the declaration.
  • On pg. 155, the panel data example now declares the years level with declare_level() and joins it to countries with cross_levels(.by = c("countries", "years")), in place of add_level(nest = FALSE) and by = join_using(countries, years). fabricatr 2.0 deprecates the old form; the new one draws the same data.
  • On pgs. 212-213, Declaration 16.3 now uses the DIDmultiplegt 2.x interface through rdss::did_multiplegt_tidy() (mode = "dyn" with outcome, group, time, and treatment in place of Y, G, T, and D), which requires the polars package. The periods level is declared with declare_level() and joined with cross_levels(.by = c("units", "periods")), the fabricatr 2.0 form of add_level(nest = FALSE) and by = join_using(units, periods).
  • On pgs. 284-285, Declaration 18.10 now writes se_type = "CR2" in its declare_estimator() call. Under estimatr 1.x, a fit with both fixed_effects and clusters used CR2 standard errors by default, so this is the estimator the printed book ran; estimatr 2.0 changed that default to CR0 and warns when the choice is left implicit. Naming CR2 keeps the diagnosis as printed and removes the warning. The periods level is now declared with declare_level() and joined with cross_levels(.by = c("units", "periods")), the fabricatr 2.0 form of add_level(nest = FALSE) and by = join_using(units, periods); the data drawn are the same.