etwfe_emfx
Compute aggregated marginal effects from ETWFE staggered DiD fits to estimate average treatment effects, with event-study and calendar-time aggregation options.
Instructions
R etwfe::emfx-style aggregated marginal effects for an ETWFE fit. Validation: certified parity evidence. Assumptions: Conditional parallel trends between treated and comparison groups absent treatment; No anticipation of treatment before its onset; Treatment effects may be heterogeneous across cohorts and time (no homogeneity required). Pre-conditions: Panel or repeated cross-section with a unit (or group) identifier and a time identifier; At least one never-treated or not-yet-treated comparison group; Pre-treatment periods to assess parallel trends. Failure modes: Pre-treatment event-study coefficients are jointly non-zero (pre-trend violation) -> Use honest DiD bounds to quantify robustness to trend violations, or condition on covariates; Two-way fixed-effects estimate is contaminated by 'forbidden' comparisons / negative weights -> Use a heterogeneity-robust estimator (Callaway-Sant'Anna, Borusyak et al., Gardner two-stage). Alternatives: sp.callaway_santanna, sp.did, sp.honest_did. Typical minimum N: 100.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Aggregation type. | simple |
| alpha | No | Significance level for confidence intervals. | |
| detail | No | Payload depth: 'minimal' (~150 tokens) for sub-step calls where only the point estimate is needed; 'standard' (~1K tokens) for diagnostics + coefficient table; 'agent' (~2K tokens, default) adds violations / next_steps / suggested_functions so the LLM can plan its next call without another round-trip. | agent |
| result | Yes | Output of :func:`etwfe` or :func:`wooldridge_did`. | |
| as_handle | No | If true, cache the fitted result on the server and return result_id + result_uri alongside the JSON payload so a subsequent tools/call can chain without re-running. | |
| data_path | No | Absolute path or URL to a data file. Supported: .csv / .tsv / .txt (delimited), .parquet / .pq, .feather / .arrow, .xlsx / .xls, .dta (Stata), .json / .jsonl. Schemes: file://, s3://, gs://, https://. | |
| result_id | No | Optional handle to a previously-fitted result (returned by an earlier call when as_handle=true). Tools that operate on a fitted object accept this in place of re-supplying data_path + columns. | |
| weighting | No | Aggregation weights for cohort-level marginal effects. ``'treated'`` uses the number of treated post-period observations, matching R ``etwfe::emfx(type='simple')`` and Stata ``jwdid, estat simple``. ``'cohort'`` preserves the historical StatsPAI cohort-share weighting. | treated |
| data_columns | No | Optional column projection. Parquet/Feather/Stata loaders honour this for fast partial reads. | |
| data_sample_n | No | Optional uniform random subsample size (seed=0, deterministic) — useful on huge panels. | |
| include_leads | No | For ``type='event'`` and ``type='calendar'``, whether to include pre-treatment relative times (``rel_time < 0``) in the output. These coefficients identify pre-trends and are informative for parallel-trends inspection. Default ``False`` for backward compatibility with earlier versions; set ``True`` for full event-study output matching the R ``etwfe::emfx(type='event')`` default. ``rel_time = -1`` is always the reference category and is excluded. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||