Script
Pruebas de hipótesis
Primero los supuestos, después la prueba. Y la otra prueba corrida igual, para que quede escrito cuándo esa decisión cambió la conclusión.
Proyecto en R y Python · ZIP · 84 KB
En R alcanza con lo que ya trae; en Python hace falta SciPy.
El orden importa
El árbol de decisión del sitio da un par para cada situación: una prueba y una alternativa. El árbol no mira los datos —no puede, son seis preguntas—, así que cuál de las dos corresponde lo deciden los supuestos.
| Situación | Prueba | Si el supuesto falla |
|---|---|---|
| Dos grupos, los dos normales | t de Welch | Mann-Whitney |
| Tres o más, normales, varianzas homogéneas | ANOVA de un factor | ANOVA de Welch |
| Tres o más, alguno no normal | — | Kruskal-Wallis |
| Categórica, todas las esperadas ≥ 5 | Chi-cuadrado | Fisher (solo 2×2) |
Cuándo la decisión importa de verdad
Casi nunca. En la mayoría de las comparaciones las dos pruebas dicen lo mismo y discutir el supuesto es una conversación de seminario. Por eso el script corre las dos siempre y marca la excepción. Mirá el gasto en materiales del ejemplo que viene adentro:
| Gasto mensual en materiales | n | Media | Mediana | Desvío |
|---|---|---|---|---|
| Control | 75 | 46.827 | 29.469 | 81.494 |
| Tratamiento | 75 | 42.134 | 41.096 | 14.102 |
El control gasta más en promedio y menos en la mediana. No es un error: unos pocos gastaron una fortuna y le arrastraron la media, y el desvío del control es casi seis veces el del otro grupo. Shapiro-Wilk rechaza la normalidad en el control, así que la prueba que corresponde es Mann-Whitney.
La prueba t compara medias: p = 0,625, ninguna diferencia. Mann-Whitney compara rangos, que los valores extremos no mueven: p < 0,001, con un r de 0,343. La misma comparación, dos conclusiones opuestas, y una sola de las dos corresponde.
La columna cambia_la_conclusion marca estos casos. En el ejemplo pasa en dos de las catorce comparaciones; en las otras doce, elegir una u otra no cambia una palabra del informe.
Shapiro-Wilk va por grupo, no sobre la variable entera
El supuesto es sobre la distribución dentro de cada grupo. Probarlo sobre la variable completa, cuando los grupos tienen medias distintas, es probar otra cosa —una mezcla de dos normales no es normal— y casi siempre rechazar. En el ejemplo se evalúan 25 grupos y 14 de los 25 grupos no pasan.
El veredicto no sale solo del valor p. Con menos de quince datos ninguna prueba de normalidad tiene potencia, así que no rechazar no es evidencia de nada: ahí el veredicto dice sin-potencia y el informe lo aclara en una sección aparte. Con más de trescientos pasa lo contrario, y también queda anotado.
Levene se informa siempre; con dos grupos no decide nada
Es la confusión más común del paso previo. Con dos grupos, la prueba que corresponde es la de Welch, que no supone varianzas iguales: que Levene rechace no cambia nada. Con tres o más sí decide, entre la ANOVA clásica y la de Welch. La columna decide lo dice fila por fila, para que nadie corra una prueba distinta por un supuesto que no aplicaba.
El tamaño del efecto, en todas las filas
Un valor p dice que algo pasa; no dice cuánto. Cada fila lleva la medida que corresponde a su prueba —d de Hedges, r de rangos, eta², épsilon² o V de Cramér— con la etiqueta de Cohen al lado.
Esa etiqueta conviene usarla con pinzas: Cohen publicó esos cortes advirtiendo que eran provisorios y que había que reemplazarlos por conocimiento del campo apenas lo hubiera. Medio siglo después se los cita como si fueran una propiedad de la naturaleza. Una d de 0,2 puede ser enorme si se trata de mortalidad y despreciable si se trata de un puntaje de satisfacción.
Qué deja
| Archivo | Qué trae |
|---|---|
| normalidad.csv | Shapiro-Wilk dentro de cada grupo, con el veredicto |
| homogeneidad.csv | Levene con centro en la mediana, y si decide algo o no |
| esperadas.csv | La frecuencia esperada más chica de cada tabla |
| pruebas.csv | La prueba elegida, por qué, el tamaño del efecto y la alternativa |
| avisos.csv | Cada supuesto que no se cumple, con la variable que lo disparó |
| pruebas.md | El informe redactado, listo para pegar |
La base de ejemplo trae dos variables de agrupamiento —una de dos niveles y otra de tres— para que el proyecto recorra las dos ramas del árbol sin que haya que editar nada. El único parámetro está en datos/parametros.csv: el alfa, que mueve a la vez los veredictos de normalidad, de homogeneidad y de significación.
Lo que no hace
No corrige por comparaciones múltiples ni hace post hoc: un ANOVA significativo dice que algún grupo difiere, no cuál.
No trae la prueba exacta de Fisher para tablas de más de 2×2. R y SciPy no la resuelven igual, y este proyecto no publica nada que dé distinto en cada idioma.
No cubre datos apareados. Todas las comparaciones son entre grupos independientes.
Cómo está verificado
Corriéndolo: el verificador descomprime lo publicado, lo corre con Python y con R, exige que los siete archivos sean idénticos y recalcula todo con una implementación aparte —Shapiro-Wilk contra scipy, Levene y la ANOVA de Welch contra la fórmula escrita de nuevo—. Y comprueba la cadena de decisión, que es lo que importa acá: el par prueba/alternativa va contra resolver() del árbol del sitio, invocado desde Node, así que si una rama del árbol cambia y el descargable no, falla. Prueba además cuatro bases distintas: tres grupos normales con varianzas veinte veces distintas —la única rama que el ejemplo no recorre, la de la ANOVA de Welch—, grupos de menos de quince casos, un alfa de 0,01 y una variable sin variación. Son 832 comprobaciones, y los trece sabotajes se detectan.