import matplotlib.pyplot as plt import numpy as np import pandas as pd import seaborn as sns from adaptive.utils import cwd import statsmodels.api as sm # load data data = cwd() / "example_data" df = pd.read_csv(data / "metro_state_policy_evaluation.csv").dropna() df["Rt"] = df["RR_pred"] df["Rt_binarized"] = (df["RR_pred"] >= 1).astype(int) drop_cols = [col for col in df.columns if col.startswith("RR_")] + [ "metro-state", "date", "state", "state_name", "start_stay_at_home", "cbsa_fips", "end_stay_at_home", "mask_mandate_all", "metro_outbreak_start", "threshold_ind", "new_cases_ts", "daily_confirmed_cases", "religious_exception_stay_home" ] df.drop(columns=drop_cols, inplace=True) df.rename(lambda x: x.replace(".0", ""), axis=1, inplace=True) # set up metro fixed effects (some metro cols are all 0) metros = [ col for col in df.columns if col.startswith("metro") if df[col].sum() > 0 ] # drop one metro to avoid multicollinearity reference_metro, *metros = metros drop_metro_cols = [ col for col in df.columns
# lockdown 1 model_B = model(districts, populations, district_cases, seed) simulate_lockdown(model_B, lockdown_period + 6, total, Rmw, Rvw, lockdown_matrix, migrations) # lockdown + adaptive controls model_C = model(districts, populations, district_cases, seed) simulate_adaptive_control(model_C, lockdown_period, total, lockdown_matrix, migrations, Rmw, {district: beta_scaling * Rv * gamma for (district, Rv) in Rvw.items()}, {district: beta_scaling * Rm * gamma for (district, Rm) in Rmw.items()}, evaluation_period=eval_period ) return model_A, model_B, model_C if __name__ == "__main__": root = cwd() data = root/"data" figs = root/"figs" total_time = 90 * days lockdown_period = 7 gamma = 0.2 window = 10 CI = 0.95 state_cases = pd.read_csv(data/"Bihar_cases_data_Oct03.csv", parse_dates=["date_reported", "date_status_change"], dayfirst=True) state_cases["geo_reported"] = state_cases.geo_reported.str.strip() state_cases = state_cases[state_cases.date_reported <= "2020-09-30"] state_ts = state_cases["date_reported"].value_counts().sort_index() district_ts = state_cases.groupby(["geo_reported", "date_reported"])["date_reported"].count().sort_index()
simplefilter("ignore") def project(dates, R_values, smoothing, period=7 * days): julian_dates = [_.to_julian_date() for _ in dates[-smoothing // 2:None]] return OLS( RR_pred[-smoothing//2:None], add_constant(julian_dates) )\ .fit()\ .predict([1, julian_dates[-1] + period])[0] # set to cloud temp directory if not explicitly told to run locally root = cwd() if len(sys.argv) > 1 and sys.argv[1] == "--local" else Path( "/tmp") data = root / "data" # model details gamma = 0.2 smoothing = 10 CI = 0.95 download_data(data, 'state_wise_daily.csv') state_df = load_statewise_data(data / "state_wise_daily.csv") country_time_series = get_time_series(state_df) estimates = [] timeseries = []