Stock-and-flow Model of Bednet Distribution written in Python/PyMC
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.gitignore
README
bednets.py
data.py
emp_priors.py
explore.py
fit.sh
graphics.py
run_all.py
settings.py

README

Introduction
------------

Malaria remains significant cause of morbidity and mortality,
particularly in children and in Africa.  A key strategy for reducing
the burden of malaria has been the mass distribution of Insecticide
Treated Nets (ITNs) and particularly Long Lasting Insecticide Treated
Nets (LLINs).  Roll Back Malaria has set a target goal of having at
least one ITN per household in 80% of households in malaria endemic
regions by 2010.  There are limited sources of data to monitor the
coverage scale-up: periodic but infrequent household surveys,
manufacturing/administrative data about total number of nets not
coverage, small scale studies of particular additional quantities of
interest, for example net retention over time.


Compartmental Model
-------------------

For a particular country, c:

W[t] := number of nets in warehouses at time t
H1[t] := number of 1-year-old nets in households at time t
H2[t] := number of 2-year-old nets in households at time t
H3[t] := number of 3-year-old nets in households at time t
H4[t] := number of 4-year-old nets in households at time t

m[t] := number of nets manufactured during time period t
d[t] := number of nets distributed during time period t
l1[t] := number of 1-year-old nets lost or discarded during time period t
l2[t] := number of 2-year-old nets lost or discarded during time period t
l3[t] := number of 3-year-old nets lost or discarded during time period t

The compartments are connected as follows:

  m  +---+  d  +----+ 1-l1 +----+ 1-l2 +----+ 1-l3 +----+ 1
---->| W |---->| H1 |----->| H2 |----->| H3 |----->| H4 |--->
     +---+     +----+      +----+      +----+      +----+
                  |         |           |
                  | l1      | l2        | l3
                  +---->    +---->      +---->

The primary quantity of interest in this investigation is the fraction
of households with at least one net.  This is modeled as a two
parameter non-linear transformation of the LLINs per capita:

llin_coverage[t] = 1 - zeta - (1-zeta) * exp(-eta * H[t] / population[t])

To also quickly incorporate information about non-LLIN ITNs, there is
also a parameter for non-LLIN ITNs:

H'[t] = number of non-LLIN ITNs in households at time t

and the primary quantity of interest is then:

itn_coverage[t] = 1 - zeta - (1-zeta) * exp(-eta * (H[t] + H'[t]) / population)
        


Model parameters
----------------

p_l := the probability a net is lost during a time period
d[t] := the number of nets distributed during time period t (t = 0, ..., 9)
m[t] := the number of nets manufactured during time period t (t = 0, ..., 9)
eta
zeta
H'[t]

Model Dynamics
--------------

W[t+1] = W[t] + m[t] - d[t];  W[0] = 0
H1[t+1] = d[t];               H1[0] = 0
H2[t+1] = H1[t] - l1[t];      H2[0] = 0
H3[t+1] = H2[t] - l2[t];      H3[0] = 0
H4[t+1] = H3[t] - l3[t];      H4[0] = 0
l1[t] = H1[t] * p_l**.5
l2[t] = H2[t] * p_l
l3[t] = H3[t] * p_l


Assumptions in Dynamics
-----------------------

The model dynamics make two major assumptions:

1. Every 0- to 3-year-old net is lost/discarded independently
   at random with the same probability during the year.

2. Every 4-year-old net is discarded during the year.


Statistical Model
-----------------

There are 7 types of data that will drive parameter estimation:

Manufacturing Data - Information on the number of nets procured by
each country for distribution;  initial model::

    log(m_i) ~ log(m[t_i]) + N(0, s_m^2)


Administrative Distribution Data - Information on the number of nets
distributed through the public sector supply chain in each country;
initial model::

    log(d1_i) ~ log(d[t_i]) + e_d + N(0, s_d^2)


Household Survey Data - Information from DHS, MICS, and MIS where
head-of-household reports number of nets and time when each net was
obtained;  initial model for total number of nets::

    N_i ~ H[t_i] + N(0, s_{N_i}^2)
        (here t_i is the year of the survey used to compute N_i)

initial model for number of nets obtained during a particular year::

    d2_i ~ d(t^e_i) * (1 - p_l)^{t^s_i - t^e_i - .5} + N(0, s_{d2_i}^2)
        (here t^s_i is the year of the survey, and t^e_i is the year
        of the estimate)


Net Retention Data - Information from studies on how many nets were
still in households a certain amount of time after they were
distributed::

    r_i ~ (1 - p_l)^{T_i} + N(0, s_r^2)

        (where r_i := fraction retained and T_i := follow up time for
        the study)


Household Size Data - Information from household studies on how many
people live in a household::

    household_size[i] ~ N(mu_household_size, s_{household_size[i]}^2
                          + s_household_size^2)

then household size for the country under consideration is modelled as
a latent variable that is constant over time, drawn from the same distribution::

    household_size ~ N(mu_household_size, s_household_size^2)


llin and itn coverage data is also incorporated::

    llin_coverage_i ~ llin_coverage[t_i] + N(0, s_{llin_coverage_i}^2)
    itn_coverage_i ~ itn_coverage[t_i] + N(0, s_{itn_coverage_i}^2)

Priors
------

logit(p_l) ~ Normal(logit(.05), tau=1)
s_r ~ Gamma(20, 20/.15)
s_m ~ Gamma(20, 20/.05)

s_d ~ Normal with mean and standard from empirical Bayes approach (described below)
e_d ~ Normal with mean and standard from empirical Bayes approach (described below) 

d[t] ~ Lognormal(log(.001*population), 1)
m[t] ~ Lognormal(log(.001*population), 1)

W_0 ~ Lognormal(log(.0001*population[0]), 11.)
H_0 ~ Lognormal(log(.0001*population[0]), 11.)

H'[t] ~ Lognormal(log(.001*population), .25^2)

mu_household_size ~ Gamma(1, 1/5)
s_household_size ~ Gamma(20, 20/.05)

log(W[t+1]/W[t]) ~ Normal(0, 1^2)
log(H[t+1]/H[t]) ~ Normal(0, 1^2)
log(H'[t+1]/H'[t]) ~ Normal(0, .5^2)
log(nd[t+1]/nd[t]) ~ Normal(0, 1.^2)

log(nd[t] / max_{t' < t} nd[t'])^- ~ Normal(0, .1^2)

W[t], H[t] >= 0



Empirical Bayes Priors
----------------------

Instead of just making up priors for the systematic error and sampling
error in the administrative distribution data, we will use the
time-country data where both administrative and survey data are
available.  For this we use the same model as above, but taking the
survey data as "truth":

    log(d1_i) ~ log(d2_i) + e_d + N(0, s_d^2)

To complete this model, we use uninformative hyper-priors on e_d and s_d:
    s_d ~ Gamma(1., 1./.05)
    e_d ~ Normal(0., 1./.5**2)





Additional Information
----------------------

Descriptions of the household surveys:
  * http://www.rollbackmalaria.org/partnership/wg/wg_monitoring/docs/GuidelinesForCorePopulationFINAL9-20_Malaria.pdf

Different Survey Types:
  * http://www.childinfo.org/malaria.html
  * http://www.measuredhs.com/topics/malaria/start.cfm

Paper: Thomas P Eisele, Kate Macintyre, Josh Yukich, and Tewolde
Ghebremeskel, Interpreting household survey data intended to measure
insecticide-treated bednet coverage: results from two surveys in
Eritrea
  * http://www.pubmedcentral.nih.gov/articlerender.fcgi?artid=1501030

ITN Manufacturers:
  * PermaNet - http://www.vestergaard-frandsen.com/permanet.htm
  * Olyset Net - http://www.olyset.net/
  * Net Protect - http://www.insectcontrol.net/netprotect/index.php
  * Interceptor - http://www.basfpublichealth.com/products/interceptor.html
  * Duranet - http://duranetmosquitonet.com/

ITN Info:
  * http://www.cdc.gov/malaria/control_prevention/vector_control.htm#itn
  * http://en.wikipedia.org/wiki/Pyrethroid

Supply Chain Software
  * Review of 4 free systems - http://www.rhsupplies.org/fileadmin/user_upload/SSWG/RHSC-Users_Guide_R14_Final.pdf - map of countries using software on page 47
  * RapidSMS - http://www.net4nets.net/pdf/63_Million_Bednets_Distributed_with_Rapid_SMS.pdf
  * RapidSMS Code - http://github.com/rapidsms/rapidsms/tree/master