StataFlow
A Python econometrics toolkit designed to reproduce Stata 17 estimation results with field-level validation.
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, andrdrobust. The exportedrdplotcompanion 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
- User Guide (中文)
- Cookbook (中文)
- Examples — nine deterministic demo scripts covering all 14 public commands; no network or local Stata required
- Validation Evidence (JSON)
- Validation Evidence (readable)
- Changelog
Running Tests
# Unit and integration tests
pytest tests/ -v
# Reproducible Stata validation cases (require local Stata 17)
pytest tests/stata_validation/ -v -s
Community
- Contributing Guide — development workflow, testing requirements, and PR checks
- Security Policy — supported versions and private vulnerability reporting
- Code of Conduct
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e10e33cc5272c58a53c7193ec0838964e8f6853a465101785ac0509abca06654
|
|
| MD5 |
0441c263afa25b0acd859c274cca7a09
|
|
| BLAKE2b-256 |
128da5b2d672e1cece647a95223cb5302f1075c91a1ff82ffb5921c4c2516f9e
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
29e71c4055710b1a07d084ca3b65394ba4a68401201c90166c13ca958937f52d
|
|
| MD5 |
3c231b422ad16ca851d7c0bbaab0291d
|
|
| BLAKE2b-256 |
b40c4a302c2746f0baed39003a4713d125861893411539b9baadddab2b8b9ced
|