Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
clase:iabd:pia:2eval:tema08.intervalo_confianza [2024/05/18 17:32] admin [Comparación de métricas] |
clase:iabd:pia:2eval:tema08.intervalo_confianza [2025/03/03 11:45] (actual) admin [Ejercicios] |
||
---|---|---|---|
Línea 1: | Línea 1: | ||
- | ====== 8. Optimización | + | ====== 8.e Intervalos |
Cuando calculamos una métrica realmente no tenemos el valor real de la métrica sino un valor (llamado estimador) que nos ayuda para saber el verdadero valor de la métrica. | Cuando calculamos una métrica realmente no tenemos el valor real de la métrica sino un valor (llamado estimador) que nos ayuda para saber el verdadero valor de la métrica. | ||
Línea 74: | Línea 74: | ||
<sxh python> | <sxh python> | ||
- | import | + | from statsmodels.stats.proportion |
# Número de éxitos | # Número de éxitos | ||
Línea 85: | Línea 85: | ||
methods=[' | methods=[' | ||
for method in methods: | for method in methods: | ||
- | lower, upper = smp.proportion_confint(success, | + | lower, upper = proportion_confint(success, |
print(f" | print(f" | ||
Línea 106: | Línea 106: | ||
¿Porque Jeffreys? Porque es el que usa estadística bayesiana para calcular el intervalo de confianza. Así que realmente no es un intervalo de confianza sino un intervalo de credibilidad. ¿cual es la diferencia? Vamos a explicarlo con el ejemplo que estamos usando: | ¿Porque Jeffreys? Porque es el que usa estadística bayesiana para calcular el intervalo de confianza. Así que realmente no es un intervalo de confianza sino un intervalo de credibilidad. ¿cual es la diferencia? Vamos a explicarlo con el ejemplo que estamos usando: | ||
* **Intervalo de confianza** | * **Intervalo de confianza** | ||
- | * **Intervalo de credibilidad** | + | * **Intervalo de credibilidad** |
En el siguiente código se puede ver como da el mismo resultado usando '' | En el siguiente código se puede ver como da el mismo resultado usando '' | ||
Línea 134: | Línea 134: | ||
</ | </ | ||
+ | ¿Y cuando se podrían usar otros? El resto no son bayesianos así que dan " | ||
+ | * Clopper-Pearson o Jeffreys: Tamaño de muestra pequeño | ||
+ | * Wilson o Agresti-Coull: | ||
+ | * Normal (Wald): No es recomendable | ||
Línea 242: | Línea 246: | ||
{{: | {{: | ||
+ | ===== Comparación avanzada de métricas ===== | ||
+ | En caso de que los intervalos se solapen, no significa exactamente que tengan la misma métrica. Para saber si realmente la tienen es necesario restar las distribuciones y ver si el cero (o algo cercano al cero) está en dicha resta. | ||
+ | |||
+ | Para hacer los cálculos vamos a crear una serie de funciones en python. | ||
+ | |||
+ | <sxh python> | ||
+ | def get_hdi(sample, | ||
+ | """ | ||
+ | Calculation of 100(1-a)% HDI for sample | ||
+ | Chen-Shao HPD Estimation algorithm | ||
+ | http:// | ||
+ | """ | ||
+ | smpl = np.sort(sample) | ||
+ | n = len(smpl) | ||
+ | ckW = max(smpl) - min(smpl) | ||
+ | cki = 0 | ||
+ | RB = int(n * (hdi_prob)) | ||
+ | L0 = 0 | ||
+ | U0 = n-1 | ||
+ | while (RB + cki < n): | ||
+ | if smpl[RB + cki] - smpl[cki] < ckW: | ||
+ | ckW = smpl[RB + cki] - smpl[cki] | ||
+ | L0 = cki | ||
+ | U0 = RB + cki | ||
+ | cki += 1 | ||
+ | ckW = max(smpl) - min(smpl) | ||
+ | cki = 1 | ||
+ | LB = n - int(n * (hdi_prob)) | ||
+ | L1 = 0 | ||
+ | U1 = n-1 | ||
+ | while (LB - cki >= 0): | ||
+ | if smpl[n - cki] - smpl[LB - cki] < ckW: | ||
+ | ckW = smpl[n - cki] - smpl[LB - cki] | ||
+ | U1 = n - cki | ||
+ | L1 = LB - cki | ||
+ | cki += 1 | ||
+ | return [smpl[int((L1+L0)/ | ||
+ | |||
+ | |||
+ | |||
+ | def get_interval(success, | ||
+ | beta_a=0.5+success | ||
+ | beta_b=0.5+total-success | ||
+ | actual_beta=beta(beta_a, | ||
+ | hdi=get_hdi(actual_beta.rvs(100000), | ||
+ | return hdi | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | def get_hdi_compare(success1, | ||
+ | beta_a1=0.5+success1 | ||
+ | beta_b1=0.5+total1-success1 | ||
+ | beta1=beta(beta_a1, | ||
+ | beta_a2=0.5+success2 | ||
+ | beta_b2=0.5+total1-success2 | ||
+ | beta2=beta(beta_a2, | ||
+ | |||
+ | n_samples = 100000 | ||
+ | datos1=beta1.rvs(n_samples) | ||
+ | datos2=beta2.rvs(n_samples) | ||
+ | |||
+ | resultado=datos1-datos2 | ||
+ | | ||
+ | lower, | ||
+ | |||
+ | return [lower, | ||
+ | </ | ||
+ | |||
+ | Lo primero es que hemos creado la función '' | ||
+ | |||
+ | <sxh python> | ||
+ | TP1=131 | ||
+ | FN1=16 | ||
+ | |||
+ | TP2=124 | ||
+ | FN2=23 | ||
+ | |||
+ | |||
+ | interval1=get_interval(TP1, | ||
+ | interval2=get_interval(TP2, | ||
+ | |||
+ | |||
+ | figure=plt.figure(figsize=(5.5, | ||
+ | axes = figure.add_subplot() | ||
+ | |||
+ | intervalos=[ | ||
+ | interval1, | ||
+ | interval2 | ||
+ | ] | ||
+ | ylabels=[' | ||
+ | |||
+ | plot_intervals(axes, | ||
+ | </ | ||
+ | |||
+ | La gráfica resultante es: | ||
+ | {{: | ||
+ | |||
+ | |||
+ | Y para saber si realmente tienen la misma métrica simplemente ejecutamos el siguiente código: | ||
+ | <sxh python> | ||
+ | print(get_hdi_compare(TP1, | ||
+ | </ | ||
+ | Y el resultado es: | ||
+ | <sxh base> | ||
+ | [-0.029769860656823077, | ||
+ | </ | ||
+ | |||
+ | **Si el intervalo incluye al cero es que tienen la misma métrica.** Y en el ejemplo como el intervalo contiene el cero es que tienen la misma métrica. | ||
+ | |||
+ | Veamos ahora otro ejemplo: | ||
+ | <sxh python> | ||
+ | TP1=131 | ||
+ | FN1=16 | ||
+ | |||
+ | TP2=116 | ||
+ | FN2=31 | ||
+ | |||
+ | |||
+ | interval1=get_interval(TP1, | ||
+ | interval2=get_interval(TP2, | ||
+ | |||
+ | |||
+ | figure=plt.figure(figsize=(5.5, | ||
+ | axes = figure.add_subplot() | ||
+ | |||
+ | intervalos=[ | ||
+ | interval1, | ||
+ | interval2 | ||
+ | ] | ||
+ | ylabels=[' | ||
+ | |||
+ | plot_intervals_with_guides(axes, | ||
+ | </ | ||
+ | {{: | ||
+ | |||
+ | <sxh python> | ||
+ | print(get_hdi_compare(TP1, | ||
+ | </ | ||
+ | |||
+ | <sxh base> | ||
+ | [0.018992455698845223, | ||
+ | </ | ||
+ | |||
+ | Por lo que en este caso se solapan pero no tiene la misma métrica. | ||
+ | |||
+ | De todas en este caso, el intervalo está rozando el cero, hay un concepto llamado [[https:// | ||
+ | Mas información: | ||
+ | * {{ : | ||
+ | * {{ : | ||
+ | * {{ : | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
===== Ejercicios ===== | ===== Ejercicios ===== | ||
Línea 284: | Línea 442: | ||
¿Que umbral elegirías? | ¿Que umbral elegirías? | ||
- | <note tip> | + | <note tip> |
'' | '' | ||