
Security News
Meet Socket at Black Hat and DEF CON 2025 in Las Vegas
Meet Socket at Black Hat & DEF CON 2025 for 1:1s, insider security talks at Allegiant Stadium, and a private dinner with top minds in software supply chain security.
Fast high dimensional fixed effect estimation following syntax of the fixest R package.
PyFixest
is a Python implementation of the formidable fixest package for fast high-dimensional fixed effects regression.
The package aims to mimic fixest
syntax and functionality as closely as Python allows: if you know fixest
well, the goal is that you won't have to read the docs to get started! In particular, this means that all of fixest's
defaults are mirrored by PyFixest
.
Nevertheless, for a quick introduction, you can take a look at the documentation or the regression chapter of Arthur Turrell's book on Coding for Economists.
For questions on PyFixest
, head on over to our github discussions, or (more informally) join our Discord server.
If you enjoy using PyFixest
, please consider donating to GiveDirectly and dedicating your donation to pyfixest.dev@gmail.com
.
You can also leave a message through the donation form - your support and encouragement mean a lot to the developers!
Did2s
")
estimatorYou can install the release version from PyPI
by running
# inside an active virtual environment
python -m pip install pyfixest
or the development version from github by running
python -m pip install git+https://github.com/py-econometrics/pyfixest
For visualization features using the lets-plot backend, install the optional dependency:
python -m pip install pyfixest[plots]
Note that matplotlib is included by default, so you can always use the matplotlib backend for plotting even without installing the optional lets-plot dependency.
All benchmarks follow the fixest
benchmarks.
All non-pyfixest timings are taken from the fixest
benchmarks.
import pyfixest as pf
data = pf.get_data()
pf.feols("Y ~ X1 | f1 + f2", data=data).summary()
###
Estimation: OLS
Dep. var.: Y, Fixed effects: f1+f2
Inference: CRV1
Observations: 997
| Coefficient | Estimate | Std. Error | t value | Pr(>|t|) | 2.5% | 97.5% |
|:--------------|-----------:|-------------:|----------:|-----------:|-------:|--------:|
| X1 | -0.919 | 0.065 | -14.057 | 0.000 | -1.053 | -0.786 |
---
RMSE: 1.441 R2: 0.609 R2 Within: 0.2
You can estimate multiple models at once by using multiple estimation syntax:
# OLS Estimation: estimate multiple models at once
fit = pf.feols("Y + Y2 ~X1 | csw0(f1, f2)", data = data, vcov = {'CRV1':'group_id'})
# Print the results
fit.etable()
est1 est2 est3 est4 est5 est6
------------ ----------------- ----------------- ----------------- ----------------- ----------------- -----------------
depvar Y Y2 Y Y2 Y Y2
------------------------------------------------------------------------------------------------------------------------------
Intercept 0.919*** (0.121) 1.064*** (0.232)
X1 -1.000*** (0.117) -1.322*** (0.211) -0.949*** (0.087) -1.266*** (0.212) -0.919*** (0.069) -1.228*** (0.194)
------------------------------------------------------------------------------------------------------------------------------
f2 - - - - x x
f1 - - x x x x
------------------------------------------------------------------------------------------------------------------------------
R2 0.123 0.037 0.437 0.115 0.609 0.168
S.E. type by: group_id by: group_id by: group_id by: group_id by: group_id by: group_id
Observations 998 999 997 998 997 998
------------------------------------------------------------------------------------------------------------------------------
Significance levels: * p < 0.05, ** p < 0.01, *** p < 0.001
Format of coefficient cell:
Coefficient (Std. Error)
Standard Errors can be adjusted after estimation, "on-the-fly":
fit1 = fit.fetch_model(0)
fit1.vcov("hetero").summary()
Model: Y~X1
###
Estimation: OLS
Dep. var.: Y
Inference: hetero
Observations: 998
| Coefficient | Estimate | Std. Error | t value | Pr(>|t|) | 2.5% | 97.5% |
|:--------------|-----------:|-------------:|----------:|-----------:|-------:|--------:|
| Intercept | 0.919 | 0.112 | 8.223 | 0.000 | 0.699 | 1.138 |
| X1 | -1.000 | 0.082 | -12.134 | 0.000 | -1.162 | -0.838 |
---
RMSE: 2.158 R2: 0.123
fepois()
You can estimate Poisson Regressions via the fepois()
function:
poisson_data = pf.get_data(model = "Fepois")
pf.fepois("Y ~ X1 + X2 | f1 + f2", data = poisson_data).summary()
###
Estimation: Poisson
Dep. var.: Y, Fixed effects: f1+f2
Inference: CRV1
Observations: 997
| Coefficient | Estimate | Std. Error | t value | Pr(>|t|) | 2.5% | 97.5% |
|:--------------|-----------:|-------------:|----------:|-----------:|-------:|--------:|
| X1 | -0.007 | 0.035 | -0.190 | 0.850 | -0.075 | 0.062 |
| X2 | -0.015 | 0.010 | -1.449 | 0.147 | -0.035 | 0.005 |
---
Deviance: 1068.169
Last, PyFixest
also supports IV estimation via three part formula
syntax:
fit_iv = pf.feols("Y ~ 1 | f1 | X1 ~ Z1", data = data)
fit_iv.summary()
###
Estimation: IV
Dep. var.: Y, Fixed effects: f1
Inference: CRV1
Observations: 997
| Coefficient | Estimate | Std. Error | t value | Pr(>|t|) | 2.5% | 97.5% |
|:--------------|-----------:|-------------:|----------:|-----------:|-------:|--------:|
| X1 | -1.025 | 0.115 | -8.930 | 0.000 | -1.259 | -0.790 |
---
pf.quantreg
fit_qr = pf.quantreg("Y ~ X1 + X2", data = data, quantile = 0.5)
Thanks for showing interest in contributing to pyfixest
! We appreciate all
contributions and constructive feedback, whether that be reporting bugs, requesting
new features, or suggesting improvements to documentation.
If you'd like to get involved, but are not yet sure how, please feel free to send us an email. Some familiarity with
either Python or econometrics will help, but you really don't need to be a numpy
core developer or have published in Econometrica =) We'd be more than happy to invest time to help you get started!
Thanks goes to these wonderful people:
This project follows the all-contributors specification. Contributions of any kind welcome!
We thank all institutions that have funded or supported work on PyFixest!
If you want to cite PyFixest, you can use the following BibTeX entry:
@software{pyfixest,
author = {{The PyFixest Authors}},
title = {{pyfixest: Fast high-dimensional fixed effect estimation in Python}},
year = {2025},
url = {https://github.com/py-econometrics/pyfixest}
}
FAQs
Fast high dimensional fixed effect estimation following syntax of the fixest R package.
We found that pyfixest demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Meet Socket at Black Hat & DEF CON 2025 for 1:1s, insider security talks at Allegiant Stadium, and a private dinner with top minds in software supply chain security.
Security News
CAI is a new open source AI framework that automates penetration testing tasks like scanning and exploitation up to 3,600× faster than humans.
Security News
Deno 2.4 brings back bundling, improves dependency updates and telemetry, and makes the runtime more practical for real-world JavaScript projects.