Skip to main content

StataFlow

A Python econometrics toolkit designed to reproduce Stata 17 estimation results with field-level validation.

简体中文

PyPI version Python 3.10+


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 are backed by synthetic cases, public real-data cases, and field-level Stata 17 comparisons.

The current development version is 1.3.0, covering 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 are backed by field-level Stata 17 comparison evidence.

Installation

pip install StataFlow

Python 3.10, 3.11, or 3.12 is required. 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 July 2026 release scope is frozen to the cases summarized below. 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.

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

License

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

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

stataflow-1.3.0.tar.gz (191.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

stataflow-1.3.0-py3-none-any.whl (161.2 kB view details)

Uploaded Python 3

File details

Details for the file stataflow-1.3.0.tar.gz.

File metadata

  • Download URL: stataflow-1.3.0.tar.gz
  • Upload date:
  • Size: 191.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.7

File hashes

Hashes for stataflow-1.3.0.tar.gz
Algorithm Hash digest
SHA256 e10e33cc5272c58a53c7193ec0838964e8f6853a465101785ac0509abca06654
MD5 0441c263afa25b0acd859c274cca7a09
BLAKE2b-256 128da5b2d672e1cece647a95223cb5302f1075c91a1ff82ffb5921c4c2516f9e

See more details on using hashes here.

File details

Details for the file stataflow-1.3.0-py3-none-any.whl.

File metadata

  • Download URL: stataflow-1.3.0-py3-none-any.whl
  • Upload date:
  • Size: 161.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.7

File hashes

Hashes for stataflow-1.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 29e71c4055710b1a07d084ca3b65394ba4a68401201c90166c13ca958937f52d
MD5 3c231b422ad16ca851d7c0bbaab0291d
BLAKE2b-256 b40c4a302c2746f0baed39003a4713d125861893411539b9baadddab2b8b9ced

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page