@@ -195,9 +195,9 @@ def get_argmin_doubling_time(self, p: Parameters, dts):
195
195
intrinsic_growth_rate = get_growth_rate (i_dt )
196
196
self .beta = get_beta (intrinsic_growth_rate , self .gamma , self .susceptible , 0.0 )
197
197
self .beta_t = get_beta (intrinsic_growth_rate , self .gamma , self .susceptible , p .relative_contact_rate )
198
-
198
+
199
199
raw = self .run_projection (p , self .gen_policy (p ))
200
-
200
+
201
201
# Skip values the would put the fit past peak
202
202
peak_admits_day = raw ["admits_hospitalized" ].argmax ()
203
203
if peak_admits_day < 0 :
@@ -228,7 +228,7 @@ def gen_policy(self, p: Parameters) -> Sequence[Tuple[float, int]]:
228
228
(self .beta , pre_mitigation_days ),
229
229
(self .beta_t , post_mitigation_days ),
230
230
]
231
-
231
+
232
232
def run_projection (self , p : Parameters , policy : Sequence [Tuple [float , int ]]):
233
233
raw = sim_sir (
234
234
self .susceptible ,
@@ -245,20 +245,17 @@ def run_projection(self, p: Parameters, policy: Sequence[Tuple[float, int]]):
245
245
246
246
return raw
247
247
248
-
249
248
def get_loss (current_hospitalized , predicted ) -> float :
250
249
"""Squared error: predicted vs. actual current hospitalized."""
251
250
return (current_hospitalized - predicted ) ** 2.0
252
251
253
-
254
252
def get_argmin_ds (census , current_hospitalized : float ) -> float :
255
253
# By design, this forbids choosing a day after the peak
256
254
# If that's a problem, see #381
257
255
peak_day = census .argmax ()
258
256
losses = (census [:peak_day ] - current_hospitalized ) ** 2.0
259
257
return losses .argmin ()
260
258
261
-
262
259
def get_beta (
263
260
intrinsic_growth_rate : float ,
264
261
gamma : float ,
@@ -271,14 +268,12 @@ def get_beta(
271
268
* (1.0 - relative_contact_rate )
272
269
)
273
270
274
-
275
271
def get_growth_rate (doubling_time : Optional [float ]) -> float :
276
272
"""Calculates average daily growth rate from doubling time."""
277
273
if doubling_time is None or doubling_time == 0.0 :
278
274
return 0.0
279
275
return (2.0 ** (1.0 / doubling_time ) - 1.0 )
280
276
281
-
282
277
def sir (
283
278
s : float , i : float , r : float , beta : float , gamma : float , n : float
284
279
) -> Tuple [float , float , float ]:
@@ -289,7 +284,6 @@ def sir(
289
284
scale = n / (s_n + i_n + r_n )
290
285
return s_n * scale , i_n * scale , r_n * scale
291
286
292
-
293
287
def sim_sir (
294
288
s : float , i : float , r : float , gamma : float , i_day : int , policies : Sequence [Tuple [float , int ]]
295
289
):
@@ -334,7 +328,6 @@ def sim_sir(
334
328
"ever_infected" : i_a + r_a
335
329
}
336
330
337
-
338
331
def build_sim_sir_w_date_df (
339
332
raw_df : pd .DataFrame ,
340
333
current_date : datetime ,
@@ -350,7 +343,6 @@ def build_sim_sir_w_date_df(
350
343
}
351
344
})
352
345
353
-
354
346
def build_floor_df (df , keys , prefix ):
355
347
"""Build floor sim sir w date."""
356
348
return pd .DataFrame ({
@@ -362,7 +354,6 @@ def build_floor_df(df, keys, prefix):
362
354
}
363
355
})
364
356
365
-
366
357
def calculate_dispositions (
367
358
raw : Dict ,
368
359
rates : Dict [str , float ],
@@ -373,7 +364,6 @@ def calculate_dispositions(
373
364
raw ["ever_" + key ] = raw ["ever_infected" ] * rate * market_share
374
365
raw [key ] = raw ["ever_infected" ] * rate * market_share
375
366
376
-
377
367
def calculate_admits (raw : Dict , rates ):
378
368
"""Build admits dataframe from dispositions."""
379
369
for key in rates .keys ():
@@ -384,7 +374,6 @@ def calculate_admits(raw: Dict, rates):
384
374
raw ["admits_" + key ] = admit
385
375
raw [key ] = admit
386
376
387
-
388
377
def calculate_census (
389
378
raw : Dict ,
390
379
lengths_of_stay : Dict [str , int ],
0 commit comments