Prueba chi-cuadrado de independencia

Pruebas de hipótesis en Python

James Chapman

Curriculum Manager, DataCamp

Revisando la prueba de proporciones

age_by_hobbyist = stack_overflow.groupby("age_cat")['hobbyist'].value_counts()
age_cat      hobbyist
At least 30  Yes          812
             No           238
Under 30     Yes         1021
             No           190
Name: hobbyist, dtype: int64
from statsmodels.stats.proportion import proportions_ztest
n_hobbyists = np.array([812, 1021])
n_rows = np.array([812 + 238, 1021 + 190])
stat, p_value = proportions_ztest(count=n_hobbyists, nobs=n_rows, 
                                  alternative="two-sided")
(-4.223691463320559, 2.403330142685068e-05)
Pruebas de hipótesis en Python

Independencia de variables

Resultado previo de la prueba de hipótesis: evidencia de que hobbyist y age_cat están asociados

Independencia estadística: la proporción de éxitos en la variable de respuesta es la misma en todas las categorías de la variable explicativa

Pruebas de hipótesis en Python

Prueba de independencia de variables

import pingouin
expected, observed, stats = pingouin.chi2_independence(data=stack_overflow, x='hobbyist',
                                                       y='age_cat', correction=False)
print(stats)
                 test    lambda       chi2  dof      pval    cramer     power
0             pearson  1.000000  17.839570  1.0  0.000024  0.088826  0.988205
1        cressie-read  0.666667  17.818114  1.0  0.000024  0.088773  0.988126
2      log-likelihood  0.000000  17.802653  1.0  0.000025  0.088734  0.988069
3       freeman-tukey -0.500000  17.815060  1.0  0.000024  0.088765  0.988115
4  mod-log-likelihood -1.000000  17.848099  1.0  0.000024  0.088848  0.988236
5              neyman -2.000000  17.976656  1.0  0.000022  0.089167  0.988694

Estadístico $\chi^2$ = 17.839570 = $(-4.223691463320559)^2$ = ($z$-score)$^2$

Pruebas de hipótesis en Python

Satisfacción laboral y categoría de edad

stack_overflow['age_cat'].value_counts()
Under 30       1211
At least 30    1050
Name: age_cat, dtype: int64
stack_overflow['job_sat'].value_counts()
Very satisfied           879
Slightly satisfied       680
Slightly dissatisfied    342
Neither                  201
Very dissatisfied        159
Name: job_sat, dtype: int64
Pruebas de hipótesis en Python

Formulación de hipótesis

$H_{0}$: Las categorías de edad son independientes de los niveles de satisfacción laboral

$H_{A}$: Las categorías de edad no son independientes de los niveles de satisfacción laboral

alpha = 0.1
  • Estadístico de prueba denotado $\chi^{2}$
  • Suponiendo independencia, ¿qué tan lejos están los resultados observados de los esperados?
Pruebas de hipótesis en Python

Gráfico exploratorio: barras apiladas proporcionales

props = stack_overflow.groupby('job_sat')['age_cat'].value_counts(normalize=True)

wide_props = props.unstack()
wide_props.plot(kind="bar", stacked=True)
Pruebas de hipótesis en Python

Gráfico exploratorio: barras apiladas proporcionales

Gráfico de barras apiladas proporcionales de satisfacción laboral coloreado por categoría de edad

Pruebas de hipótesis en Python

Prueba de independencia chi-cuadrado

import pingouin
expected, observed, stats = pingouin.chi2_independence(data=stack_overflow, x="job_sat", y="age_cat")
print(stats)    
                 test    lambda      chi2  dof      pval    cramer     power
0             pearson  1.000000  5.552373  4.0  0.235164  0.049555  0.437417
1        cressie-read  0.666667  5.554106  4.0  0.235014  0.049563  0.437545
2      log-likelihood  0.000000  5.558529  4.0  0.234632  0.049583  0.437871
3       freeman-tukey -0.500000  5.562688  4.0  0.234274  0.049601  0.438178
4  mod-log-likelihood -1.000000  5.567570  4.0  0.233854  0.049623  0.438538
5              neyman -2.000000  5.579519  4.0  0.232828  0.049676  0.439419

Grados de libertad:

$(\text{N.º de categorías de respuesta} - 1) \times (\text{N.º de categorías explicativas} - 1)$

$(2 - 1) * (5 - 1) = 4$

Pruebas de hipótesis en Python

¿Intercambiar las variables?

props = stack_overflow.groupby('age_cat')['job_sat'].value_counts(normalize=True)
wide_props = props.unstack()
wide_props.plot(kind="bar", stacked=True)
Pruebas de hipótesis en Python

¿Intercambiar las variables?

Gráfico de barras apiladas proporcionales de categoría de edad coloreado por satisfacción laboral

Pruebas de hipótesis en Python

chi-cuadrado en ambos sentidos

expected, observed, stats = pingouin.chi2_independence(data=stack_overflow, x="age_cat", y="job_sat")
print(stats[stats['test'] == 'pearson'])   
      test  lambda      chi2  dof      pval    cramer     power
0  pearson     1.0  5.552373  4.0  0.235164  0.049555  0.437417

Pregunta: ¿Las variables X e Y son independientes?

No: ¿La variable X es independiente de la variable Y?

Pruebas de hipótesis en Python

¿Dirección y colas?

  • Los recuentos observados y esperados al cuadrado deben ser no negativos
  • Las pruebas chi-cuadrado casi siempre son de cola derecha $^{1}$
1 Las pruebas chi-cuadrado con cola izquierda se usan en forénsica estadística para detectar si un ajuste es sospechosamente bueno por datos fabricados. Las pruebas chi-cuadrado de varianza pueden ser de dos colas. Son usos de nicho.
Pruebas de hipótesis en Python

¡Vamos a practicar!

Pruebas de hipótesis en Python

Preparing Video For Download...