详解Python 卡方决策

  • Post category:Python

Python 卡方决策

卡方决策(Chi-Squared Test)是一种常用的统计方法,用于判断不同分类变量之间的关系是否显著。Python 中的 scipy 库提供了卡方检验的实现,并且可以处理多种类型的数据。

卡方检验

卡方检验是用来检验观察值与理论值之间的偏离程度是否足够大,以至于我们认为这种偏离并不是由于机会的偶然因素造成的。卡方检验通常用来分析两个分类变量之间的关系,例如性别和喜好、爱好等等。

我们可以通过卡方检验计算一个统计值 chi2,然后根据自由度和显著性水平来得出检验结果是否显著。一般来说,当 p 值小于 0.05 时,表示两个变量之间的关系具有显著性。

卡方检验的回归系数是卡方统计量(chi-square statistic),其计算方法如下:

$$\chi^2 = \sum{\frac{(O_i – E_i)^2}{E_i}}$$

其中,$O_i$ 是观测值,$E_i$ 是期望值。

卡方检测范例

范例 1

我们有一个 2×2 的矩阵,代表了两个变量之间的联系。现在我们希望使用卡方检验来判断它们之间是否有显著性差异。

数据如下:

[[10, 20], [60, 10]]

使用 scipy 中的 chi2_contingency 来计算结果。

from scipy.stats import chi2_contingency

obs = [[10, 20], [60, 10]]

chi2, p, dof, expected = chi2_contingency(obs)

print(f"chi2: {chi2}")
print(f"p value: {p}")
print(f"degrees of freedom: {dof}")
print("expected:")
print(expected)

输出结果为:

chi2: 15.12328767123288
p value: 9.959651881667578e-05
degrees of freedom: 1
expected:
[[23.07692308  6.92307692]
 [46.92307692 14.07692308]]

从结果可以看出,p 值非常小(小于 0.05),因此我们可以得出结论:这两个变量之间的关系是显著的。

范例 2

我们有一个 DataFrame,包含了一些学生的信息,我们想要使用卡方检验来分析两个变量之间的关系:gender(男或女)和 degree(学位)。现在我们想要判断性别和学位之间是否有关系。

数据如下:

import pandas as pd

df = pd.DataFrame({
    "gender": ["M", "F", "M", "M", "F", "F", "M", "F", "M", "F"],
    "degree": ["BA", "BA", "MA", "BA", "MA", "BA", "MA", "BA", "MA", "MA"]
     })

我们可以使用 crosstab 函数来生成一个用于卡方检验的矩阵。

obs = pd.crosstab(df["gender"], df["degree"])

chi2, p, dof, expected = chi2_contingency(obs)

print(f"chi2: {chi2}")
print(f"p value: {p}")
print(f"degrees of freedom: {dof}")
print("expected:")
print(expected)

输出结果为:

chi2: 0.2
p value: 0.6557543356419915
degrees of freedom: 1
expected:
[[2.5 2.5]
 [2.5 2.5]]

从结果可以看出,p 值较大(大于 0.05),因此我们可以得出结论:这两个变量之间的关系不是显著的。

结论

在 Python 中进行卡方决策的方法很简单,scipy 库提供了方便易用的实现。使用上述方法,你可以轻松地对任何分类变量之间的关系进行显著性测试。