Skip to content
Snippets Groups Projects
parameter_planes.jl 5.04 KiB
Newer Older
Peter Jentsch's avatar
Peter Jentsch committed

Peter Jentsch's avatar
Peter Jentsch committed
const univariate_path = "CovidAlertVaccinationModel/plots/univariate/" 
const bivariate_path = "CovidAlertVaccinationModel/plots/univariate/" 
Peter Jentsch's avatar
Peter Jentsch committed
function univarate_test(variable, variable_range; progmeter = nothing)
Peter Jentsch's avatar
Peter Jentsch committed
    default_parameters = get_app_parameters() 
    parameter_range_list = [merge(default_parameters,NamedTuple{(variable,)}((value,))) for value in variable_range]
    solve_fn(p) = mean_solve(samples, p;progmeter)[1]
Peter Jentsch's avatar
Peter Jentsch committed

    univariate_outlist = ThreadsX.map(solve_fn, parameter_range_list)
    
    p = plot_model(variable,parameter_range_list,univariate_outlist,default_parameters)
Peter Jentsch's avatar
Peter Jentsch committed
    return p
end

if !ispath(univariate_path)
    mkdir(univariate_path)
end
function univariate_simulations()
Peter Jentsch's avatar
Peter Jentsch committed
    univarate_test_list = (
        # (:I_0_fraction, range(0.0, 0.05; length = len)), 
        # (:base_transmission_probability, range(0.0002, 0.002; length = len)),
        # (:recovery_rate, range(0.1, 0.5; length = len)),
        # (:immunization_loss_prob, range(0.00, 0.05; length = len)),
        # (:π_base, range(-4.5, -3.5;  length = len)),
Peter Jentsch's avatar
Peter Jentsch committed
        # (:η, range(0.0,2.0; length = len)),
Peter Jentsch's avatar
Peter Jentsch committed
        # (:κ, range(0.5, 1.5; length = len)),
        # (:ω, range(0.0, 0.01; length = len)),
Peter Jentsch's avatar
Peter Jentsch committed
        # (:ω_en, range(0.0, 5e-2; length = len)),
Peter Jentsch's avatar
Peter Jentsch committed
        # (:γ, range(0.0, 0.5; length = len)),
        # (:ξ, range(1, 15; length = len)),
Peter Jentsch's avatar
Peter Jentsch committed
        # (:notification_parameter, range(0.000, 0.001; length = len)),
        (:app_user_fraction, range(0.05, 0.8; length = len)),
        # (:notification_threshold, (1:len)),
Peter Jentsch's avatar
Peter Jentsch committed
        # (:immunization_delay, [7,10,14,20]),
    )

Peter Jentsch's avatar
Peter Jentsch committed

    numsim = sum(map(t -> length(t[2]), univarate_test_list))
    display(numsim)
    progmeter = Progress(numsim*samples)
Peter Jentsch's avatar
Peter Jentsch committed
    display(get_app_parameters())
Peter Jentsch's avatar
Peter Jentsch committed
    plt_list = ThreadsX.map(univarate_test_list) do ur
Peter Jentsch's avatar
Peter Jentsch committed
        out = univarate_test(ur...;progmeter)
Peter Jentsch's avatar
Peter Jentsch committed
        display(out)
Peter Jentsch's avatar
Peter Jentsch committed
        return out
    end
Peter Jentsch's avatar
Peter Jentsch committed

    for ((varname,_),pltlist) in zip(univarate_test_list,plt_list)
        mkpath("$univariate_path/$varname")
        # display(pltlist)
Peter Jentsch's avatar
Peter Jentsch committed
        for (i,p) in enumerate(pltlist)
            savefig(p,"$univariate_path/$varname/$i.pdf")
        end
Peter Jentsch's avatar
Peter Jentsch committed
    end
end

using AxisKeys 
function multivariate_simulations()
Peter Jentsch's avatar
Peter Jentsch committed
    app_simulations = (
Peter Jentsch's avatar
Peter Jentsch committed
        (:η, range(0.0, 2.0; length = len)),
        (:ω_en, range(0.0, 1e-1; length = len)),
Peter Jentsch's avatar
Peter Jentsch committed
        # (:notification_threshold, (1:len)),
    )
Peter Jentsch's avatar
Peter Jentsch committed
    run_multivariate_sims(app_simulations)
Peter Jentsch's avatar
Peter Jentsch committed


    # for ((varname,_),p) in zip(univarate_test_list,plt_list)
    #     savefig(p,"$univariate_path/$varname.pdf")
    # end
end
using ProgressMeter
Peter Jentsch's avatar
Peter Jentsch committed
function run_multivariate_sims(sims)
Peter Jentsch's avatar
Peter Jentsch committed
    varnames, sim_ranges = zip(sims...)
Peter Jentsch's avatar
Peter Jentsch committed

Peter Jentsch's avatar
Peter Jentsch committed
    simvars = Iterators.product(sim_ranges...)
    progmeter = Progress((length(simvars)+1)*samples)
Peter Jentsch's avatar
Peter Jentsch committed

    without_app, _ = mean_solve(samples,get_parameters(); progmeter, record_degrees = true)
Peter Jentsch's avatar
Peter Jentsch committed
    next!(progmeter)
Peter Jentsch's avatar
Peter Jentsch committed
    default_parameters = get_app_parameters() 
Peter Jentsch's avatar
Peter Jentsch committed
    app_output = ThreadsX.map(simvars) do vars
Peter Jentsch's avatar
Peter Jentsch committed
        vars_with_names = NamedTuple{varnames}(vars)
        parameters = merge(default_parameters,vars_with_names)
        out,_ = mean_solve(samples, parameters;progmeter, record_degrees = true) 
Peter Jentsch's avatar
Peter Jentsch committed
        return out
    end
    display(length(simvars))
    fname = join(string.(varnames),"_")
Peter Jentsch's avatar
Peter Jentsch committed
    keyed_output = KeyedArray(app_output;NamedTuple{varnames}(sim_ranges)...)
Peter Jentsch's avatar
Peter Jentsch committed
    path = joinpath(PACKAGE_FOLDER,"abm_output","$fname.dat")
Peter Jentsch's avatar
Peter Jentsch committed
    serialize(path,(without_app,keyed_output))
Peter Jentsch's avatar
Peter Jentsch committed
    return fname
end
Peter Jentsch's avatar
Peter Jentsch committed
using ColorSchemes
using LaTeXStrings
Peter Jentsch's avatar
Peter Jentsch committed
function plot_parameter_plane(input_fname)
Peter Jentsch's avatar
Peter Jentsch committed
    path = joinpath(PACKAGE_FOLDER,"abm_output","$input_fname.dat")
    output_no_app, output = deserialize(path)
    var_ranges = axiskeys(output)
    vars = (L"\eta",L"\omega_{en}")



    mean_final_size(p) = mean(reduce(merge!,p.final_size_by_age));
    std_final_size(p) = std(reduce(merge!,p.final_size_by_age))
Peter Jentsch's avatar
Peter Jentsch committed
    base_outcome = mean_final_size(output_no_app)
    final_size_map = map(x-> (mean_final_size(x) - base_outcome),output)
    mean_weighted_degree_change(p,age) = mean(p.avg_weighted_degree_of_vaccinators[age])-mean(p.avg_weighted_degree[age])
    weighted_degree_map = [map(p -> mean_weighted_degree_change(p,i),output) for i in 1:3]
    datamaps = (weighted_degree_map..., final_size_map,map(std_final_size,output_data))
    fnames = [
        "wdg_change_Y.pdf",
        "wdg_change_M.pdf",
        "wdg_change_O.pdf", 
        "final_size_standard_dev.pdf"
Peter Jentsch's avatar
Peter Jentsch committed
    titles = [
        "Average w. deg. of vaccinators minus average w. deg., Y",
        "Average w. deg. of vaccinators minus average w. deg., M",
        "Average w. deg. of vaccinators minus average w. deg., O",
Peter Jentsch's avatar
Peter Jentsch committed
        "Effect of notifications on tot. infections",
        "Standard deviation from the mean of total infection size"
Peter Jentsch's avatar
Peter Jentsch committed
    ]
    for (fname,title,datamap) in zip(fnames,titles,datamaps)
Peter Jentsch's avatar
Peter Jentsch committed
        p = heatmap(var_ranges[1],var_ranges[2],datamap; title, xlabel = vars[1], ylabel = vars[2], seriescolor=cs, size = (600,400))
Peter Jentsch's avatar
Peter Jentsch committed
        savefig(p,joinpath(PACKAGE_FOLDER,"plots","app_heatmaps","$fname"))
Peter Jentsch's avatar
Peter Jentsch committed
    end
end