Solución:
Algunas correcciones:
- Tu
expected
la matriz no es correcta. Debes dividir porobserved.sum().sum()
, que es 1284, no 1000. - Para una tabla de contingencia de 2×2 como esta, los grados de libertad son 1, no 8.
- Tu cálculo de
chi_squared_stat
no incluye corrección de continuidad. (Pero no es necesariamente incorrecto no usarlo, eso es una decisión de juicio para el estadístico).
Todos los cálculos que realiza (matriz esperada, estadísticas, grados de libertad, valor p) son calculados por chi2_contingency
:
In [65]: observed
Out[65]:
Previously Successful Previously Unsuccessful
Yes - changed strategy 129.3 260.17
No 182.7 711.83
In [66]: from scipy.stats import chi2_contingency
In [67]: chi2, p, dof, expected = chi2_contingency(observed)
In [68]: chi2
Out[68]: 23.383138325890453
In [69]: p
Out[69]: 1.3273696199438626e-06
In [70]: dof
Out[70]: 1
In [71]: expected
Out[71]:
array([[ 94.63757009, 294.83242991],
[ 217.36242991, 677.16757009]])
Por defecto, chi2_contingency
usa una corrección de continuidad cuando la tabla de contingencia es 2×2. Si prefiere no usar la corrección, puede deshabilitarla con el argumento correction=False
:
In [73]: chi2, p, dof, expected = chi2_contingency(observed, correction=False)
In [74]: chi2
Out[74]: 24.072616672232893
In [75]: p
Out[75]: 9.2770200776879643e-07
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)