# Block on cluster size and simulate
# Re-use the same model and inquiry for a fair comparison
# Modified cluster design with blocking
matched_cluster_design <-
# M: Model
declare_model(clusters = add_level(N = N_clusters,
cl_size = rep(c(100, 10), c(N/6, N - N/6)),
# ATE = 1
effect = ifelse(cl_size == 100, 0, 3)),
units = add_level(N = cl_size,
u = rnorm(N, sd = .2),
Y_Z_0 = u,
Y_Z_1 = u + effect)) +
# I: Inquiry
declare_inquiry(ATE_i = mean(Y_Z_1 - Y_Z_0)) +
# D: Data Strategy (modified assignment)
declare_assignment(Z = block_and_cluster_ra(clusters = clusters, blocks = cl_size)) +
declare_measurement(Y = reveal_outcomes(Y ~ Z)) +
# A: Answer Strategy (modified estimator with blocks)
declare_estimator(Y ~ Z, inquiry = "ATE_i", clusters = clusters, label = "Blocks")
simulations <- simulate_design(cluster_design, matched_cluster_design, sims = 1000)