def run(self): super().run() models = ["crude", "delay", "overflow"] kind = st.sidebar.selectbox(_("Clinical model"), models) m = SEAIR(region="BR", disease=covid19) cm = m.clinical(kind) cm.ui.summary_table(subheader=_("Parameters table"))
def main(embed=False): if not embed: st.css(keep_menu=True) st.sidebar.logo() models = ["crude", "delay", "overflow"] kind = st.sidebar.selectbox(_("Clinical model"), models) m = SEAIR(region="BR", disease=covid19) cm = m.clinical(kind) cm.ui.summary_table(subheader=_("Parameters table"))
def handle_explore_option(self, option): if option == "model": model = SEAIR(region=self.region, disease="covid-19") model.run(180) object = model.clinical.overflow_model() elif option == "region": object = self.region else: import pydemic_ui.components as object return object
def start_model(region: RegionT, disease="covid-19"): """ Start model with cases data for the given region. """ cases = region.pydemic.epidemic_curve(disease=disease, real=True, keep_observed=True) m = SEAIR(region=region, disease=disease) m.set_cases(cases, adjust_R0=True, save_observed=True) m.info.save_event("simulation_start") return m
def model(*, daily_cases, runner, period, disease, **kwargs): """ Return model from parameters """ m = SEAIR(disease=disease, **kwargs) recovered = 0.0 exposed = daily_cases * m.incubation_period infectious = daily_cases * m.infectious_period * m.Qs asymptomatic = daily_cases * m.infectious_period * (1 - m.Qs) susceptible = m.population - exposed - asymptomatic - infectious - recovered m.set_ic(state=(susceptible, exposed, asymptomatic, infectious, recovered)) m = runner(m, period) return m
def main(embed=False, disease=None): """ Main interface of the API explorer. """ if not embed: st.css(keep_menu=True) st.sidebar.logo() where = st if embed else st.sidebar st.title(_("Pydemic-UI API explorer")) where.header(_("Options")) region = where.text_input(_("Mundi region code"), value="BR") try: region = mundi.region(region) except LookupError: where.error("Invalid mundi region code.") return opts = { "model": _("A Pydemic Model"), "region": _("A Mundi Region"), "components": _("Input components"), } msg = _("What do you want to explore?") opt = where.radio(msg, list(opts), format_func=opts.get) if opt == "model": model = SEAIR(region=region, disease="covid-19") model.run(180) obj = model.clinical.overflow_model() elif opt == "region": obj = region else: import pydemic_ui.components as obj explore_object_attribute(opt, obj, where=where)
def seir(run=120, region="BR", disease=covid19, **kwargs): """ A simple SEIR example. """ m = SEAIR(region=region, disease=disease, **kwargs) m.set_ic(cases=1e-6 * m.population) m.run(run) return m.clinical.overflow_model()
def get_model(region): region = mundi.region(region) data = region.pydemic.epidemic_curve() empirical_CFR = (data["deaths"] / data["cases"]).mean() notification_rate = min(0.5, covid19.CFR(region=region) / empirical_CFR) m = SEAIR(region=region, R0=R0[region.id]) real_data = data.copy() real_data["cases"] /= notification_rate m.set_cases(real_data, save_observed=True) m.run(60) return m.clinical.overflow_model()
return predictor def fit(self, data): """ Fit model to epidemic curve. """ self.set_cases(data, adjust_R0=True) Model.predictor = predictor Model.fit = fit region = mundi.region("IT") model = SEAIR(region=region).clinical.overflow_model() params = model.disease_params predictor = model.predictor() curves: pd.DataFrame = region.pydemic.epidemic_curve() curves = curves.reset_index().drop_duplicates("date", keep="first").set_index("date") tf = curves.index[-1] notification_ratio = params.CFR / (curves.loc[tf, "deaths"] / curves.loc[tf, "cases"]) curves["cases"] /= notification_ratio | dbg start, end = curves.index[[0, -1]] full_index = pd.to_datetime(np.arange((end - start).days), unit="D",
def test_seair_initialization(self): # Probability of developing symptoms assert SEAIR(disease="disease").prob_symptoms == 1.0 assert SEAIR(disease=covid19).prob_symptoms == covid19.prob_symptoms() assert SEAIR(prob_symptoms=0.5).prob_symptoms == 0.5 assert SEAIR(Qs=0.5).prob_symptoms == 0.5