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()
Example #3
0
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 = []