This is a Python analysis which implements GiveWell's charity cost-effectiveness models in order to perform uncertainty and sensitivity analysis. Accompany prose can be found at Collectively Exhaustive.
The core libraries relied upon are PyMC3 and SALib.
If you already have the package manager Nix, you should be able to get up and running by:
git clone https://github.com/colehaus/givewell-analysis
cd givewell-analysis
nix-shell
python -c "from test import test; test()"
The overall project structure is as follows:
- Each model (roughly corresponding to each tab in GiveWell's spreadsheet) gets its own file. For example,
cash.py
andnets.py
. - Each such model consists of pure functions which break the model into pieces. The model files also contain model-specific parameters (e.g. "net use adjustment: 0.90") pulled from the spreadsheets.
- The
shared_params.py
file contains parameters which are shared across multiple models. - The
models.py
file pulls all the parameters into a single dictionary, pulls all the models into a single dictionary, and specifies how to weave together the models with the parameters. tree.py
contains helpers for working with the models when regarded as trees of function calls.main.py
performs all the analysis.test.py
is a simple sanity check that the models as implemented reproduce GiveWell's results.