Skip to main content

Fast high dimensional fixed effect estimation following syntax of the fixest R package. Supports OLS, IV and Poisson regression and a range of inference procedures. Additionally, experimentally supports (some of) the regression based new Difference-in-Differences Estimators (Did2s).

Project description

Readme

PyFixest

PyPI - Version PyPI - Python Version PyPI - Downloads image

PyFixest is a Python implementation of the formidable fixest package. The package aims to mimic fixest syntax and functionality as closely as Python allows. For a quick introduction, see the tutorial or take a look at the regression chapter of Arthur Turrell’s book on Coding for Economists.

PyFixest supports

  • OLS and IV Regression
  • Poisson Regression
  • Multiple Estimation Syntax
  • Several Robust and Cluster Robust Variance-Covariance Types
  • Wild Cluster Bootstrap Inference (via wildboottest)
  • Difference-in-Difference Estimators:

Installation

You can install the release version from PyPi by running

pip install pyfixest

or the development version from github by running

pip install git+https://github.com/s3alfisc/pyfixest.git

News

PyFixest 0.13 adds support for the local projections Difference-in-Differences Estimator.

Benchmarks

All benchmarks follow the fixest benchmarks. All non-pyfixest timings are taken from the fixest benchmarks.

Quickstart

You can estimate a linear regression models just as you would in fixest - via feols():

from pyfixest.estimation import feols, fepois
from pyfixest.utils import get_data
from pyfixest.summarize import etable

data = get_data()
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 = feols("Y + Y2 ~X1 | csw0(f1, f2)", data = data, vcov = {'CRV1':'group_id'})
# Print the results
etable([fit.fetch_model(i) for i in range(6)])
Model:  Y~X1
Model:  Y2~X1
Model:  Y~X1|f1
Model:  Y2~X1|f1
Model:  Y~X1|f1+f2
Model:  Y2~X1|f1+f2

                          est1               est2               est3               est4               est5               est6
------------  ----------------  -----------------  -----------------  -----------------  -----------------  -----------------
depvar                       Y                 Y2                  Y                 Y2                  Y                 Y2
-----------------------------------------------------------------------------------------------------------------------------
Intercept     0.919*** (0.121)   1.064*** (0.232)
X1             -1.0*** (0.117)  -1.322*** (0.211)  -0.949*** (0.087)  -1.266*** (0.212)  -0.919*** (0.069)  -1.228*** (0.194)
-----------------------------------------------------------------------------------------------------------------------------
f1                           -                  -                  x                  x                  x                  x
f2                           -                  -                  -                  -                  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

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

You can estimate Poisson Regressions via the fepois() function:

poisson_data = get_data(model = "Fepois")
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.008 |        0.035 |    -0.239 |      0.811 |  -0.076 |    0.060 |
| X2            |     -0.015 |        0.010 |    -1.471 |      0.141 |  -0.035 |    0.005 |
---
Deviance: 1068.836

Last, PyFixest also supports IV estimation via three part formula syntax:

fit_iv = 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 |
---

Project details


Download files

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

Source Distribution

pyfixest-0.13.3.tar.gz (2.0 MB view hashes)

Uploaded Source

Built Distribution

pyfixest-0.13.3-py3-none-any.whl (2.1 MB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page