moderndid.gen_cont_did_data#

moderndid.gen_cont_did_data(n: int = 500, num_time_periods: int = 4, num_groups: int | None = None, p_group: list | None = None, p_untreated: float | None = None, dose_linear_effect: float = 0.5, dose_quadratic_effect: float = 0, seed: int = 42) DataFrame[source]#

Simulate panel data for difference-in-differences with continuous treatment.

Parameters:
nint, default=500

Number of cross-sectional units.

num_time_periodsint, default=4

Number of time periods.

num_groupsint, optional

Number of timing groups. Defaults to num_time_periods. Groups consist of a never-treated group (G=0) and groups that become treated in periods 2, 3, …, num_time_periods.

p_grouplist, optional

Probabilities for each treated group. Defaults to equal probabilities.

p_untreatedfloat, optional

Probability of being in the never-treated group. Defaults to 1/num_groups.

dose_linear_effectfloat, default=0.5

True linear effect of treatment dose on the outcome.

dose_quadratic_effectfloat, default=0

True quadratic effect of treatment dose on the outcome.

seedint, default=42

Random seed for reproducibility.

Returns:
polars.DataFrame

A balanced panel DataFrame with columns:

  • id: Unit identifier

  • time_period: Time period (1, 2, …, num_time_periods)

  • Y: Outcome variable

  • G: Timing group (0 for never-treated, or period when treatment starts)

  • D: Treatment dose (0 for untreated unit-periods, positive otherwise)