tlo.methods.contraception module
- class Contraception(name=None, resourcefilepath=None, use_healthsystem=True, run_update_contraceptive=True)[source]
Contraception module covering baseline contraception methods use, failure (i.e., pregnancy), Switching contraceptive methods, and discontinuation rates by age. Calibration is done in two stages: (i) A scaling factor on the risk of pregnancy (scaling_factor_on_monthly_risk_of_pregnancy) is used to induce the
correct number of age-specific births initially, given the initial pattern of contraceptive use;
(ii) Trends over time in the risk of starting (time_age_trend_in_initiation) and stopping (time_age_trend_in_stopping) of contraceptives are used to induce the correct trend in the number of births.
Construct a new disease module ready to be included in a simulation.
Initialises an empty parameters dictionary and module-specific random number generator.
- Parameters:
name – the name to use for this module. Defaults to the concrete subclass’ name.
Bases:
tlo.core.Module
PARAMETERS:
Item
Type
Description
Method_Use_In_2010
DATA_FRAME
Proportion of women using each method in 2010, by age.
Pregnancy_NotUsing_In_2010
DATA_FRAME
Probability per year of a women not on contraceptive becoming pregnant, by age.
Pregnancy_NotUsing_HIVeffect
DATA_FRAME
Relative probability of becoming pregnant whilst not using a a contraceptive for HIV-positive women compared to HIV-negative women.
Failure_ByMethod
DATA_FRAME
Probability per month of a women on a contraceptive becoming pregnant, by method.
rr_fail_under25
REAL
The relative risk of becoming pregnant whilst using a contraceptive for woman younger than 25 years compared to older women.
Initiation_ByMethod
DATA_FRAME
Probability per month of a women who is not using any contraceptive method of starting use of a method, by method.
Interventions_Pop
DATA_FRAME
Pop (population scale contraception intervention) intervention multiplier.
Interventions_PPFP
DATA_FRAME
PPFP (post-partum family planning) intervention multiplier.
Initiation_ByAge
DATA_FRAME
The effect of age on the probability of starting use of contraceptive (add one for multiplicative effect).
Initiation_AfterBirth
DATA_FRAME
The probability of a woman starting a contraceptive immidiately after birth, by method.
Discontinuation_ByMethod
DATA_FRAME
The probability per month of discontinuing use of a method, by method.
Discontinuation_ByAge
DATA_FRAME
The effect of age on the probability of discontinuing use of contraceptive (add one for multiplicative effect).
Prob_Switch_From
DATA_FRAME
The probability per month that a women switches from one form of contraceptive to another, conditional that she will not discontinue use of the method.
Prob_Switch_From_And_To
DATA_FRAME
The probability of switching to a new method, by method, conditional that the woman will switch to a new method.
days_between_appts_for_maintenance
LIST
The number of days between successive family planning appointments for women that are maintaining the use of a method (for each method insorted(self.states_that_may_require_HSI_to_maintain_on), i.e.[IUD, implant, injections, other_modern, pill]).
age_specific_fertility_rates
DATA_FRAME
Data table from official source (WPP) for age-specific fertility rates and calendar period.
scaling_factor_on_monthly_risk_of_pregnancy
LIST
Scaling factor (by age-group: 15-19, 20-24, …, 45-49) on the monthly risk of pregnancy and contraceptive failure rate. This value is found through calibration so that, at the beginning of the simulation, the age-specific monthly probability of a woman having a live birth matches the WPP age-specific fertility rate value for the same year.
max_number_of_runs_of_hsi_if_consumable_not_available
INT
The maximum number of time an HSI can run (repeats occur if the consumables are not available).
max_days_delay_between_decision_to_change_method_and_hsi_scheduled
INT
The maximum delay (in days) between the decision for a contraceptive to change and the topen date of the HSI that is scheduled to effect the change (when using the healthsystem).
use_interventions
BOOL
if True: FP interventions (pop & ppfp) are simulated from the date ‘interventions_start_date’, if False: FP interventions (pop & ppfp) are not simulated.
interventions_start_date
DATE
The date since which the FP interventions (pop & ppfp) are implemented, if at all (ie, if use_interventions==True
PROPERTIES:
Item
Type
Description
co_contraception
CATEGORICAL
Current contraceptive method. Possible values are: [IUD, female_sterilization, implant, injections, male_condom, not_using, other_modern, other_traditional, periodic_abstinence, pill, withdrawal, ]
is_pregnant
BOOL
Whether this individual is currently pregnant
date_of_last_pregnancy
DATE
Date that the most recent or current pregnancy began.
co_unintended_preg
BOOL
Whether the most recent or current pregnancy was unintended.
co_date_of_last_fp_appt
DATE
The date of the most recent Family Planning appointment. This is used to determine if a Family Planning appointment is needed to maintain the person on their current contraceptive. If the person is to maintain use of the current contraceptive, they will have an HSI only if the days elapsed since this value exceeds the method-specific parameter days_between_appts_for_maintenance.
Class attributes:
ADDITIONAL_DEPENDENCIES : {‘Labour’, ‘Hiv’}
INIT_DEPENDENCIES : {‘Demography’}
METADATA : {}
OPTIONAL_INIT_DEPENDENCIES : {‘HealthSystem’}
__annotations__ : {}
all_contraception_states : {‘injections’, ‘IUD’, ‘male_condom’, ‘not_using’, ‘implant’, ‘withdrawal’, ‘pill’, ‘other_traditional’, ‘female_sterilization’, ‘periodic_abstinence’, ‘other_modern’}
contraceptives_initiated_with_additional_items : {‘injections’, ‘IUD’, ‘female_sterilization’, ‘implant’, ‘pill’}
Functions (defined or overridden in class Contraception):
- __init__(name=None, resourcefilepath=None, use_healthsystem=True, run_update_contraceptive=True)[source]
Construct a new disease module ready to be included in a simulation.
Initialises an empty parameters dictionary and module-specific random number generator.
- Parameters:
name – the name to use for this module. Defaults to the concrete subclass’ name.
- read_parameters(data_folder)[source]
Import the relevant sheets from the ResourceFile (excel workbook) and declare values for other parameters (CSV ResourceFile).
- pre_initialise_population()[source]
Process parameters before initialising population and simulation
- initialise_simulation(sim)[source]
Schedule the ContraceptionPoll and ContraceptionLoggingEvent
Retrieve the consumables codes for the consumables used
Create second random number generator
Schedule births to occur during the first 9 months of the simulation
- on_birth(mother_id, child_id)[source]
Formally end the pregnancy
Initialise properties for the newborn
- end_pregnancy(person_id)[source]
End the pregnancy. Reset pregnancy status and may initiate a contraceptive method. This is called by on_birth in this module and by Labour/Pregnancy modules for births that do result in live birth.
- select_contraceptive_following_birth(mother_id, mother_age)[source]
Initiation of mother’s contraception after birth.
- get_item_code_for_each_contraceptive()[source]
Get the item_code for each contraceptive and for contraceptive initiation.
- schedule_batch_of_contraceptive_changes(ids, old, new)[source]
Enact the change in contraception, either through editing properties instantaneously or by scheduling HSI. ids: pd.Index of the woman for whom the contraceptive state is changing old: iterable giving the corresponding contraceptive state being switched from new: iterable giving the corresponding contraceptive state being switched to
It is assumed that even with the option self.use_healthsystem=True that switches to certain methods do not require the use of HSI (these are not in states_that_may_require_HSI_to_switch_to).
- do_and_log_individual_contraception_change(woman_id: int, old, new)[source]
Implement and then log a start / stop / switch of contraception.
- schedule_births_for_first_9_months()[source]
Schedule births to occur during the first 9 months of the simulation. This is necessary because at initiation no women are pregnant, so the first births generated endogenously (through pregnancy -> gestation -> labour) occur after 9 months of simulation time. This method examines age-specific fertility rate data and causes there to be the appropriate number of births, scattered uniformly over the first 9 months of the simulation. These are “direct live births” that are not subjected to any of the processes (e.g. risk of loss of pregnancy, or risk of death to mother) represented in the PregnancySupervisor, CareOfWomenDuringPregnancy or Labour. When initialising population ensured person_id=0 is a man, so can safely exclude person_id=0 from choice of direct birth mothers without loss of generality.
- class DirectBirth(module, person_id)[source]
Do birth, with the mother_id set to person_id*(-1) to reflect that this was a DirectBirth.
Create a new event.
Note that just creating an event does not schedule it to happen; that must be done by calling Simulation.schedule_event.
- Parameters:
module – the module that created this event. All subclasses of Event take this as the first argument in their constructor, but may also take further keyword arguments.
priority – a keyword-argument to set the priority (see Priority enum)
Bases:
tlo.events.Event
,tlo.events.IndividualScopeEventMixin
Functions (defined or overridden in class DirectBirth):
- __init__(module, person_id)[source]
Create a new event.
Note that just creating an event does not schedule it to happen; that must be done by calling Simulation.schedule_event.
- Parameters:
module – the module that created this event. All subclasses of Event take this as the first argument in their constructor, but may also take further keyword arguments.
priority – a keyword-argument to set the priority (see Priority enum)
- class ContraceptionPoll(module, run_do_pregnancy=True, run_update_contraceptive=True)[source]
The regular poll (monthly) for the Contraceptive Module: * Determines contraceptive start / stops / switches * Determines the onset of pregnancy
Create a new regular event.
- Parameters:
module – the module that created this event
frequency (pandas.tseries.offsets.DateOffset) – the interval from one occurrence to the next (must be supplied as a keyword argument)
Bases:
tlo.events.RegularEvent
,tlo.events.Event
,tlo.events.PopulationScopeEventMixin
Class attributes:
__annotations__ : {}
Functions (defined or overridden in class ContraceptionPoll):
- __init__(module, run_do_pregnancy=True, run_update_contraceptive=True)[source]
Create a new regular event.
- Parameters:
module – the module that created this event
frequency (pandas.tseries.offsets.DateOffset) – the interval from one occurrence to the next (must be supplied as a keyword argument)
- update_contraceptive()[source]
Determine women that will start, stop or switch contraceptive method.
- initiate(individuals_not_using: Index)[source]
Check all females not using contraception to determine if contraception starts (i.e. category change from ‘not_using’ to something else).
- discontinue_switch_or_continue(individuals_using: Index)[source]
Check all females currently using contraception to determine if they discontinue it, switch to a different one, or keep using the same one.
- pregnancy_for_those_on_contraceptive()[source]
Look across all women who are using a contraception method to determine if they become pregnant (i.e., the method fails).
- class ContraceptionLoggingEvent(module)[source]
Logs state of contraceptive usage in the population at a point in time.
Bases:
tlo.events.RegularEvent
,tlo.events.Event
,tlo.events.PopulationScopeEventMixin
Class attributes:
__annotations__ : {}
Functions (defined or overridden in class ContraceptionLoggingEvent):
- class HSI_Contraception_FamilyPlanningAppt(module, person_id, new_contraceptive)[source]
HSI event for the starting a contraceptive method, maintaining use of a method of a contraceptive, or switching between contraceptives.
Create a new event.
Note that just creating an event does not schedule it to happen; that must be done by calling Simulation.schedule_event.
- Parameters:
module – the module that created this event. All subclasses of Event take this as the first argument in their constructor, but may also take further keyword arguments.
Bases:
tlo.methods.hsi_event.HSI_Event
,tlo.events.IndividualScopeEventMixin
Class attributes:
EXPECTED_APPT_FOOTPRINT : <property object at 0x129030c20>
__annotations__ : {}
Functions (defined or overridden in class HSI_Contraception_FamilyPlanningAppt):
- __init__(module, person_id, new_contraceptive)[source]
Create a new event.
Note that just creating an event does not schedule it to happen; that must be done by calling Simulation.schedule_event.
- Parameters:
module – the module that created this event. All subclasses of Event take this as the first argument in their constructor, but may also take further keyword arguments.
- class StartInterventions(module)[source]
This event is run by Contraception module exactly once when interventions are introduced, or never if interventions are not used. If run, it updates parameters changed to reflect the FP interventions to be used from now on.
Create a new event.
Note that just creating an event does not schedule it to happen; that must be done by calling Simulation.schedule_event.
- Parameters:
module – the module that created this event. All subclasses of Event take this as the first argument in their constructor, but may also take further keyword arguments.
priority – a keyword-argument to set the priority (see Priority enum)
Bases:
tlo.events.Event
,tlo.events.PopulationScopeEventMixin
Class attributes:
__annotations__ : {}
Functions (defined or overridden in class StartInterventions):
- __init__(module)[source]
Create a new event.
Note that just creating an event does not schedule it to happen; that must be done by calling Simulation.schedule_event.
- Parameters:
module – the module that created this event. All subclasses of Event take this as the first argument in their constructor, but may also take further keyword arguments.
priority – a keyword-argument to set the priority (see Priority enum)
- class SimplifiedPregnancyAndLabour(*args)[source]
Simplified module to replace Labour, ‘PregnancySupervisor` and other associated module, for use in testing/calibrating the Contraception Module. The module calls itself Labour and provides the method set_date_of_labour, which is called by the Contraception Module at the onset of pregnancy. It schedules an event for the end of the pregnancy (approximately 9 months later) which may or may not result in a live birth.
Construct a new disease module ready to be included in a simulation.
Initialises an empty parameters dictionary and module-specific random number generator.
- Parameters:
name – the name to use for this module. Defaults to the concrete subclass’ name.
Bases:
tlo.core.Module
PARAMETERS:
Item
Type
Description
prob_live_birth
REAL
Probability that a pregnancy results in a live birth.
PROPERTIES:
Item
Type
Description
la_currently_in_labour
BOOL
whether this woman is currently in labour
la_has_had_hysterectomy
BOOL
whether this woman has had a hysterectomy as treatment for a complication of labour, and therefore is unable to conceive
la_is_postpartum
BOOL
Whether a woman is in the postpartum period, from delivery until day +42 (6 weeks)
ps_ectopic_pregnancy
CATEGORICAL
Whether a woman is experiencing ectopic pregnancy and its current state. Possible values are: [none, not_ruptured, ruptured, ]
Class attributes:
ALTERNATIVE_TO : {‘Labour’}
INIT_DEPENDENCIES : {‘Contraception’}
METADATA : {}
__annotations__ : {}
Functions (defined or overridden in class SimplifiedPregnancyAndLabour):
- __init__(*args)[source]
Construct a new disease module ready to be included in a simulation.
Initialises an empty parameters dictionary and module-specific random number generator.
- Parameters:
name – the name to use for this module. Defaults to the concrete subclass’ name.
- read_parameters(*args)[source]
Read parameter values from file, if required.
Must be implemented by subclasses.
- Parameters:
data_folder – path of a folder supplied to the Simulation containing data files. Typically, modules would read a particular file within here.
- initialise_population(population)[source]
Set our property values for the initial population.
This method is called by the simulation when creating the initial population, and is responsible for assigning initial values, for every individual, of those properties ‘owned’ by this module, i.e. those declared in its PROPERTIES dictionary.
By default, all
Property``s in ``self.PROPERTIES
will have their columns in the population dataframe set to the default value.Modules that wish to implement this behaviour do not need to implement this method, it will be inherited automatically. Modules that wish to perform additional steps during the initialise_population stage should reimplement this method and call
`python super().initialise_population(population=population) `
at the beginning of the method, then proceed with their additional steps. Modules that do not wish to inherit this default behaviour should re-implement initialise_population without the call to
super()
above.TODO: We probably need to declare somehow which properties we ‘read’ here, so the simulation knows what order to initialise modules in!
- Parameters:
population – The population of individuals in the simulation.
- initialise_simulation(*args)[source]
Get ready for simulation start.
Must be implemented by subclasses.
This method is called just before the main simulation loop begins, and after all modules have read their parameters and the initial population has been created. It is a good place to add initial events to the event queue.
- on_birth(mother_id, child_id)[source]
Initialise our properties for a newborn individual.
Must be implemented by subclasses.
This is called by the simulation whenever a new person is born.
- Parameters:
mother_id – the person id for the mother of this child (can be -1 if the mother is not identified).
child_id – the person id of new child
- class EndOfPregnancyEvent(module, person_id, live_birth)[source]
This event signals the end of the pregnancy, which may or may not result in a live-birth
Create a new event.
Note that just creating an event does not schedule it to happen; that must be done by calling Simulation.schedule_event.
- Parameters:
module – the module that created this event. All subclasses of Event take this as the first argument in their constructor, but may also take further keyword arguments.
priority – a keyword-argument to set the priority (see Priority enum)
Bases:
tlo.events.Event
,tlo.events.IndividualScopeEventMixin
Functions (defined or overridden in class EndOfPregnancyEvent):
- __init__(module, person_id, live_birth)[source]
Create a new event.
Note that just creating an event does not schedule it to happen; that must be done by calling Simulation.schedule_event.
- Parameters:
module – the module that created this event. All subclasses of Event take this as the first argument in their constructor, but may also take further keyword arguments.
priority – a keyword-argument to set the priority (see Priority enum)