Python: тест Chi 2 дает неправильные результаты (chi2_contingency)
Я пытаюсь вычислить значение квадрата хи в python, используя таблицу сопряженности. Вот пример.
+--------+------+------+
| | Cat1 | Cat2 |
+--------+------+------+
| Group1 | 80 | 120 |
| Group2 | 420 | 380 |
+--------+------+------+
Ожидаемые значения:
+--------+------+------+
| | Cat1 | Cat2 |
+--------+------+------+
| Group1 | 100 | 100 |
| Group2 | 400 | 400 |
+--------+------+------+
Если я вручную вычислю значение квадрата хи, то получу 10. С питоном я получу 9.506. Я использую следующий код:
import numpy as np
import pandas as pd
from scipy.stats import chi2_contingency
import scipy
# Some fake data.
n = 5 # Number of samples.
d = 3 # Dimensionality.
c = 2 # Number of categories.
data = np.random.randint(c, size=(n, d))
data = pd.DataFrame(data, columns=['CAT1', 'CAT2', 'CAT3'])
# Contingency table.
contingency = pd.crosstab(data['CAT1'], data['CAT2'])
contingency.iloc[0][0]=80
contingency.iloc[0][1]=120
contingency.iloc[1][0]=420
contingency.iloc[1][1]=380
# Chi-square test of independence.
chi, p, dof, expected = chi2_contingency(contingency)
Странно, что функция дает мне правильные ожидаемые значения, однако квадрат Хи и значение p отключены. Что я здесь не так делаю?
Спасибо
п.с.
Я знаю, что я создаю исходную таблицу в pandas довольно неубедительно, но я не эксперт в том, как создавать эти вложенные таблицы в pandas.
1 ответ
Решение
Из документации:
correction : bool, optional
If True, and the degrees of freedom is 1, apply Yates’ correction for continuity.
The effect of the correction is to adjust each observed value by 0.5 towards
the corresponding expected value.
И степень свободы равна 1. Если вы установите поправку на Ложь, вы получите 10.
chi2_contingency(contingency, correction=False)
>>> (10.0, 0.001565402258002549, 1, array([[ 100., 100.],
[ 400., 400.]]))