bcallaway11 / did

Difference in Differences with Multiple Periods, website: https://bcallaway11.github.io/did
298 stars 95 forks source link

Paralellized `mboot` #132

Closed kylebutts closed 2 years ago

kylebutts commented 2 years ago

Reprex on speedup (about 25% on this data size)

library(did)

time.periods <- 15
n <- 10000

# unit data
id <- 1:n
group <- sample(seq(10, 16), n, replace = TRUE)
unit_data <- data.frame(id = id, group = group)

# generate panel data
panel_data <- data.frame(
  id = sort(rep(id, time.periods)),
  tp = rep(rep(1:time.periods), n)
)
panel_data <- merge(panel_data, unit_data, by = "id")
panel_data$D <- 1 * (panel_data$tp >= panel_data$group)

# generate heterogeneous treatment effects by calendar date
tau <- (panel_data$D == 1) * (panel_data$tp - 12.5)
panel_data$Y <- panel_data$id + 3 * panel_data$tp +
  tau * panel_data$D + rnorm(nrow(panel_data))

head(panel_data)
#>   id tp group D         Y
#> 1  1  1    13 0  3.901901
#> 2  1  2    13 0  7.186365
#> 3  1  3    13 0 10.446138
#> 4  1  4    13 0 11.011049
#> 5  1  5    13 0 15.943329
#> 6  1  6    13 0 19.768032

bench::mark(
  did_1core = att_gt(
    yname = "Y", gname = "group", idname = "id", tname = "tp",
    data = panel_data, bstrap = TRUE, biters = 1000,
    pl = FALSE
  ),
  did_4core = att_gt(
    yname = "Y", gname = "group", idname = "id", tname = "tp",
    data = panel_data, bstrap = TRUE, biters = 1000,
    pl = TRUE, cores = 4
  ),
  did_8core = att_gt(
    yname = "Y", gname = "group", idname = "id", tname = "tp",
    data = panel_data, bstrap = TRUE, biters = 1000,
    pl = TRUE, cores = 8
  ),
  did_12core = att_gt(
    yname = "Y", gname = "group", idname = "id", tname = "tp",
    data = panel_data, bstrap = TRUE, biters = 1000,
    pl = TRUE, cores = 12
  ),
  iterations = 5,
  check = FALSE,
  memory = FALSE
)
#> Warning: Some expressions had a GC in every iteration; so filtering is disabled.
#> # A tibble: 4 × 6
#>   expression      min   median `itr/sec` mem_alloc `gc/sec`
#>   <bch:expr> <bch:tm> <bch:tm>     <dbl> <bch:byt>    <dbl>
#> 1 did_1core     2.73s    2.78s     0.342        NA     24.2
#> 2 did_4core     2.15s    2.24s     0.449        NA     29.0
#> 3 did_8core     2.07s     2.1s     0.473        NA     30.8
#> 4 did_12core    2.12s    2.18s     0.462        NA     30.6

Created on 2022-06-06 by the reprex package (v2.0.1)