Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
hpd_array = np.array(
[
hpd(
row,
credible_interval=credible_interval,
circular=circular,
multimodal=multimodal,
)
for row in ary.T
]
)
return hpd_array
if multimodal:
if ary.dtype.kind == "f":
density, lower, upper = _fast_kde(ary)
range_x = upper - lower
dx = range_x / len(density)
bins = np.linspace(lower, upper, len(density))
else:
bins = get_bins(ary)
_, density, _ = histogram(ary, bins=bins)
dx = np.diff(bins)[0]
density *= dx
idx = np.argsort(-density)
intervals = bins[idx][density[idx].cumsum() <= credible_interval]
intervals.sort()
intervals_splitted = np.split(intervals, np.where(np.diff(intervals) >= dx * 1.1)[0] + 1)
def _violinplot(val, shade, bw, ax, **kwargs_shade):
"""Auxiliary function to plot violinplots."""
density, low_b, up_b = _fast_kde(val, bw=bw)
x = np.linspace(low_b, up_b, len(density))
x = np.concatenate([x, x[::-1]])
density = np.concatenate([-density, density[::-1]])
ax.patch(density, x, fill_alpha=shade, line_width=0, **kwargs_shade)
yvals.append(y)
colors.append(color)
values = values.flatten()
values = values[np.isfinite(values)]
if ridgeplot_kind == "auto":
kind = "hist" if np.all(np.mod(values, 1) == 0) else "density"
else:
kind = ridgeplot_kind
if kind == "hist":
bins = get_bins(values)
_, density, x = histogram(values, bins=bins)
x = x[:-1]
elif kind == "density":
density, lower, upper = _fast_kde(values)
x = np.linspace(lower, upper, len(density))
xvals.append(x)
pdfs.append(density)
scaling = max(np.max(j) for j in pdfs)
for y, x, pdf, color in zip(yvals, xvals, pdfs, colors):
y = y * np.ones_like(x)
yield x, y, mult * pdf / scaling + y, color
if ecdf:
ax.plot(
np.hstack((0, loo_pit, 1)), np.hstack((0, loo_pit - loo_pit_ecdf, 0)), **plot_kwargs
)
if ecdf_fill:
ax.fill_between(unif_ecdf, p975 - unif_ecdf, p025 - unif_ecdf, **fill_kwargs)
else:
ax.plot(unif_ecdf, p975 - unif_ecdf, unif_ecdf, p025 - unif_ecdf, **plot_unif_kwargs)
else:
if use_hpd:
plot_hpd(x_vals, unif_densities, **hpd_kwargs)
else:
for idx in range(n_unif):
unif_density, _, _ = _fast_kde(unif[idx, :], xmin=0, xmax=1)
ax.plot(x_vals, unif_density, **plot_unif_kwargs)
ax.plot(x_vals, loo_pit_kde, **plot_kwargs)
ax.tick_params(labelsize=xt_labelsize)
if legend:
if not (use_hpd or (ecdf and ecdf_fill)):
label = "{:.3g}% credible interval".format(credible_interval) if ecdf else "Uniform"
ax.plot([], label=label, **plot_unif_kwargs)
ax.legend()
if backend_show(show):
plt.show()
return ax
def display_point_estimate(max_data):
if not point_estimate:
return
if point_estimate not in ("mode", "mean", "median"):
raise ValueError("Point Estimate should be in ('mode','mean','median')")
if point_estimate == "mean":
point_value = values.mean()
elif point_estimate == "mode":
if isinstance(values[0], float):
density, lower, upper = _fast_kde(values, bw=bw)
x = np.linspace(lower, upper, len(density))
point_value = x[np.argmax(density)]
else:
point_value = mode(values)[0][0]
elif point_estimate == "median":
point_value = np.median(values)
sig_figs = format_sig_figs(point_value, round_to)
point_text = "{point_estimate}={point_value:.{sig_figs}g}".format(
point_estimate=point_estimate, point_value=point_value, sig_figs=sig_figs
)
ax.text(x=[point_value], y=[max_data * 0.8], text=[point_text], text_align="center")
Credible intervals. Defaults to 0.94
point_estimate : str or None
'mean' or 'median'
shade : float
Alpha blending value for the shaded area under the curve, between 0 (no shade) and 1
(opaque). Defaults to 0.
ax : matplotlib axes
"""
if vec.dtype.kind == "f":
if credible_interval != 1:
hpd_ = hpd(vec, credible_interval, multimodal=False)
new_vec = vec[(vec >= hpd_[0]) & (vec <= hpd_[1])]
else:
new_vec = vec
density, xmin, xmax = _fast_kde(new_vec, bw=bw)
density *= credible_interval
x = np.linspace(xmin, xmax, len(density))
ymin = density[0]
ymax = density[-1]
if outline:
ax.plot(x, density, color=color, lw=linewidth)
ax.plot([xmin, xmin], [-ymin / 100, ymin], color=color, ls="-", lw=linewidth)
ax.plot([xmax, xmax], [-ymax / 100, ymax], color=color, ls="-", lw=linewidth)
if shade:
ax.fill_between(x, density, color=color, alpha=shade)
else:
xmin, xmax = hpd(vec, credible_interval, multimodal=False)
bins = range(xmin, xmax + 2)
ax_i.plot(
bin_edges,
hist,
label="Observed {}".format(var_name),
color="k",
linewidth=linewidth,
zorder=3,
drawstyle=plot_kwargs["drawstyle"],
)
pp_densities = []
pp_xs = []
for vals in pp_sampled_vals:
vals = np.array([vals]).flatten()
if dtype == "f":
pp_density, lower, upper = _fast_kde(vals)
pp_x = np.linspace(lower, upper, len(pp_density))
pp_densities.append(pp_density)
pp_xs.append(pp_x)
else:
bins = get_bins(vals)
_, hist, bin_edges = histogram(vals, bins=bins)
hist = np.concatenate((hist[:1], hist))
pp_densities.append(hist)
pp_xs.append(bin_edges)
if animated:
animate, init = _set_animation(
pp_sampled_vals, ax_i, dtype=dtype, kind=kind, plot_kwargs=plot_kwargs
)
else:
def display_point_estimate():
if not point_estimate:
return
if point_estimate not in ("mode", "mean", "median"):
raise ValueError("Point Estimate should be in ('mode','mean','median')")
if point_estimate == "mean":
point_value = values.mean()
elif point_estimate == "mode":
if isinstance(values[0], float):
density, lower, upper = _fast_kde(values, bw=bw)
x = np.linspace(lower, upper, len(density))
point_value = x[np.argmax(density)]
else:
point_value = mode(values)[0][0]
elif point_estimate == "median":
point_value = np.median(values)
sig_figs = format_sig_figs(point_value, round_to)
point_text = "{point_estimate}={point_value:.{sig_figs}g}".format(
point_estimate=point_estimate, point_value=point_value, sig_figs=sig_figs
)
ax.text(
point_value,
plot_height * 0.8,
point_text,
size=ax_labelsize,
horizontalalignment="center",
def animate(i):
y_vals, lower, upper = _fast_kde(pp_sampled_vals[i])
x_vals = np.linspace(lower, upper, len(y_vals))
line.set_data(x_vals, y_vals)
return line