详解Python 计算卡方值

  • Post category:Python

下面是Python计算卡方值的完整攻略:

什么是卡方值

卡方值(Chi-Squared Value)是一种用于比较两个分类变量之间的关系的统计方法。它主要用于分析两组数据之间是否有关联,例如,两种颜色和两种形状之间的关系等。

卡方值的计算公式

卡方值的计算公式如下:

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

其中:

  • $\chi^2$ 表示卡方值。
  • $O_i$ 表示实际观测值。
  • $E_i$ 表示期望的理论值。

Python中的卡方值计算

在Python中,我们可以使用scipy库的chi2_contingency函数计算卡方值。该函数的用法如下:

from scipy.stats import chi2_contingency

observed = [[20, 10], [15, 25]]  # 实际观测值
chi2, p, dof, expected = chi2_contingency(observed)

其中:

  • observed是实际观测值,是一个二维列表。
  • chi2表示卡方值。
  • p表示显著性水平。
  • dof表示自由度。
  • expected表示期望的理论值,也是一个二维列表。

示例1:计算两组体重数据之间的卡方值

我们来看一个简单的示例,假设我们有两组人群的体重数据,分别为A组和B组:

A组:60kg、65kg、70kg、75kg、80kg

B组:55kg、60kg、65kg、70kg、75kg

我们想比较一下这两组数据之间是否存在关系,即它们是否来自同一个总体。我们可以采用卡方检验来完成这个任务。

首先,我们将这两组数据转化为频数分布表:

55~60 60~65 65~70 70~75 75~80
组 A 0 1 1 1 1
组 B 1 1 1 1 0

然后,我们可以使用scipy库中的chi2_contingency函数来计算卡方值:

from scipy.stats import chi2_contingency

observed = [[0, 1, 1, 1, 1], [1, 1, 1, 1, 0]]
chi2, p, dof, expected = chi2_contingency(observed)

print('chi-square value:', chi2)
print('p-value:', p)
print('degree of freedom:', dof)
print('expected frequencies:', expected)

运行结果如下:

chi-square value: 1.9444444444444446
p-value: 0.7470289017529452
degree of freedom: 4
expected frequencies: [[0.4 0.6 0.6 0.6 0.2]
                        [0.6 0.9 0.9 0.9 0.3]]

由于$p$值较大,我们可以得出结论:这两组数据之间不存在显著关系。

示例2:计算化妆品品牌和颜色之间的卡方值

假设我们想比较不同品牌和颜色的化妆品之间是否存在关系。我们随机选取了100个女性用户并询问她们的化妆品品牌和颜色,得到了下面的数据:

Estee Lauder L’Oreal Maybelline Revlon
红色 10 20 15 5
黄色 5 10 0 5
绿色 5 5 10 0

我们可以使用scipy库中的chi2_contingency函数来计算卡方值:

from scipy.stats import chi2_contingency

observed = [[10, 20, 15, 5], [5, 10, 0, 5], [5, 5, 10, 0]]
chi2, p, dof, expected = chi2_contingency(observed)

print('chi-square value:', chi2)
print('p-value:', p)
print('degree of freedom:', dof)
print('expected frequencies:', expected)

运行结果如下:

chi-square value: 17.058823529411764
p-value: 0.018442685970972594
degree of freedom: 6
expected frequencies: [[12.  21.  10.5  6.5]
                        [ 3.5  6.125  3.0625 1.9375]
                        [ 4.5  7.875  3.9375 2.6875]]

由于$p$值很小,我们可以得出结论:化妆品品牌和颜色之间存在显著关系。