PyTwoWay is the Python package associated with the following paper:

How Much Should we Trust Estimates of Firm Effects and Worker Sorting?” by Stéphane Bonhomme, Kerstin Holzheu, Thibaut Lamadon, Elena Manresa, Magne Mogstad, and Bradley Setzler. No. w27368. National Bureau of Economic Research, 2020.

The package provides implementations for a series of estimators for models with two sided heterogeneity:

  1. two way fixed effect estimator as proposed by Abowd, Kramarz, and Margolis

  2. homoskedastic bias correction as in Andrews, et al.

  3. heteroskedastic bias correction as in Kline, Saggio, and Sølvsten

  4. group fixed estimator as in Bonhomme, Lamadon, and Manresa

  5. group correlated random effect as presented in the main paper

If you want to give it a try, you can start an example notebook for the FE estimator here: binder_fe for the CRE estimator here: binder_cre and for the BLM estimator here: binder_blm. These start fully interactive notebooks with simple examples that simulate data and run the estimators.

The code is relatively efficient. Solving large sparse linear models relies on PyAMG. This is the code we use to estimate the different decompositions on US data. Data cleaning is handled by BipartitePandas.

The package provides a Python interface. Installation is handled by pip or Conda (TBD). The source of the package is available on GitHub at PyTwoWay. The online documentation is hosted here.

Quick Start

To install via pip, from the command line run:

pip install pytwoway


Thibaut Lamadon, Assistant Professor in Economics, University of Chicago,

Adam A. Oppenheimer, Research Professional, University of Chicago,


Please use following citation to cite PyTwoWay in academic publications:

Bibtex entry:

  title={How Much Should We Trust Estimates of Firm Effects and Worker Sorting?},
  author={Bonhomme, St{\'e}phane and Holzheu, Kerstin and Lamadon, Thibaut and Manresa, Elena and Mogstad, Magne and Setzler, Bradley},
  institution={National Bureau of Economic Research}


If you want to contribute to the package, the easiest way is to use poetry to set up a local environment:

poetry install
poetry run python -m pytest

To push the package to PiP, increase the version number in the pyproject.toml file and then:

poetry build
poetry publish

Finally to build the package for conda and upload it:

conda skeleton pypi pytwoway
conda config --set anaconda_upload yes
conda-build pytwoway -c tlamadon --output-folder pytwoway

User documentation

Notebook examples