📜  Python – Pearson 的卡方检验

📅  最后修改于: 2022-05-13 01:55:44.123000             🧑  作者: Mango

Python – Pearson 的卡方检验

Pearson 的卡方统计假设是对分类变量之间独立性的检验。在本文中,我们将使用数学方法执行测试,然后使用 Python 的SciPy模块。
首先,让我们看看数学方法:

列联表:
列联表(也称为交叉表)在统计中用于总结几个分类变量之间的关系。在这里,我们用一张表格显示购买不同类型宠物的男性和女性的数量。

 dogcatbirdtotal
men207282241730
women234242232708
total4415244731438

测试的目的是得出两个变量(性别和宠物选择)是否相互关联的结论。

零假设:
我们首先定义假设 ( H0 ),它表明变量之间没有关系。另一种假设将表明两者之间存在显着关系

我们可以通过以下方法验证假设:

  • 使用p 值

我们定义一个显着性因子来确定变量之间的关系是否具有相当的显着性。通常选择0.05的显着性因子或alpha 值。该alpha 值表示当 H0 为真时错误拒绝H0的概率。在我们期望更精确的情况下选择较低的alpha 值。如果检验的p 值严格大于 alpha 值,则 H0 成立。

  • 使用卡方值:

如果我们计算的卡方值小于或等于卡方的表格(也称为临界)值,则H0成立。

预期值表:

接下来,我们准备一个类似的计算(或预期)值表。为此,我们需要将新表中的每个项目计算为:

\frac{row\ total\ *\ column\ total}{grand\ total}

预期值表:
 dogcatbirdtotal
men223.87343533266.00834492240.11821975730
women217.12656467257.99165508232.88178025708
total4415244731438

卡方表:

我们通过为每个项目计算以下内容来准备此表:

\frac{( Observed\_value\ -\ Calculated\_value)^2 }{ Calculated\_value}

卡方表:
 observed (o)calculated (c)(o-c)^2 / c
 207223.873435331.2717579435607573
 282266.008344920.9613722161954465
 241240.118219750.003238139990850831
 234217.126564671.3112758457617977
 242257.991655080.991245364156322
 232232.881780250.0033387601600580606
Total  4.542228269825232

从这个表中,我们得到最后一列的总和,这给了我们卡方的计算值。因此卡方的计算值为4.542228269825232

现在,我们需要找到卡方的临界值。我们可以从一个表中得到它。要使用此表,我们需要知道数据集的自由度。自由度定义为:(行数 - 1)*(列数 - 1)。
因此,自由度为(2-1) * (3-1) = 2

现在,让我们看一下表格,找到对应于2个自由度和0.05个显着因子的值:


这里卡方的表格或临界值为5.991

因此,

critical\ value\ of\ \chi^2\ >=\ calculated\ value\ of\ \chi^2

因此, H0接受,即变量之间不存在显着关系。

接下来,让我们看看如何在Python中执行测试。

使用Python (scipy.stats) 执行测试:

SciPy是一个开源Python库,用于数学、工程、科学和技术计算。

安装:

pip install scipy

scipy.stats模块的chi2_contingency()函数将二维数组格式的列联表作为输入。它按该顺序返回一个包含测试统计量p 值自由度预期表(我们根据计算值创建的表)的元组。

因此,我们需要将获得的p 值与 0.05 的alpha值进行比较。

from scipy.stats import chi2_contingency
  
# defining the table
data = [[207, 282, 241], [234, 242, 232]]
stat, p, dof, expected = chi2_contingency(data)
  
# interpret p-value
alpha = 0.05
print("p value is " + str(p))
if p <= alpha:
    print('Dependent (reject H0)')
else:
    print('Independent (H0 holds true)')

输出 :

p value is 0.1031971404730939
Independent (H0 holds true)

自从,

因此,我们接受H0,即变量之间不存在显着关系。