Beispiel #1
0
def get_chime_model(parameters):
    '''
    instantiates and returns CHIME model using parameters
    '''

    if not isinstance(parameters, Parameters):
        t = type(parameters)
        raise TypeError(f'parameters must be a Parameters object not {t}')

    return Sir(parameters)
Beispiel #2
0
def test_model_first_hosp_fit(param):
    param.date_first_hospitalized = param.current_date - timedelta(days=43)
    param.doubling_time = None

    my_model = Sir(param)

    assert abs(my_model.intrinsic_growth_rate - 0.123) / 0.123 < 0.01
    assert abs(my_model.beta - 4.21501347256401e-07) < EPSILON
    assert abs(my_model.r_t - 2.32) / 2.32 < 0.01
    assert abs(my_model.r_naught - 2.72) / 2.72 < 0.01
    assert abs(my_model.doubling_time_t - 7.71) / 7.71 < 0.01
Beispiel #3
0
def fixture_penn_chime_setup() -> Tuple[Parameters, Sir]:
    """Initializes penn_chime parameters and SIR model
    """
    p = Parameters(
        current_hospitalized=69,
        date_first_hospitalized=date(2020, 3, 7),
        doubling_time=None,
        hospitalized=Disposition.create(days=7, rate=0.025),
        icu=Disposition.create(days=9, rate=0.0075),
        infectious_days=14,
        market_share=0.15,
        n_days=100,
        population=3600000,
        recovered=0,
        relative_contact_rate=0.3,
        ventilated=Disposition.create(days=10, rate=0.005),
    )
    return p, Sir(p)
Beispiel #4
0
    def handle_model_change(i, sidebar_data, lock_zoom_clicks,
                            graphs_relayout_data):
        model = {}
        pars = None
        result = []
        viz_kwargs = {}
        if sidebar_data:
            pars = parameters_deserializer(sidebar_data["parameters"])
            model = Sir(pars)
            vis = i.components.get("visualizations", None) if i else None
            vis_content = vis.content if vis else None

            viz_kwargs = dict(labels=pars.labels,
                              table_mod=7,
                              content=vis_content)
        result.extend(i.components["intro"].build(model, pars))
        for df_key in ["admits_df", "census_df", "sim_sir_w_date_df"]:
            df = None
            if model:
                df = model.__dict__.get(df_key, None)
            result.extend(prepare_visualization_group(df, **viz_kwargs))

        figures = [result[1], result[4], result[7]]

        for n_clicks, relayout_data, figure in zip(lock_zoom_clicks,
                                                   graphs_relayout_data,
                                                   figures):
            if relayout_data:
                if n_clicks == None or n_clicks % 2 == 0:
                    # Set plot_data figure coordinates
                    if "xaxis.range[0]" in relayout_data:
                        figure["layout"]["xaxis"]["range"] = [
                            relayout_data["xaxis.range[0]"],
                            relayout_data["xaxis.range[1]"]
                        ]
                    if "yaxis.range[0]" in relayout_data:
                        figure["layout"]["yaxis"]["range"] = [
                            relayout_data["yaxis.range[0]"],
                            relayout_data["yaxis.range[1]"]
                        ]

        return result
Beispiel #5
0
    def handle_model_change(i, sidebar_data):
        model = {}
        pars = None
        result = []
        viz_kwargs = {}
        if sidebar_data:
            pars = parameters_deserializer(sidebar_data["parameters"])
            model = Sir(pars)
            vis = i.components.get("visualizations", None) if i else None
            vis_content = vis.content if vis else None

            viz_kwargs = dict(labels=pars.labels,
                              table_mod=7,
                              max_y_axis=pars.max_y_axis,
                              content=vis_content)
        result.extend(i.components["intro"].build(model, pars))
        for df_key in ["admits_df", "census_df", "sim_sir_w_date_df"]:
            df = None
            if model:
                df = model.__dict__.get(df_key, None)
            result.extend(prepare_visualization_group(df, **viz_kwargs))
        return result
def sim_chime(scenario: str,
              p: Parameters,
              intrinsic_growth_rate: float = None,
              initial_doubling_time: float = None,
              admits_df: Optional = None,
              rcr_policies_df: Optional = None):
    """
    Run one CHIME simulation

    :param scenario: identifier for scenario
    :param p: CHIME parameters
    :param intrinsic_growth_rate: Can optionally specify to override CHIME fitting/estimation
    :param initial_doubling_time: Can optionally specify to override CHIME fitting/estimation
    :param admits_df: Experimental - not currently using
    :param rcr_policies_df: Dataframe of dates and rcr values
    :return:
    """

    # Run the model
    if rcr_policies_df is None:
        is_dynamic_rcr = False
        # Just call penn_chime version of Sir
        m = Sir(p)

    else:
        # Using dynamic rcrs, need to call customized version of Sir
        is_dynamic_rcr = True
        m = SirPlus(p, intrinsic_growth_rate, initial_doubling_time, admits_df,
                    rcr_policies_df)

    # Gather results
    input_params_dict = vars(p)
    results = gather_sim_results(m, scenario, input_params_dict,
                                 is_dynamic_rcr)

    # Return model object and results
    return m, results
Beispiel #7
0
def halving_model(halving_param):
    return Sir(halving_param)
Beispiel #8
0
def model(param):
    return Sir(param)