def plot_weighted_cc_per_hfca(self, weighted_ccs_model_agg_by_hfca, ccs_model_agg_by_hfca_cluster_id): clusters_processed = 0 for hfca_id, weighted_ccs_combos in weighted_ccs_model_agg_by_hfca.iteritems(): weighted_ccs_by_bin = {} for i in range(0, cc_num_fold_bins): weighted_ccs_by_bin[i] = [] for weighted_ccs_combo in weighted_ccs_combos: sum_weighted_ccs = cc_num_fold_bins * [0] for weighted_ccs in weighted_ccs_combo: sum_weighted_ccs = np.add(sum_weighted_ccs, weighted_ccs) for i in range(0, cc_num_fold_bins): weighted_ccs_by_bin[i].append(sum_weighted_ccs[i]) per_bottom = [] per_top = [] per_median = [] for i in range(0, cc_num_fold_bins): weighted_ccs_by_bin_idx = weighted_ccs_by_bin[i] per_bottom.append( satp(weighted_ccs_by_bin_idx, 2.5) ) per_top.append( satp(weighted_ccs_by_bin_idx, 97.5) ) per_median.append( satp(weighted_ccs_by_bin_idx, 50) ) ''' debug_p('length of weighted ccs_combos array ' + str(len(weighted_ccs_combos))) ''' debug_p('length of bin 0 in weighted_ccs_by_bin ' + str(len(weighted_ccs_by_bin[0]))) for cluster_id in hfca_id_2_cluster_ids(hfca_id): fig = plt.figure(cluster_id, figsize=(9.2, 4), dpi=100, facecolor='white') gs = gridspec.GridSpec(1, 4) ax = plt.subplot(gs[0:4]) x_smooth = np.linspace(0, cc_num_fold_bins-1,60) per_bottom_smooth = spline(range(0, cc_num_fold_bins),per_bottom,x_smooth) per_top_smooth = spline(range(0, cc_num_fold_bins),per_top,x_smooth) per_median_smooth = spline(range(0, cc_num_fold_bins),per_median,x_smooth) ax.plot(x_smooth, per_bottom_smooth, alpha=1, linewidth=0.5, color = 'black', linestyle=':', label = '2.5 percentile HS weighted: prevalence space samples', marker = None) ax.plot(x_smooth, per_top_smooth, alpha=1, linewidth=0.5, color = 'black', linestyle=':', label = '97.5 percentile HS weighted: prevalence space samples', marker = None) ax.plot(x_smooth, per_median_smooth, alpha=1, linewidth=2.0, color = 'magenta', linestyle='-', label = 'median HS weighted: prevalence space samples', marker = None) ax.fill_between(x_smooth, per_bottom_smooth, per_top_smooth, facecolor='gray', alpha=0.5, interpolate=True) cluster_cat = get_cluster_category(cluster_id) opt_group_key = self.best_fits[cluster_id]['group_key'] opt_sim_key_cc = self.best_fits[cluster_id]['cc_penalty']['sim_key'] cc_trace_opt_cc = self.calib_data[cluster_cat][opt_group_key][opt_sim_key_cc] opt_sim_key_prev = self.best_fits[cluster_id]['mse']['sim_key'] cc_trace_opt_prev = self.calib_data[cluster_cat][opt_group_key][opt_sim_key_prev] opt_sim_key_fit = self.best_fits[cluster_id]['fit']['sim_key'] cc_trace_opt_fit = self.calib_data[cluster_cat][opt_group_key][opt_sim_key_fit] ccs_model_agg_cc, ccs_ref_agg = get_cc_model_ref_traces(cc_trace_opt_cc, cluster_id) ccs_model_agg_prev, ccs_ref_agg = get_cc_model_ref_traces(cc_trace_opt_prev, cluster_id) ccs_model_agg_fit, ccs_ref_agg = get_cc_model_ref_traces(cc_trace_opt_fit, cluster_id) facility = hfca_id_2_facility(hfca_id) ax.plot(range(0, len(ccs_model_agg_cc)), ccs_model_agg_cc, alpha=1, linewidth=1, color = 'blue', label = 'Best fit: clinical cases', marker = 's') ax.plot(range(0, len(ccs_model_agg_prev)), ccs_model_agg_prev, alpha=1, linewidth=1, color = 'magenta', label = 'Best fit: prevalence', marker = 'o') ax.plot(range(0, len(ccs_model_agg_fit)), ccs_model_agg_fit, alpha=1, linewidth=1, color = 'black', label = 'Best fit: prevalence + clinical cases', marker = '*') ax.plot(range(0, len(ccs_ref_agg)), ccs_ref_agg, alpha=1, linewidth=2.0, linestyle = '-', color = 'red', label = 'Observed in ' + facility, marker = None) for i,sample_ccs in enumerate(ccs_model_agg_by_hfca_cluster_id[hfca_id][cluster_id]['unweighted']): if i == 0: ax.plot(range(0, cc_num_fold_bins), sample_ccs[2], alpha=0.5, linewidth=0.5, color = 'magenta', label = 'Opt 5-percentile samples for cluster ' + cluster_id, marker = None) #ax.plot(range(0, cc_num_fold_bins), sample_ccs[2]) else: ax.plot(range(0, cc_num_fold_bins), sample_ccs[2], alpha=0.5, linewidth=0.5, color = 'magenta', marker = None) plt.xlabel('6-week bins', fontsize=8) plt.ylabel('Clinical cases', fontsize=8) legend = plt.legend(loc=1, fontsize=8) plt.xlim(0,8) plt.title('Clinical cases timeseries', fontsize = 8, fontweight = 'bold', color = 'black') plt.gca().tick_params(axis='x', labelsize=8) plt.gca().tick_params(axis='y', labelsize=8) plt.tight_layout() output_plot_file_path = os.path.join(self.root_sweep_dir, weighted_cc_traces_plots_dir, weighted_cc_traces_base_file_name + cluster_id + '.png') plt.savefig(output_plot_file_path, dpi = 300, format='png') plt.close() clusters_processed = clusters_processed + 1 debug_p('Processed weighting and plotting clinical cases for ' + str(clusters_processed) + ' clusters')
def plot_calib_cc_traces_clusters(self): for cluster_id, cluster_record in self.best_fits.iteritems(): debug_p('Plotting clinical cases trace for cluster ' + cluster_id + ' in category ' + self.category) fig = plt.figure(cluster_id, figsize=(9.2, 4), dpi=100, facecolor='white') opt_sim_key = cluster_record['sim_key'] opt_group_key = cluster_record['group_key'] opt_cc_trace = self.calib_data[opt_group_key][opt_sim_key]['cc'] ccs_model_agg, ccs_ref_agg = get_cc_model_ref_traces(opt_cc_trace, cluster_id) #debug_p('model length ' + str(len(ccs_model_agg))) #debug_p('ref length ' + str(len(ccs_ref_agg))) hfca_id = cluster_id.split('_')[0] facility = hfca_id_2_facility(hfca_id) gs = gridspec.GridSpec(1, 4) ymax = 16 scale_int = np.array(range(0,ymax+1)) pal = cm = plt.get_cmap('jet') cNorm = colors.Normalize(vmin=0, vmax=ymax+1) scalarMap = cmx.ScalarMappable(norm=cNorm, cmap=pal) ax = plt.subplot(gs[0:4]) #ax.set_ylim(1000) opt_const_h = cluster_record['habs']['const_h'] opt_x_temp_h = cluster_record['habs']['temp_h'] opt_itn = cluster_record['ITN_cov'] opt_drug = cluster_record['MSAT_cov'] opt_fit_value = cluster_record['fit_value'] # the following code only relevant for rank correlation cc penalty fit opt_rho = None opt_p_val = None if 'rho' in cluster_record: opt_rho = cluster_record['rho'] if 'p_val' in cluster_record: opt_p_val = cluster_record['p_val'] ''' mod_dates, mod_cases = zip(*ccs_model_agg) ref_dates, ref_cases = zip(*ccs_ref_agg) ''' if opt_rho and opt_p_val: ax.plot(range(0, len(ccs_model_agg)), ccs_model_agg, alpha=1, linewidth=2.0, c = 'black', label = 'Best fit: eff. constant=' + str(opt_const_h*opt_x_temp_h) + ', all='+str(opt_x_temp_h) + ', drug cov.' + str(opt_drug) + ', ITN dist. = '+str(opt_itn) + ', rho=' + str(opt_rho) + ', p-val=' + str(opt_p_val), marker = opt_marker, markersize = opt_marker_size) else: ax.plot(range(0, len(ccs_model_agg)), ccs_model_agg, alpha=1, linewidth=2.0, c = 'black', label = 'Best fit: eff. constant=' + str(opt_const_h*opt_x_temp_h) + ', all='+str(opt_x_temp_h) + ', drug cov.' + str(opt_drug) + ', ITN dist. = '+str(opt_itn), marker = opt_marker, markersize = opt_marker_size) ax.plot(range(0, len(ccs_ref_agg)), ccs_ref_agg, alpha=1, linewidth=2.0, c = 'red', label = 'Observed in ' + facility) ''' if opt_rho and opt_p_val: ax.plot(mod_dates, mod_cases, alpha=1, linewidth=2.0, c = 'black', label = 'Best fit: eff. constant=' + str(opt_const_h*opt_x_temp_h) + ', all='+str(opt_x_temp_h) + ', drug cov.' + str(opt_drug) + ', ITN dist. = '+str(opt_itn) + ', rho=' + str(opt_rho) + ', p-val=' + str(opt_p_val), marker = opt_marker, markersize = opt_marker_size) else: ax.plot(mod_dates, mod_cases, alpha=1, linewidth=2.0, c = 'black', label = 'Best fit: eff. constant=' + str(opt_const_h*opt_x_temp_h) + ', all='+str(opt_x_temp_h) + ', drug cov.' + str(opt_drug) + ', ITN dist. = '+str(opt_itn), marker = opt_marker, markersize = opt_marker_size) ax.bar(ref_dates, ref_cases, width=12,color='red',edgecolor='red', linewidth=0, label = 'Observed in ' + facility) #ax.plot(dates, ccs_ref_agg, alpha=1, linewidth=2.0, c = 'red', label = 'Observed in ' + facility) ''' count_traces = 0 for sim_key, fit_entry in self.all_fits[cluster_id].iteritems(): if sim_key == 'min_terms' or sim_key == 'max_terms': continue group_key = fit_entry['group_key'] fit_val = fit_entry['fit_val'] if sim_key == opt_sim_key or fit_val > opt_fit_value + opt_fit_value*subopt_plots_threshold or count_traces > 10: # do not plot optimal traces since we've already plotted it ;also do not plot too suboptimal traces continue cc_trace = self.calib_data[group_key][sim_key]['cc'] ccs_model_agg, ccs_ref_agg = get_cc_model_ref_traces(cc_trace, cluster_id) # the following code only relevant for rank correlation cc penalty fit rho = None p_val = None if 'rho' in fit_entry: rho = fit_entry['rho'] if 'p_val' in fit_entry: p_val = fit_entry['p_val'] const_h = fit_entry['const_h'] x_temp_h = fit_entry['x_temp_h'] itn = fit_entry['itn_level'] drug = fit_entry['drug_cov'] ''' mod_dates, mod_cases = zip(*ccs_model_agg) ref_dates, ref_cases = zip(*ccs_ref_agg) ''' marker = self.get_marker(sim_key, count_traces) if rho and p_val: #ax.plot(range(0, len(ccs_model_agg)), ccs_model_agg, alpha=0.75, linewidth=0.5, marker = marker, markersize = 0.5*opt_marker_size, label = 'eff. constant=' + str(const_h*x_temp_h) + ', all='+str(x_temp_h) + 'rho=' + str(rho) + ', p-val=' + str(p_val)) #ax.plot(range(0, len(ccs_model_agg)), ccs_model_agg, alpha=0.75, linewidth=0.5, marker = marker, markersize = 0.5*opt_marker_size) ax.plot(range(0, len(ccs_model_agg)), ccs_model_agg, alpha=0.75, linewidth=0.5) else: #ax.plot(range(0, len(ccs_model_agg)), ccs_model_agg, alpha=0.75, linewidth=0.5, marker = marker, markersize = 0.5*opt_marker_size, label = 'eff. constant=' + str(const_h*x_temp_h) + ', all='+str(x_temp_h)) ax.plot(range(0, len(ccs_model_agg)), ccs_model_agg, alpha=0.75, linewidth=0.5) #ax.plot(range(0, len(ccs_ref_agg)), ccs_ref_agg, alpha=1, linewidth=1.0, c = 'red', label = 'Observed in ' + facility) count_traces = count_traces + 1 ''' if rho and p_val: ax.plot(mod_dates, mod_cases, alpha=0.75, linewidth=2.0, marker = marker, label = 'eff. constant=' + str(const_h*x_temp_h) + ', all='+str(x_temp_h) + 'rho=' + str(rho) + ', p-val=' + str(p_val)) else: ax.plot(mod_dates, mod_cases, alpha=0.75, linewidth=2.0, marker = marker, label = 'eff. constant=' + str(const_h*x_temp_h) + ', all='+str(x_temp_h)) ax.bar(ref_dates, ref_cases, width=12,color='red',edgecolor='red', linewidth=0, label = 'Observed in ' + facility) ''' plt.xlabel('6-week bins', fontsize=8) plt.ylabel('Clinical cases', fontsize=8) legend = plt.legend(loc=1, fontsize=8) ''' init_font_size = 8 for i,label in enumerate(legend.get_texts()): if i > 2: label.set_fontsize(max(init_font_size - i, 5)) ''' plt.title('Clinical cases timeseries', fontsize = 8, fontweight = 'bold', color = 'black') plt.gca().tick_params(axis='x', labelsize=8) plt.gca().tick_params(axis='y', labelsize=8) plt.tight_layout() output_plot_file_path = os.path.join(self.root_sweep_dir, cc_traces_plots_dir, cc_traces_base_file_name + cluster_id + '.png') plt.savefig(output_plot_file_path, dpi = 300, format='png') plt.close()