Quantitative models offer a superior approach in determining which interventions to support. However, naive cost-effectiveness estimates have big problems. In particular:
- They don’t give stronger consideration to more robust estimates.
- They don’t always account for all relevant factors.
This is an implementation of Michael Dickens' attempt to buid a quantitative model for cause selection which does not have these limitations.
The model makes estimates by using expected-value calculations to produce probability distributions of utility values. It then uses these estimates as evidence to update a prior over the effectiveness of different interventions. Treating estimates as evidence updating a prior means that interventions with more robust evidence of effectiveness have better posteriors.
This app is deployed at http://mdickens.me/causepri-app/.
You can add new models by editing this repo. We're very happy to help you out with that.
This version was implemented by Michael Dickens and Buck Shlegeris.
This needs Ruby and stuff. If you don't have a Ruby environment (with bundle and gems and stuff), get that. Then run:
bundle install
to install the dependencies.
You probably need to go to the quantitative_model
directory and run make
to compile the C++ program.
Then run it with
bundle exec ruby server.rb 8080
and it should be running on port 8080.
You can run the C++ backend independently of the frontend by calling
./a.out inputs.txt
inputs.txt
contains the inputs needed for the backend model. Right now it's missing a lot of inputs but you can add them if you want to use them.
To add calculations for a new intervention, you'll need to modify quantitative_model/QuantitativeModel.cpp
.
- Add a function to estimate the expected value of the intervention. Look at
targeted_values_spreading_estimate(Table& t)
or any of the other estimate functions to see how expected value estimates work. They accessDistribution
objects stored in the tablet
.Distribution
objects support addition, multiplication by other distributions and by scalars, and reciprocals (via.reciprocal()
). - In
main
, call your new function and store the result in aDistribution
variable. You may then callprint_results
on the variable (look at howprint_results
is used for the other estimates inmain
).