@@ -103,16 +103,20 @@ def __init__(self, p: Parameters):
103
103
argmin_dt = None
104
104
min_loss = 2.0**99
105
105
censes = dict()
106
+ current_infecteds = dict()
106
107
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
108
110
self.census_df = censes[dt] # log it into state for loss
109
111
loss_dt = self.loss_dt(p)
110
112
if loss_dt < min_loss:
111
113
min_loss = loss_dt
112
114
argmin_dt = dt
113
- self.census_df = censes[dt ]
115
+ self.census_df = censes[argmin_dt ]
114
116
p.doubling_time = argmin_dt
117
+ current_infected = current_infecteds[argmin_dt]
115
118
119
+ infected = 1 / p.hospitalized.rate / p.market_share
116
120
# update all state that is dependent on doubling time.
117
121
intrinsic_growth_rate = self._intrinsic_growth_rate(p.doubling_time)
118
122
gamma = 1 / recovery_days
@@ -126,12 +130,13 @@ def __init__(self, p: Parameters):
126
130
recovered,
127
131
beta,
128
132
gamma,
129
- p.n_days
133
+ p.n_days + p.n_days_since_first_hospitalized
130
134
)
131
135
dispositions_df = build_dispositions_df(raw_df, rates, p.market_share)
132
136
admits_df = build_admits_df(dispositions_df, p.n_days_since_first_hospitalized)
133
137
census_df = build_census_df(admits_df, lengths_of_stay, p.n_days_since_first_hospitalized)
134
138
139
+ self.infected = current_infected
135
140
self.intrinsic_growth_rate = intrinsic_growth_rate
136
141
self.gamma = gamma
137
142
self.beta = beta
@@ -148,14 +153,14 @@ def __init__(self, p: Parameters):
148
153
149
154
return None
150
155
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] :
152
157
intrinsic_growth_rate = self._intrinsic_growth_rate(doubling_time)
153
158
154
159
recovery_days = p.recovery_days
155
160
market_share = p.market_share
156
161
initial_i = 1 / p.hospitalized.rate / market_share
157
162
158
- S, I, R = self.susceptible, self.infected , self.recovered
163
+ S, I, R = self.susceptible, initial_i , self.recovered
159
164
160
165
# mean recovery rate (inv_recovery_days)
161
166
gamma = 1 / recovery_days
@@ -167,22 +172,23 @@ def run_projection(self, p: Parameters, doubling_time: float) -> pd.DataFrame:
167
172
168
173
raw_df = sim_sir_df(S,I,R,beta,gamma,n_days)
169
174
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)
171
177
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)
182
188
183
189
admits_df = build_admits_df(dispositions_df, p.n_days_since_first_hospitalized)
184
190
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
186
192
187
193
def loss_dt(self, p: Parameters) -> float:
188
194
"""Squared error: predicted_current_hospitalized vs. actual current hospitalized
0 commit comments