Skip to content

Commit 13f82f8

Browse files
fixed doubling time inference
1 parent 124a3fd commit 13f82f8

File tree

2 files changed

+25
-19
lines changed

2 files changed

+25
-19
lines changed

src/penn_chime/models.py

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -103,16 +103,20 @@ def __init__(self, p: Parameters):
103103
argmin_dt = None
104104
min_loss = 2.0**99
105105
censes = dict()
106+
current_infecteds = dict()
106107
for dt in np.linspace(1,15,29):
107-
censes[dt] = self.run_projection(p, dt)
108+
censes[dt], current_infecteds[dt] = self.run_projection(p, dt)
109+
# self.current_infected = current_infecteds[dt] # log it into state for no reason really
108110
self.census_df = censes[dt] # log it into state for loss
109111
loss_dt = self.loss_dt(p)
110112
if loss_dt < min_loss:
111113
min_loss = loss_dt
112114
argmin_dt = dt
113-
self.census_df = censes[dt]
115+
self.census_df = censes[argmin_dt]
114116
p.doubling_time = argmin_dt
117+
current_infected = current_infecteds[argmin_dt]
115118

119+
infected = 1 / p.hospitalized.rate / p.market_share
116120
# update all state that is dependent on doubling time.
117121
intrinsic_growth_rate = self._intrinsic_growth_rate(p.doubling_time)
118122
gamma = 1 / recovery_days
@@ -126,12 +130,13 @@ def __init__(self, p: Parameters):
126130
recovered,
127131
beta,
128132
gamma,
129-
p.n_days
133+
p.n_days + p.n_days_since_first_hospitalized
130134
)
131135
dispositions_df = build_dispositions_df(raw_df, rates, p.market_share)
132136
admits_df = build_admits_df(dispositions_df, p.n_days_since_first_hospitalized)
133137
census_df = build_census_df(admits_df, lengths_of_stay, p.n_days_since_first_hospitalized)
134138

139+
self.infected = current_infected
135140
self.intrinsic_growth_rate = intrinsic_growth_rate
136141
self.gamma = gamma
137142
self.beta = beta
@@ -148,14 +153,14 @@ def __init__(self, p: Parameters):
148153

149154
return None
150155

151-
def run_projection(self, p: Parameters, doubling_time: float) -> pd.DataFrame:
156+
def run_projection(self, p: Parameters, doubling_time: float) -> Tuple[pd.DataFrame, float]:
152157
intrinsic_growth_rate = self._intrinsic_growth_rate(doubling_time)
153158

154159
recovery_days = p.recovery_days
155160
market_share = p.market_share
156161
initial_i = 1 / p.hospitalized.rate / market_share
157162

158-
S, I, R = self.susceptible, self.infected, self.recovered
163+
S, I, R = self.susceptible, initial_i, self.recovered
159164

160165
# mean recovery rate (inv_recovery_days)
161166
gamma = 1 / recovery_days
@@ -167,22 +172,23 @@ def run_projection(self, p: Parameters, doubling_time: float) -> pd.DataFrame:
167172

168173
raw_df = sim_sir_df(S,I,R,beta,gamma,n_days)
169174

170-
# dispositions_df = build_dispositions_df(raw_df, self._rates, p.market_share)
175+
current_infected = raw_df.infected.loc[p.n_days_since_first_hospitalized]
176+
dispositions_df = build_dispositions_df(raw_df, self._rates, p.market_share)
171177

172-
i_dict_v = get_dispositions(raw_df.infected, self._rates, market_share)
173-
r_dict_v = get_dispositions(raw_df.recovered, self._rates, market_share)
174-
175-
dispositions = {
176-
key: value + r_dict_v[key]
177-
for key, value in i_dict_v.items()
178-
}
179-
180-
dispositions_df = pd.DataFrame(dispositions)
181-
dispositions_df = dispositions_df.assign(day=dispositions_df.index)
178+
# i_dict_v = get_dispositions(raw_df.infected, self._rates, market_share)
179+
# r_dict_v = get_dispositions(raw_df.recovered, self._rates, market_share)
180+
#
181+
# dispositions = {
182+
# key: value + r_dict_v[key]
183+
# for key, value in i_dict_v.items()
184+
# }
185+
#
186+
# dispositions_df = pd.DataFrame(dispositions)
187+
# dispositions_df = dispositions_df.assign(day=dispositions_df.index)
182188

183189
admits_df = build_admits_df(dispositions_df, p.n_days_since_first_hospitalized)
184190
census_df = build_census_df(admits_df, self._lengths_of_stay, p.n_days_since_first_hospitalized)
185-
return census_df
191+
return census_df, current_infected
186192

187193
def loss_dt(self, p: Parameters) -> float:
188194
"""Squared error: predicted_current_hospitalized vs. actual current hospitalized

src/penn_chime/settings.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@
1919
bucks=bucks,
2020
philly=philly,
2121
),
22-
current_hospitalized=14,
22+
current_hospitalized=32,
2323
doubling_time=4,
24-
date_first_hospitalized=date(2020,3,9),
24+
date_first_hospitalized=date(2020,3,7),
2525
known_infected=510,
2626
n_days=60,
2727
market_share=0.15,

0 commit comments

Comments
 (0)