def graficar_dist_muestral(medias_nchico, medias_ngrande, mu, n_chico, n_grande, titulo):
fig, ax = plt.subplots(figsize=(8.4, 4.3))
ax.hist(medias_nchico, bins=28, density=True, alpha=0.55, label=f"n = {n_chico}")
ax.hist(medias_ngrande, bins=28, density=True, alpha=0.55, label=f"n = {n_grande}")
ax.axvline(mu, color="C3", linestyle="--", label=fr"$\mu$ = {mu:g}")
ax.set_xlabel("media muestral")
ax.set_ylabel("densidad")
ax.set_title(titulo)
ax.legend(fontsize=8)
plt.tight_layout()
plt.show()
def graficar_una_muestra(muestra, mu, low, high, titulo):
fig, ax = plt.subplots(figsize=(8.2, 3.6))
ax.scatter(muestra, np.zeros_like(muestra), alpha=0.45, s=28, label="observaciones")
ax.axvline(mu, color="C3", linestyle="--", label=fr"$\mu$ = {mu:g}")
ax.axvline(muestra.mean(), color="C0", label=fr"$\bar x$ = {muestra.mean():.2f}")
ax.hlines(0.35, low, high, color="C0", linewidth=4, label="IC 95%")
ax.set_yticks([])
ax.set_xlabel("latencia (ms)")
ax.set_title(titulo)
ax.legend(fontsize=8, loc="upper right")
plt.tight_layout()
plt.show()
def graficar_cobertura(intervalos, mu, titulo):
fig, ax = plt.subplots(figsize=(8.4, 5.2))
cubre = 0
for i, (lo, hi) in enumerate(intervalos):
ok = lo <= mu <= hi
cubre += int(ok)
ax.hlines(i, lo, hi, color="C0" if ok else "C3", linewidth=1.1)
ax.axvline(mu, color="0.2", linestyle="--", label=fr"$\mu$ = {mu:g}")
ax.set_xlabel("intervalo de confianza 95% para la media")
ax.set_ylabel("réplica")
ax.set_title(titulo)
ax.legend(fontsize=8)
plt.tight_layout()
plt.show()
return cubre
def graficar_pvalores(p_h0, p_h1, titulo):
fig, ax = plt.subplots(figsize=(8.2, 4.2))
ax.hist(p_h0, bins=20, range=(0, 1), density=True, alpha=0.55, label="bajo H0 (debe verse plano)")
ax.hist(p_h1, bins=20, range=(0, 1), density=True, alpha=0.55, label="bajo H1 (se acumula a la izquierda)")
ax.axvline(0.05, color="C3", linestyle="--", label=r"$\alpha$ = 0.05")
ax.set_xlabel("p-value")
ax.set_ylabel("densidad")
ax.set_title(titulo)
ax.legend(fontsize=8)
plt.tight_layout()
plt.show()
def graficar_tipo_i_ii(mu0, mu1, se, alpha, titulo):
z = stats.norm.ppf(1 - alpha / 2)
crit_lo, crit_hi = mu0 - z * se, mu0 + z * se
xs = np.linspace(mu0 - 4.5 * se, mu1 + 4.5 * se, 400)
f0 = stats.norm.pdf(xs, mu0, se)
f1 = stats.norm.pdf(xs, mu1, se)
fig, ax = plt.subplots(figsize=(8.6, 4.4))
ax.plot(xs, f0, label=fr"muestral si $H_0$ ($\mu$={mu0:g})")
ax.plot(xs, f1, label=fr"muestral si $H_1$ ($\mu$={mu1:g})")
ax.axvline(crit_lo, color="0.35", linestyle=":")
ax.axvline(crit_hi, color="0.35", linestyle=":", label="umbrales de rechazo")
ax.fill_between(xs, f0, where=(xs <= crit_lo) | (xs >= crit_hi), alpha=0.35, color="C3", label="tipo I (rechazar H0 cierta)")
ax.fill_between(xs, f1, where=(xs > crit_lo) & (xs < crit_hi), alpha=0.35, color="C1", label="tipo II (no rechazar H0 falsa)")
ax.set_xlabel(r"media muestral $\bar x$")
ax.set_ylabel("densidad")
ax.set_title(titulo)
ax.legend(fontsize=7, loc="upper right")
plt.tight_layout()
plt.show()
return crit_lo, crit_hi
def graficar_ab(a, b, titulo):
fig, ax = plt.subplots(figsize=(8.0, 4.2))
ax.boxplot([a, b], tick_labels=["A (actual)", "B (cuantizado)"], showfliers=False)
ax.scatter(np.ones(len(a)) + rng.normal(0, 0.04, len(a)), a, s=10, alpha=0.25)
ax.scatter(np.full(len(b), 2) + rng.normal(0, 0.04, len(b)), b, s=10, alpha=0.25)
ax.set_ylabel("latencia (ms)")
ax.set_title(titulo)
plt.tight_layout()
plt.show()