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 库提供了方便易用的实现。使用上述方法,你可以轻松地对任何分类变量之间的关系进行显著性测试。