Skip to content

calculators

generate_equilibrium_age_distribution(birth_rate=40.0, mortality_rate=20.0)

Create an AgeDistribution object representing an equilibrium for birth and mortality rates.

Parameters:

Name Type Description Default
birth_rate float

(float) The birth rate in units of births/year/1000-women

40.0
mortality_rate float

(float) The mortality rate in units of deaths/year/1000 people

20.0

Returns:

Type Description
AgeDistribution

an AgeDistribution object

Source code in emod_api/demographics/calculators.py
def generate_equilibrium_age_distribution(birth_rate: float = 40.0, mortality_rate: float = 20.0) -> AgeDistribution:
    """
    Create an AgeDistribution object representing an equilibrium for birth and mortality rates.

    Args:
        birth_rate: (float) The birth rate in units of births/year/1000-women
        mortality_rate: (float) The mortality rate in units of deaths/year/1000 people

    Returns:
        an AgeDistribution object
    """
    from emod_api.demographics.age_distribution import AgeDistribution

    # convert to daily rate per person, EMOD units
    birth_rate = (birth_rate / 1000) / 365  # what is actually used below
    mortality_rate = (mortality_rate / 1000) / 365  # what is actually used below

    birth_rate = math.log(1 + birth_rate)
    mortality_rate = -1 * math.log(1 - mortality_rate)

    # It is important for the age distribution computation that the age-spacing be very fine; I've used 30 days here.
    # With coarse spacing, the computation in practice doesn't work as well.
    age_dist_tuple = _computeAgeDist(birth_rate, [i * 30 for i in range(1200)], 1200 * [mortality_rate], 12 * [1.0])

    # The final demographics file, though, can use coarser binning interpolated from the finely-spaced computed distribution.
    age_bins = list(range(16)) + [20 + 5 * i for i in range(14)]
    cum_pop_fraction = np.interp(age_bins, [i / 365 for i in age_dist_tuple[2]], age_dist_tuple[1]).tolist()
    age_bins.extend([90])
    cum_pop_fraction.extend([1.0])
    distribution = AgeDistribution(ages_years=age_bins, cumulative_population_fraction=cum_pop_fraction)
    return distribution