Generates a random panel data set for simulation studies of the fused extended two-way fixed
effects (FETWFE) estimator. The function creates a balanced panel with \(N\) units over \(T\)
time periods, assigns treatment status across \(G\) treated cohorts (with equal marginal
probabilities for treatment and non-treatment), and constructs a design matrix along with the
corresponding outcome. When gen_ints = TRUE the full design matrix is returned (including
interactions between covariates and fixed effects and treatment indicators). When
gen_ints = FALSE the design matrix is generated in a simpler format (with no interactions)
as expected by fetwfe(). Moreover, the covariates are generated according to the
specified distribution: by default, covariates are drawn from a normal distribution;
if distribution = "uniform", they are drawn uniformly from \([-\sqrt{3}, \sqrt{3}]\).
When \(d = 0\) (i.e. no covariates), no covariate-related columns or interactions are generated.
See the simulation studies section of Faletto (2025) for details.
Usage
simulateDataCore(
N,
T,
G = NULL,
d,
sig_eps_sq,
sig_eps_c_sq,
beta,
seed = NULL,
gen_ints = FALSE,
distribution = "gaussian",
guarantee_rank_condition = FALSE,
assignment_type = "marginal",
assignment_coefs = NULL,
R = NULL
)Arguments
- N
Integer. Number of units in the panel.
- T
Integer. Number of time periods.
- G
Integer. Number of treated cohorts (with treatment starting in periods 2 to T).
- d
Integer. Number of time-invariant covariates.
- sig_eps_sq
Numeric. Variance of the idiosyncratic (observation-level) noise.
- sig_eps_c_sq
Numeric. Variance of the unit-level random effects. Must be non-negative;
0is allowed (yields a panel with no unit-level random effects).- beta
Numeric vector. Coefficient vector for data generation. Its required length depends on the value of
gen_ints:If
gen_ints = TRUEandd > 0, the expected length is \(p = G + (T-1) + d + dG + d(T-1) + num\_treats + num\_treats \times d\), where \(num\_treats = T \times G - \frac{G(G+1)}{2}\).If
gen_ints = TRUEandd = 0, the expected length is \(p = G + (T-1) + num\_treats\).If
gen_ints = FALSE, the expected length is \(p = G + (T-1) + d + num\_treats\).
- seed
(Optional) Integer. Seed for reproducibility.
- gen_ints
Logical. If
TRUE, generate the full design matrix with interactions; ifFALSE(the default), generate a design matrix without any interaction terms.- distribution
Character. Distribution to generate covariates. Defaults to
"gaussian". If set to"uniform", covariates are drawn uniformly from \([-\sqrt{3}, \sqrt{3}]\). To obtain a matching ground truth fromgetTes, pass the samedistributionvalue there.- guarantee_rank_condition
(Optional). Logical. If TRUE, the returned data set is guaranteed to have at least
d + 1units per cohort, which is necessary for the final design matrix to have full column rank. Default is FALSE, in which case only>= 1unit per cohort is required – this permits small cohorts and therefore high-dimensional (p > NT) panels, whichfetwfe()fits in its regularized regime (and on which the high-dimensionaldebiasedATT()path can be exercised, using the known data-generating coefficient vector; recovering the truth requires an adequate number of units).- assignment_type
Character. One of
"marginal"(default),"multinomial", or"ordered". Selects the cohort-assignment DGP."marginal"preserves the pre-1.14.0 behavior. The non-marginal types require a non-NULLassignment_coefsargument (typically pulled from aFETWFE_coefsobject built with the matchingassignment_type).- assignment_coefs
Optional list returned by
.gen_assignment_coefs()(an internal helper). Required whenassignment_type != "marginal".- R
Deprecated. The former name for
G; still accepted with a deprecation warning, and will be removed in a future release. UseG.
Value
An object of class "FETWFE_simulated", which is a list containing:
- pdata
A dataframe containing generated data that can be passed to
fetwfe().- X
The design matrix. When
gen_ints = TRUE, \(X\) has \(p\) columns with interactions; whengen_ints = FALSE, \(X\) has no interactions.- y
A numeric vector of length \(N \times T\) containing the generated responses.
- covs
A character vector containing the names of the generated features (if \(d > 0\)), or simply an empty vector (if \(d = 0\))
- time_var
The name of the time variable in pdata
- unit_var
The name of the unit variable in pdata
- treatment
The name of the treatment variable in pdata
- response
The name of the response variable in pdata
- coefs
The coefficient vector \(\beta\) used for data generation.
- first_inds
A vector of indices indicating the first treatment effect for each treated cohort.
- N_UNTREATED
The number of never-treated units.
- assignments
A vector of counts (of length \(G+1\)) indicating how many units fall into the never-treated group and each of the \(G\) treated cohorts.
- indep_counts
Independent cohort assignments (for auxiliary purposes).
- p
The number of columns in the design matrix \(X\).
- N
Number of units.
- T
Number of time periods.
- G
Number of treated cohorts.
- R
Deprecated alias for
G, retained for backward compatibility; populated with the same value. UseG. Will be removed in a future release.- d
Number of covariates.
- sig_eps_sq
The idiosyncratic noise variance.
- sig_eps_c_sq
The unit-level noise variance.
Details
When gen_ints = TRUE, the function constructs the design matrix by first generating
base fixed effects and a long-format covariate matrix (via generateBaseEffects()), then
appending interactions between the covariates and cohort/time fixed effects (via
generateFEInts()) and finally treatment indicator columns and treatment-covariate
interactions (via genTreatVarsSim() and genTreatInts()). When
gen_ints = FALSE, the design matrix consists only of the base fixed effects, covariates,
and treatment indicators.
The argument distribution controls the generation of covariates. For
"gaussian", covariates are drawn from rnorm; for "uniform",
they are drawn from runif on the interval \([-\sqrt{3}, \sqrt{3}]\).
When \(d = 0\) (i.e. no covariates), the function omits any covariate-related columns and their interactions.
References
Faletto, G (2025). Fused Extended Two-Way Fixed Effects for Difference-in-Differences with Staggered Adoptions. arXiv preprint arXiv:2312.05985. https://arxiv.org/abs/2312.05985.