Skip to content

Repository files navigation

StataFlow

Stata-aligned econometrics for Python, with field-level validation across the documented support surface.

简体中文

CI PyPI version Downloads Python 3.10-3.14 License Typing Stata validation

Installation · Quick Start · Validation · Documentation · Contributing


from stataflow.compat.stata import reghdfe

result = reghdfe(
    df,
    y="lwage",
    x=["exper", "edu"],
    absorb="firm_id year_id",
    vce="cluster",
    cluster="firm_id",
)
result.display()

Why StataFlow

StataFlow is for researchers who want Python workflows without giving up the empirical conventions they rely on in Stata. The project is not a generic statistics library: public capabilities have Stata validation across the documented support surface, backed by synthetic cases, public real-data cases, and field-level comparisons.

The current release covers 14 Stata-style commands.

Features

  • 14 estimation commands in Python: regress, xtreg_fe, areg, reghdfe, ivregress_2sls, ivreghdfe, logit, probit, poisson, ppmlhdfe, did_imputation, eventstudyinteract, csdid, and rdrobust. The exported rdplot companion is a helper and is not counted as an estimation command.
  • Two API layers: a Stata-compatible command layer (stataflow.compat.stata) and a Python-native estimator layer (stataflow.estimators).
  • Command-aware Stata-style output: result.display() prints a complete, adaptive result table with the statistics and diagnostics relevant to each command; notebooks receive the same content as escaped HTML.
  • High-dimensional fixed effects: MAP absorption for large FE designs, multi-FE workflows, singleton handling, individual slopes, and cluster-aware VCE paths.
  • Instrumental variables: 2SLS, GMM2S, LIML, Fuller/k-class, first-stage diagnostics, weak-instrument tests, and overidentification tests.
  • Binary, count, and PPML models: Logit, Probit, Poisson, and PPML-HDFE with robust and clustered covariance estimators.
  • Causal inference: BJS DID imputation, Sun-Abraham event-study interactions, Callaway-Sant'Anna DID, and sharp/fuzzy regression discontinuity.
  • Stata-compatible syntax subsets: factor variables, command-specific analytic-weight support, multiple fixed effects, common VCE choices, and hard rejection of unsupported parameters.
  • Validation-first development: public commands have field-level Stata validation across the documented support surface.

Installation

pip install StataFlow

StataFlow requires Python 3.10 or later. The current release is tested on Python 3.10-3.14. Core dependencies are NumPy, pandas, SciPy, scikit-learn, and PyYAML.

Quick Start

Stata-Compatible API

from stataflow.compat.stata import regress, reghdfe, logit, ivregress_2sls, ppmlhdfe

# OLS with robust standard errors
result = regress(df, y="wage", x=["edu", "exper"], vce="robust")
result.display()

# High-dimensional fixed effects
result = reghdfe(
    df,
    y="wage",
    x=["edu", "exper"],
    absorb="firm_id year_id",
    vce="cluster",
    cluster="industry",
)

# Logit
result = logit(df, y="inlf", x=["nwifeinc", "educ", "exper"])
result.display()

# 2SLS with robust VCE
result = ivregress_2sls(
    df,
    y="lwage",
    x_exog=["educ"],
    x_endog=["exper"],
    instruments=["age", "kidslt6"],
    vce="robust",
)

# PPML with high-dimensional fixed effects
result = ppmlhdfe(
    df,
    y="trade",
    x=["lndist", "contig", "fta"],
    absorb=["exporter", "importer", "year"],
    vce="cluster",
    cluster="exporter",
)

Native Python API

from stataflow import OLS, AbsorbingOLS, Logit

model = OLS(data=df, y="wage", x=["edu", "exper"])
result = model.fit(vce="robust")
result.display()

Working with Results

result.display()                         # Full output with 95% CI
result.display(detail="compact")        # Header, coefficients, core fit
result.display(show_ci=False)           # Hide confidence intervals
text = result.summary(width=100)        # Return the same table as text
html = result.to_html()                 # Escaped HTML for reports/notebooks

Supported Models

Family Available via Estimators and VCE
Linear regress, areg, xtreg_fe, reghdfe OLS with ols, robust (HC1), and command-specific clustering; reghdfe also supports dkraay panel HAC
IV ivregress_2sls, ivreghdfe 2SLS, GMM2S, LIML, Fuller/k-class, first-stage diagnostics, weak-IV tests
Binary / Count logit, probit, poisson MLE with ols, robust, and cluster VCE
PPML + HDFE ppmlhdfe IRLS with fixed effects, offset/exposure, separation checks, eform, and common prediction types
DID did_imputation, csdid, eventstudyinteract BJS imputation, Callaway-Sant'Anna, and Sun-Abraham IW estimators
RD rdrobust Sharp/fuzzy RD, MSE/CER bandwidth selectors, covariates, weights, mass points, and cluster/nncluster VCE

See the Command Support Matrix and Known Issues for exact support boundaries.

Validation

The table below is the estimator-validation snapshot frozen in July 2026; the actual comparison environment was Stata 17. It is the current numerical baseline for the estimator and inference behavior covered by the snapshot. The snapshot reports the coefficient and standard-error comparisons below; display-only result fields introduced in 1.3.0 are outside its scope.

Relative deviation is |Python - Stata| / max(|Stata|, 1e-15).

Family Covered commands Stata 17 comparisons Max coefficient deviation Max SE deviation
Linear / FE regress, areg, xtreg_fe, reghdfe 18/18 2.48e-7 2.25e-7
IV ivregress_2sls, ivreghdfe 5/5 1.16e-8 3.74e-8
Binary / count logit, probit, poisson, ppmlhdfe 12/12 1.33e-7 8.42e-8
DID did_imputation, csdid, eventstudyinteract 2/2 + 1 functional check 8.13e-8 5.13e-8
RD rdrobust 3/3 9.23e-8 2.96e-8
Total 14 public estimation commands 40/40 2.48e-7 2.25e-7

Full local Stata validation checks: 856 passed, 12 skipped. The public, self-contained suite passes 10/10 reproducible validation cases with Stata 17. The values above are stored in evidence-summary.json. The maxima above apply only to the July 2026 release snapshot. Documented numerical differences and paths outside this aggregate scope are listed in Known Issues.

Documentation

Running Tests

# Unit and integration tests
pytest tests/ -v

# Reproducible Stata validation cases (require local Stata 17)
pytest tests/stata_validation/ -v -s

Community

Project Growth

StataFlow GitHub star history through August 2026

License

This project is licensed under the MIT License. See LICENSE for details.

About

Stata-aligned econometrics for Python, with field-level validation across the documented support surface.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

176 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages