コード例 #1
0
if __name__ == '__main__':
    city = 'Rio de Janeiro/RJ'
    cases = load_cases('city')[city]
    population = load_population('city')[city]

    date_for_pred = '2020-03-24'
    S0 = population
    I0 = cases.loc[date_for_pred]['totalCases']
    E0 = 2 * I0
    R0 = 0

    for reduce_by in [0, 0.25, 0.50, 0.65]:
        model = SEIRBayes.init_from_intervals(
            NEIR0=(population, E0, I0, R0),
            r0_interval=((1 - reduce_by) * 1.9, (1 - reduce_by) * 5, 0.95),
            gamma_inv_interval=(10, 14, 0.95),
            alpha_inv_interval=(4.2, 5, 0.95),
            t_max=180)
        S, E, I, R, t = model.sample(1000)
        pred = pd.DataFrame(index=(pd.date_range(
            start=date_for_pred, periods=t.shape[0]).strftime('%Y-%m-%d')),
                            data={
                                'S': S.mean(axis=1),
                                'E': E.mean(axis=1),
                                'I': I.mean(axis=1),
                                'R': R.mean(axis=1)
                            })

        df = (pred.join(cases, how='outer').assign(
            cases=lambda df: df.totalCases.fillna(df.I)).assign(
                newly_infected=lambda df: df.cases - df.cases.shift(1) + df.R -
コード例 #2
0
    def generate_seir(
        # Municipio
        city,
        date,

        # Condições iniciais
        S0=None,  # População total (N)
        I0=None,  # Indivíduos infecciosos inicialmente (I0)
        E0=None,  # Indivíduos expostos inicialmente (E0)
        R0=0,  # Indivíduos removidos com imunidade inicialmente (R0)

        # R0, período de infecção (1/γ) e tempo incubação (1/α)
        r0_inf=1.9,  # Limite inferior do número básico de reprodução médio (R0)
        r0_sup=5,  # Limite superior do número básico de reprodução médio (R0)
        reduce_r0=[0, 0.25, 0.50, 0.65],
        gamma_inf=10,  # Limite inferior do período infeccioso médio em dias (1/γ)
        gamma_sup=14,  # Limite superior do período infeccioso médio em dias (1/γ)
        alpha_inf=4.2,  # Limite inferior do tempo de incubação médio em dias (1/α)
        alpha_sup=5,  # Limite superior do tempo de incubação médio em dias (1/α)

        # Parâmetros gerais
        t_max=180,  # Período de simulação em dias (t_max)
        sample_size=1000  #Qtde. de iterações da simulação (runs)
    ):

        cases = load_cases('city')[city]
        population = load_population('city')[city]

        S0 = S0 or population
        I0 = I0 or cases.loc[date]['totalCases']
        E0 = E0 or 2 * I0
        R0 = R0 or 0

        sample_size = sample_size or 1000
        t_max = t_max or 180

        for reduce_by in reduce_r0:
            model = SEIRBayes.init_from_intervals(
                NEIR0=(S0, E0, I0, R0),
                r0_interval=((1 - reduce_by) * r0_inf,
                             (1 - reduce_by) * r0_sup, 0.95),
                gamma_inv_interval=(gamma_inf, gamma_sup, 0.95),
                alpha_inv_interval=(alpha_inf, alpha_sup, 0.95),
                t_max=t_max)

            S, E, I, R, t = model.sample(sample_size)
            pred = pd.DataFrame(index=(pd.date_range(
                start=date, periods=t.shape[0]).strftime('%Y-%m-%d')),
                                data={
                                    'S': S.mean(axis=1),
                                    'E': E.mean(axis=1),
                                    'I': I.mean(axis=1),
                                    'R': R.mean(axis=1)
                                })

            df = (pred.join(cases, how='outer').assign(
                cases=lambda df: df.totalCases.fillna(df.I)).assign(
                    newly_infected=lambda df: df.cases - df.cases.shift(
                        1) + df.R - df.R.shift(1)).assign(
                            newly_R=lambda df: df.R.diff()).rename(
                                columns={'cases': 'totalCases OR I'}))

            df = df.assign(days=range(1, len(df) + 1))

            print(model._params)

            df.to_csv(f'seir_output-{reduce_by}_2.csv')
コード例 #3
0
                                  options=options_date,
                                  index=len(options_date) - 1)
    NEIR0 = make_NEIR0(cases_df, population_df, w_place, w_date)
    w_params = make_param_widgets(NEIR0)
    sample_size = st.sidebar.number_input(
        'Qtde. de iterações da simulação (runs)',
        min_value=1,
        max_value=3_000,
        step=100,
        value=300)

    st.markdown(texts.MODEL_INTRO)
    w_scale = st.selectbox('Escala do eixo Y', ['log', 'linear'], index=1)
    w_show_uncertainty = st.checkbox('Mostrar intervalo de confiança',
                                     value=True)
    model = SEIRBayes.init_from_intervals(**w_params)
    model_output = model.sample(sample_size)
    ei_df = make_EI_df(model_output, sample_size)
    fig = plot(model_output, w_scale, w_show_uncertainty)
    st.altair_chart(fig)
    download_placeholder = st.empty()
    if download_placeholder.button('Preparar dados para download em CSV'):
        href = make_download_df_href(ei_df)
        st.markdown(href, unsafe_allow_html=True)
        download_placeholder.empty()

    intervals = [
        w_params['alpha_inv_interval'], w_params['gamma_inv_interval'],
        w_params['r0_interval']
    ]
    SEIR0 = model._params['init_conditions']