Skip to content

Commit d26d8de

Browse files
committed
update analysis
1 parent 5703e80 commit d26d8de

File tree

6 files changed

+64
-36
lines changed

6 files changed

+64
-36
lines changed

analysis_scripts/plotting_methods.jl

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,31 @@ function plot_Rt_both_SES_groups(model::KenyaCoVSD.CoVAreaModel,forecastdate::Da
3434
return plt
3535
end
3636

37+
function plot_ct(ct_fitted)
38+
june1day = (Date(2021,6,1) - Date(2020,2,20)).value
39+
ct_for_plot = copy(ct_fitted)
40+
if june1day > length(ct_fitted)
41+
ct_for_plot = vcat(ct_fitted,fill(ct_fitted[end], june1day - length(ct_fitted)))
42+
end
43+
44+
xticktimes = [((Date(2020,2,1) + Month(k))- Date(2020,2,24)).value for k = 1:18 ]
45+
xticklabs = [monthname(k)[1:3]*"/20" for k = 3:12]
46+
xticklabs = vcat(xticklabs,[monthname(k)[1:3]*"/21" for k = 1:8])
47+
48+
ct_plt = plot(ct_for_plot,
49+
color = :black,lw = 3,
50+
lab = "",
51+
xticks = (xticktimes,xticklabs),
52+
legend = :topright,
53+
title = "Nairobi one-group fitted contact rates",
54+
xlims = (-5,june1day),
55+
ylabel = "Contact rate (rel. to pre-pandemic baseline)",
56+
size = (1100,500),dpi = 250,
57+
legendfont = 13,titlefont = 20,tickfontsize=10,guidefont = 12,
58+
left_margin = 10mm,right_margin = 7.5mm)
59+
60+
return ct_plt
61+
end
3762
function plot_PCR(fit,linelist_data_with_pos_neg,linelist_data)
3863
june1day = (Date(2021,6,1) - Date(2020,2,24)).value
3964

464 KB
Loading
360 KB
Loading
159 KB
Loading

sensitivity_analysis/model_selection.jl

Lines changed: 8 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -100,42 +100,19 @@ include("../analysis_scripts/plotting_methods.jl")
100100
ct_fitted = EM_steps[end][1]
101101
N = sum(N_kenya[:,"Nairobi"])
102102
plot(ct_fitted)
103-
##Calculate predictions
104-
105-
#Placeholder solve run to get length of matrix
106-
p = [[2.5,nai_one_group.α,nai_one_group.γ,0.16,N,1/180];ct_fitted]
107-
u0 = [N-100,100,0.0,0.0,0.0,0.0,0.0]
108-
function new_variant_effect!(integrator)
109-
integrator.p[1] *= 1.5
110-
integrator.u[2] += 0.0
111-
end
112-
113-
janendpoint = (Date(2021,1,30) - Date(2020,2,20)).value
114-
aprilendpoint = (Date(2021,4,30) - Date(2020,2,20)).value
115-
variant_cb = PresetTimeCallback([janendpoint],new_variant_effect!)
116-
117103

118-
sol = solve(nai_one_group.prob, BS3();tspan = (0,(Date(2021,6,1) - Date(2020,2,20)).value),
119-
callback = variant_cb, u0=u0, p=p, saveat = 1)
120-
ι = diff(sol[:C])
121104

122-
## Gather the uncertainty over the PCR and seropos predictions
123-
prop_PCR_pos_mat = zeros(length(ι),size(nai_one_group.MCMC_results.chain,1))
124-
no_neg_PCR_pos_mat = zeros(length(ι),size(nai_one_group.MCMC_results.chain,1))
125-
prop_sero_pos_mat = zeros(length(ι),size(nai_one_group.MCMC_results.chain,1))
126-
infection_mat = zeros(length(ι),size(nai_one_group.MCMC_results.chain,1))
127-
128-
sero_array = vcat(nai_one_group.baseline_sero_array[1:30],[(1-0)^k for k in 1:500])
105+
##Calculate predictions
129106

130-
gather_uncertainty_one_group!(nai_one_group,prop_PCR_pos_mat,no_neg_PCR_pos_mat,prop_sero_pos_mat,infection_mat,sero_array)
107+
fit_mats = gather_uncertainty_one_group(nai_one_group,ct_fitted)
131108

132109
#Join the % PCR pos and number PCR pos predictions based on whether each day has neg PCR test counts or not
133-
nai_tests = vcat(nai_one_group.PCR_cases[1:(end-14),2],fill(-17,14+length) - size(nai_one_group.PCR_cases,1)))
134-
pred_num_PCR_pos_mat = prop_PCR_pos_mat.*nai_tests.*(nai_tests .>= 0) .+ no_neg_PCR_pos_mat.*(nai_tests .< 0)
110+
nai_tests = vcat(nai_one_group.PCR_cases[1:(end-14),2],fill(-17,14+size(fit_mats.prop_PCR_pos_mat,1) - size(nai_one_group.PCR_cases,1)))
111+
pred_num_PCR_pos_mat = fit_mats.prop_PCR_pos_mat.*nai_tests.*(nai_tests .>= 0) .+ fit_mats.no_neg_PCR_pos_mat.*(nai_tests .< 0)
135112
#Get the posterior mean and credible intervals
136-
pred_prop_sero_pos = get_credible_intervals(prop_sero_pos_mat)
113+
pred_prop_sero_pos = get_credible_intervals(fit_mats.prop_sero_pos_mat)
137114
pred_num_PCR_pos = get_credible_intervals(pred_num_PCR_pos_mat)
138-
pred_incidence = get_credible_intervals(infection_mat)
115+
pred_incidence = get_credible_intervals(fit_mats.infection_mat)
139116
#Compare to two-group fits
140117
nai_fit = condensed_county_forecasts[[fit.name == "Nairobi" for fit in condensed_county_forecasts]][1]
141118
sero_plt_compare = plot_pop_exposure(nai_fit,serological_data,serology_data,N_kenya);
@@ -158,9 +135,8 @@ plot!(sero_plt_compare,cumsum(pred_incidence.pred,dims = 1)./nai_one_group.N,
158135
ribbon = (cumsum(pred_incidence.lb,dims = 1)./nai_one_group.N,cumsum(pred_incidence.ub,dims = 1)./nai_one_group.N )
159136
)
160137

161-
savefig()
162-
163-
138+
savefig(sero_plt_compare,"plots/sensitivity_analysis_plots/comparison_onegrp_vs_twogrp_pop_exposure.png")
139+
savefig(PCR_plt_compare,"plots/sensitivity_analysis_plots/comparison_onegrp_vs_twogrp_PCR_pos.png")
164140

165141
## Fill table for model 2
166142
@load("sensitivity_analysis/nairobi_fits/nai_EM_fit.jld2") #<---- Saved EM algorithm fits

sensitivity_analysis/one_group_model.jl

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -259,11 +259,38 @@ nai_one_group.log_likelihood = ll_onegroup_newvariant_infboost
259259
nai_one_group.log_priors = priors_onegroup_newvariant
260260

261261

262-
function gather_uncertainty_one_group!(nai_one_group,prop_PCR_pos_mat,no_neg_PCR_pos_mat,prop_sero_pos_mat,infection_mat,sero_array)
262+
function gather_uncertainty_one_group(nai_one_group,ct_fitted)
263+
#Placeholder solve run to get length of matrix
264+
p = [[2.5,nai_one_group.α,nai_one_group.γ,0.16,N,1/180];ct_fitted]
265+
u0 = [N-100,100,0.0,0.0,0.0,0.0,0.0]
266+
267+
function new_variant_effect!(integrator)
268+
integrator.p[1] *= 1.5
269+
integrator.u[2] += 0.0
270+
end
271+
272+
janendpoint = (Date(2021,1,30) - Date(2020,2,20)).value
273+
aprilendpoint = (Date(2021,4,30) - Date(2020,2,20)).value
274+
variant_cb = PresetTimeCallback([janendpoint],new_variant_effect!)
275+
276+
277+
sol = solve(nai_one_group.prob, BS3();tspan = (0,(Date(2021,6,1) - Date(2020,2,20)).value),
278+
callback = variant_cb, u0=u0, p=p, saveat = 1)
279+
ι = diff(sol[:C])
280+
#Define arrays
281+
## Gather the uncertainty over the PCR and seropos predictions
282+
prop_PCR_pos_mat = zeros(length(ι),size(nai_one_group.MCMC_results.chain,1))
283+
no_neg_PCR_pos_mat = zeros(length(ι),size(nai_one_group.MCMC_results.chain,1))
284+
prop_sero_pos_mat = zeros(length(ι),size(nai_one_group.MCMC_results.chain,1))
285+
infection_mat = zeros(length(ι),size(nai_one_group.MCMC_results.chain,1))
286+
287+
sero_array = vcat(nai_one_group.baseline_sero_array[1:30],[(1-0)^k for k in 1:500])
288+
263289
for j = 1:size(nai_one_group.MCMC_results.chain,1)
264290
R₀ = nai_one_group.MCMC_results.chain[:R₀][j]
265291
extra_transmissibility = nai_one_group.MCMC_results.chain[:extra_transmissibility][j]
266292
influx_exposed_new_variant = nai_one_group.MCMC_results.chain[:influx_exposed_new_variant][j]
293+
267294
p_test = nai_one_group.MCMC_results.chain[:p_test][j]
268295
χ = nai_one_group.MCMC_results.chain[][j]
269296
E₀ = nai_one_group.MCMC_results.chain[:E₀][j]
@@ -273,14 +300,14 @@ function gather_uncertainty_one_group!(nai_one_group,prop_PCR_pos_mat,no_neg_PCR
273300
p = [[R₀,nai_one_group.α,nai_one_group.γ,0.16,N,1/180];ct_fitted]
274301
u0 = [N-E₀,E₀,0.0,0.0,0.0,0.0,0.0]
275302

276-
function new_variant_effect!(integrator)
303+
function affect!(integrator)
277304
integrator.p[1] *= extra_transmissibility
278305
integrator.u[2] += influx_exposed_new_variant
279306
end
280307

281308
janendpoint = (Date(2021,1,30) - Date(2020,2,20)).value
282309
aprilendpoint = (Date(2021,4,30) - Date(2020,2,20)).value
283-
variant_cb = PresetTimeCallback([janendpoint],new_variant_effect!)
310+
variant_cb = PresetTimeCallback([janendpoint],affect!)
284311

285312
sol = solve(nai_one_group.prob, BS3();tspan = (0,(Date(2021,6,1) - Date(2020,2,20)).value),
286313
callback = variant_cb, u0=u0, p=p, saveat = 1)
@@ -299,5 +326,5 @@ function gather_uncertainty_one_group!(nai_one_group,prop_PCR_pos_mat,no_neg_PCR
299326
no_neg_PCR_pos_mat[:,j] .= PCR_pred
300327
prop_sero_pos_mat[:,j] .=sero
301328
end
302-
return nothing
329+
return (;infection_mat,prop_PCR_pos_mat,no_neg_PCR_pos_mat,prop_sero_pos_mat)
303330
end

0 commit comments

Comments
 (0)