Beispiel #1
0
def Legrand_Ebola_SEIHFR(param=None):
    '''
    The Legrand Ebola model with 6 compartments that includes the
    H = hospitalization and F = funeral state. Note that because this
    is an non-autonomous system, there are in fact a total of 7 states
    after conversion.  The set of equations that describes the model are

    .. math::
        \\frac{dS}{dt} &= -(\\beta_{I}SI + \\beta_{H}SH + \\beta_{F}SF) \\\\
        \\frac{dE}{dt} &= (\\beta_{I}SI + \\beta_{H}SH + \\beta_{F}SF) - \\alpha E \\\\
        \\frac{dI}{dt} &= \\alpha E - (\\gamma_{H} \\theta_{1} + \\gamma_{I}(1-\\theta_{1})(1-\\delta_{1}) + \gamma_{D}(1-\\theta_{1})\\delta_{1})I \\\\
        \\frac{dH}{dt} &= \\gamma_{H}\\theta_{1}I - (\\gamma_{DH}\\delta_{2} + \\gamma_{IH}(1-\\delta_{2}))H \\\\
        \\frac{dF}{dt} &= \\gamma_{D}(1-\\theta_{1})\\delta_{1}I + \\gamma_{DH}\\delta_{2}H - \\gamma_{F}F \\\\
        \\frac{dR}{dt} &= \\gamma_{I}(1-\\theta_{1})(1-\\delta_{1})I + \\gamma_{IH}(1-\\delta_{2})H + \\gamma_{F}F.

    References
    ----------
    .. [1] Understanding the dynamics of Ebola epidemics,
           Legrand J. et al. Epidemiology and Infection,
           Volume 135, Issue 4, pg 610-621, 2007

    Examples
    --------
    >>> x0 = [1.0, 3.0/200000.0, 0.0, 0.0, 0.0, 0.0, 0.0]
    >>> t = numpy.linspace(0, 25, 100)
    >>> ode = common_models.Legrand_Ebola_SEIHFR([('beta_I',0.588),('beta_H',0.794),('beta_F',7.653),('omega_I',10.0/7.0),('omegaD',9.6/7.0),('omega_H',5.0/7.0),('omega_F',2.0/7.0),('alphaInv',7.0/7.0),('delta',0.81),('theta',0.80),('kappa',300.0),('interventionTime',7.0)]).setInitialValue(x0,t[0])
    >>> solution = ode.integrate(t[1::])
    >>> ode.plot()

    '''

    # define our states
    state = ['S', 'E', 'I', 'H', 'F', 'R', 'tau']
    # and initial parameters
    params = ['beta_I', 'beta_H', 'beta_F',
              'omega_I', 'omega_D', 'omega_H', 'omega_F',
              'alphaInv', 'delta', 'theta',
              'kappa', 'interventionTime']

    # we now construct a list of the derived parameters
    # which has 2 item
    # name
    # equation
    derivedParamList = [
        ('gamma_I', '1/omega_I'),
        ('gamma_D', '1/omega_D'),
        ('gamma_H', '1/omega_H'),
        ('gamma_F', '1/omega_F'),
        ('alpha', '1/alphaInv'),
        ('gamma_IH', '1/((1/gamma_I) - (1/gamma_H))'),
        ('gamma_DH', '1/((1/gamma_D) - (1/gamma_H))'),
        ('delta_1', 'delta * gamma_I / (delta * gamma_I + (1 - delta) * gamma_D)'),
        ('delta_2', 'delta * gamma_IH / (delta * gamma_IH + (1 - delta) * gamma_DH)'),
        ('theta_A', 'theta * (gamma_I * (1 - delta_1) + gamma_D * delta_1)'),
        ('theta_1', 'theta_A/ (theta_A +  (1 - theta) * gamma_H)'),
        ('beta_H_Time', 'beta_H * (1 - (1/ (1+exp(-kappa*(tau-interventionTime)))))'),
        ('beta_F_Time', 'beta_F * (1 - (1/ (1+exp(-kappa*(tau-interventionTime)))))')
        ]

    # alternatively, we can do it on the operate ode model
    ode = OperateOdeModel(state, params)
    # add the derived parameter
    ode.setDerivedParamList(derivedParamList)

    # define the set of transitions
    # name of origin state
    # name of target state
    # equation
    # type of equation, which is a transition between two state in this case

    transitionList = [
        Transition(origState='S', destState='E',
                   equation='(beta_I * S * I + beta_H_Time * S * H + beta_F_Time * S * F)',
                   transitionType=TransitionType.T),
        Transition(origState='E', destState='I',
                   equation='alpha * E',
                   transitionType=TransitionType.T),
        Transition(origState='I', destState='H',
                   equation='gamma_H * theta_1 * I',
                   transitionType=TransitionType.T),
        Transition(origState='I', destState='F',
                   equation='gamma_D * (1 - theta_1) * delta_1 * I',
                   transitionType=TransitionType.T),
        Transition(origState='I', destState='R',
                   equation='gamma_I * (1 - theta_1) * (1 - delta_1) * I',
                   transitionType=TransitionType.T),
        Transition(origState='H', destState='F',
                   equation='gamma_DH * delta_2 * H',
                   transitionType=TransitionType.T),
        Transition(origState='H', destState='R',
                   equation='gamma_IH * (1 - delta_2) * H',
                   transitionType=TransitionType.T),
        Transition(origState='F', destState='R',
                   equation='gamma_F * F',
                   transitionType=TransitionType.T)
        ]
    #print transitionList
    bdList = [Transition(origState='tau', equation='1',
                         transitionType=TransitionType.B)]

    # see how we can insert the transitions later, after initializing the ode object
    # this is not the preferred choice though
    ode.setTransitionList(transitionList)
    ode.setBirthDeathList(bdList)
    # set return, depending on whether we have input the parameters
    if param is None:
        return ode
    else:
        ode.setParameters(param)
        return ode
def Legrand_Ebola_SEIHFR(param=None):
    '''
    The Legrand Ebola model with 6 compartments that includes the
    H = hospitalization and F = funeral state. Note that because this
    is an non-autonomous system, there are in fact a total of 7 states
    after conversion.  The set of equations that describes the model are

    .. math::
        \\frac{dS}{dt} &= -(\\beta_{I}SI + \\beta_{H}SH + \\beta_{F}SF) \\\\
        \\frac{dE}{dt} &= (\\beta_{I}SI + \\beta_{H}SH + \\beta_{F}SF) - \\alpha E \\\\
        \\frac{dI}{dt} &= \\alpha E - (\\gamma_{H} \\theta_{1} + \\gamma_{I}(1-\\theta_{1})(1-\\delta_{1}) + \gamma_{D}(1-\\theta_{1})\\delta_{1})I \\\\
        \\frac{dH}{dt} &= \\gamma_{H}\\theta_{1}I - (\\gamma_{DH}\\delta_{2} + \\gamma_{IH}(1-\\delta_{2}))H \\\\
        \\frac{dF}{dt} &= \\gamma_{D}(1-\\theta_{1})\\delta_{1}I + \\gamma_{DH}\\delta_{2}H - \\gamma_{F}F \\\\
        \\frac{dR}{dt} &= \\gamma_{I}(1-\\theta_{1})(1-\\delta_{1})I + \\gamma_{IH}(1-\\delta_{2})H + \\gamma_{F}F.

    References
    ----------
    .. [1] Understanding the dynamics of Ebola epidemics,
           Legrand J. et al. Epidemiology and Infection,
           Volume 135, Issue 4, pg 610-621, 2007

    Examples
    --------
    >>> x0 = [1.0, 3.0/200000.0, 0.0, 0.0, 0.0, 0.0, 0.0]
    >>> t = numpy.linspace(0, 25, 100)
    >>> ode = common_models.Legrand_Ebola_SEIHFR([('beta_I',0.588),('beta_H',0.794),('beta_F',7.653),('omega_I',10.0/7.0),('omega_D',9.6/7.0),('omega_H',5.0/7.0),('omega_F',2.0/7.0),('alphaInv',7.0/7.0),('delta',0.81),('theta',0.80),('kappa',300.0),('interventionTime',7.0)]).setInitialValue(x0,t[0])
    >>> solution = ode.integrate(t[1::])
    >>> ode.plot()

    '''

    # define our states
    state = ['S', 'E', 'I', 'H', 'F', 'R', 'tau']
    # and initial parameters
    params = ['beta_I', 'beta_H', 'beta_F',
              'omega_I', 'omega_D', 'omega_H', 'omega_F',
              'alphaInv', 'delta', 'theta',
              'kappa', 'interventionTime']

    # we now construct a list of the derived parameters
    # which has 2 item
    # name
    # equation
    derivedParamList = [
        ('gamma_I', '1/omega_I'),
        ('gamma_D', '1/omega_D'),
        ('gamma_H', '1/omega_H'),
        ('gamma_F', '1/omega_F'),
        ('alpha', '1/alphaInv'),
        ('gamma_IH', '1/((1/gamma_I) - (1/gamma_H))'),
        ('gamma_DH', '1/((1/gamma_D) - (1/gamma_H))'),
        ('delta_1', 'delta * gamma_I / (delta * gamma_I + (1 - delta) * gamma_D)'),
        ('delta_2', 'delta * gamma_IH / (delta * gamma_IH + (1 - delta) * gamma_DH)'),
        ('theta_A', 'theta * (gamma_I * (1 - delta_1) + gamma_D * delta_1)'),
        ('theta_1', 'theta_A/ (theta_A +  (1 - theta) * gamma_H)'),
        ('beta_H_Time', 'beta_H * (1 - (1/ (1+exp(-kappa*(tau-interventionTime)))))'),
        ('beta_F_Time', 'beta_F * (1 - (1/ (1+exp(-kappa*(tau-interventionTime)))))')
        ]

    # alternatively, we can do it on the operate ode model
    ode = OperateOdeModel(state, params)
    # add the derived parameter
    ode.setDerivedParamList(derivedParamList)

    # define the set of transitions
    # name of origin state
    # name of target state
    # equation
    # type of equation, which is a transition between two state in this case

    transitionList = [
        Transition(origState='S', destState='E',
                   equation='(beta_I * S * I + beta_H_Time * S * H + beta_F_Time * S * F)',
                   transitionType=TransitionType.T),
        Transition(origState='E', destState='I',
                   equation='alpha * E',
                   transitionType=TransitionType.T),
        Transition(origState='I', destState='H',
                   equation='gamma_H * theta_1 * I',
                   transitionType=TransitionType.T),
        Transition(origState='I', destState='F',
                   equation='gamma_D * (1 - theta_1) * delta_1 * I',
                   transitionType=TransitionType.T),
        Transition(origState='I', destState='R',
                   equation='gamma_I * (1 - theta_1) * (1 - delta_1) * I',
                   transitionType=TransitionType.T),
        Transition(origState='H', destState='F',
                   equation='gamma_DH * delta_2 * H',
                   transitionType=TransitionType.T),
        Transition(origState='H', destState='R',
                   equation='gamma_IH * (1 - delta_2) * H',
                   transitionType=TransitionType.T),
        Transition(origState='F', destState='R',
                   equation='gamma_F * F',
                   transitionType=TransitionType.T)
        ]
    #print transitionList
    bdList = [Transition(origState='tau', equation='1',
                         transitionType=TransitionType.B)]

    # see how we can insert the transitions later, after initializing the ode object
    # this is not the preferred choice though
    ode.setTransitionList(transitionList)
    ode.setBirthDeathList(bdList)
    # set return, depending on whether we have input the parameters
    if param is None:
        return ode
    else:
        ode.setParameters(param)
        return ode