2 votos

¿Es éste un enfoque válido para la comprobación de hipótesis?

Llevo un tiempo como aficionado al aprendizaje automático y estoy intentando formalizar mi comprensión de los fundamentos estadísticos del análisis de datos y el aprendizaje automático. Mi lectura hasta ahora me ha llevado básicamente a pensar que el siguiente enfoque es válido.

Digamos que tengo algunos datos que representan la venta de casas; $n$ muestras de una variable dependiente $Y$ que es el precio de venta de la vivienda, más una serie de variables independientes que describen características de la vivienda o de la transacción. Para los fines de esta pregunta, consideraré sólo una; $X_0$ siendo "MSZoning", que es una clasificación de la transacción y por lo tanto es una variable categórica.

Quiero determinar si $X_0$ y $Y$ están asociados a un nivel estadísticamente significativo. Mis opciones son realizar un ANOVA o una prueba de Kruskal-Wallis. Mis lecturas me han llevado a elegir el ANOVA, a menos que los datos no cumplan los supuestos que hacen que esa prueba sea válida, por lo que al bajar la lista compruebo la distribución normal de cada grupo trazando esas distribuciones (transformadas en logaritmos):

import pandas as pd
import seaborn as sns
import scipy.stats as ss

# A dataframe is instantiated here

fig, ax = plt.subplots(figsize=(24, 12))
for val in df.MSZoning.unique():
    sns.distplot(np.log1p(df.loc[df.MSZoning == val].SalePrice), ax=ax)
plt.show()

Distribution plot

En este punto, considero que esas distribuciones están demasiado lejos de la normalidad para que se cumplan los supuestos del ANOVA, por lo que voy a realizar una prueba de Kruskal-Wallis. Mi primera pregunta es:

¿Existe una forma mejor de evaluar si las distribuciones de cada grupo se acercan lo suficiente a la normalidad para que se cumplan los supuestos del ANOVA que un simple juicio de valor?

A continuación, ejecuté la prueba de Kruskal-Wallis utilizando scipy:

a = [df.loc[df.MSZoning == c].SalePrice for c in df.MSZoning.unique()]
H, p = ss.kruskal(*a)
print('H-statistic: ', H, ' p-value: ', p)

Y sale la salida; H-statistic: 270.0701971937021 p-value: 3.0807239995999556e-57 . Esto es muy significativo, por lo que yo pasaría a realizar un análisis post-hoc. Scipy parece carecer en este sentido, así que usé scikit-posthocs y eligió la prueba de Iram-Conover (basándose únicamente en las respuestas cruzadas):

sp.posthoc_conover(df, val_col='SalePrice', group_col='MSZoning', p_adjust='holm')

Y la salida es una tabla que muestra los valores p por pares:

Table of pairwise p-values

Así que basándome en eso, mi conclusión sería que hay una asociación entre $X_0$ y $Y$ importante para al menos el nivel del 5% (pero probablemente mucho más fuerte). Los grupos C (todos) - FV, C (todos) - RL, FV - RH, FV - RL, FV - RM, RH - RL, RL - RM mostraron diferencias significativas al al menos el nivel del 5%, pero los demás pares no mostraron una diferencia estadísticamente significativa.

Mi segunda pregunta es: ¿he cometido un error en mi metodología, o es razonable esa conclusión?

1voto

BKV Puntos 43

Una cosa que me gustaría señalar es que los datos no tienen que parecer perfectamente gaussianos para proceder de una distribución normal. Lo principal es que mientras no estén muy sesgados, o no haya valores atípicos a gran distancia del rango típico de valores en los datos, está bien. A no ser que tengas una gran cantidad de muestras de un proceso en el que el ruido de las mediciones provenga de un gran número de pequeñas fuentes (de forma que los errores tiendan a anularse -este proceso es el que genera una distribución gaussiana-), los datos probablemente nunca se parecerán a una curva de campana perfecta. Incluso cuando lo hacen, ¡pueden ser no gaussianos! Consulte el libro de Rand Wilcox sobre Estimación robusta y pruebas de hipótesis para obtener más información al respecto.

En cualquier caso, nada de lo que has mostrado en ese gráfico me llevaría a usar el Kruskal-Wallis sobre el ANOVA, así que está bien.

Las pruebas de hipótesis para la normalidad también son una tontería. Aunque no los has mencionado aquí, me gustaría transmitir esa información. Véase ¿Es la prueba de normalidad "esencialmente inútil"? y ¿Qué pasa con las pruebas de normalidad? También deberías investigar la inferencia bayesiana. Stan es fácil de aprender y está disponible en Python :)

0 votos

Gracias por la respuesta; se agradece. Anoche empecé un MOOC sobre inferencia bayesiana :). Tu respuesta me preocupa un poco, ya que hice un ANOVA y pruebas t post hoc por diversión y, aunque el valor p del ANOVA era comparable al de Kruskal-Wallis, las pruebas t arrojaron valores p significativamente diferentes a los de Conover que probé aquí para algunos pares de grupos. Pensé que las pruebas no paramétricas debían realizar de forma similar cuando se utiliza en datos paramétricos. ¿No es así?

1 votos

No necesariamente. Tenga en cuenta que las pruebas no paramétricas responden técnicamente a una pregunta diferente a la de sus hermanos paramétricos. Es decir, a menudo se dice que comparan las medianas, por analogía con la comparación de las medias de forma paramétrica. Pero este no es el caso: "La hipótesis nula suele decirse que las medianas de los grupos son iguales, pero esto sólo es cierto si la forma de la distribución en cada grupo es la misma. Si..es diferente, la prueba de Kruskal-Wallis puede rechazar la nula..aunque las medianas sean iguales" - manual de bioestadística

1 votos

Además, las pruebas no paramétricas suelen tener menor potencia que las paramétricas cuando los datos se ajustan a los supuestos paramétricos.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X