详解Python 计算卡方值

  • Post category:Python

计算卡方值是数据分析中的一个重要知识点,而 Python 也提供了相应的库进行计算。下面是使用 Python 计算卡方值的完整攻略。

什么是卡方值?

卡方值(Chi-Square Value)是一种统计量,用于计算观察值和期望值之间的差异程度,常用于独立性检验和拟合优度检验。在数据分析、机器学习等领域广泛应用。

计算卡方值的步骤

以下是使用 Python 计算卡方值的一般步骤:

  1. 构建数据表格,包括每个类别的实际观察值和期望值。
  2. 计算每个单元格的卡方值。
  3. 计算所有单元格的卡方值之和,得到总的卡方值。

Python 计算卡方值的库和函数

Python 通过 SciPy 库中的 stats 模块提供了卡方值的计算函数。其中, chi2_contingency 函数计算列联表的卡方值和 p 值, chisquare 函数计算单个数组的卡方值和 p 值。

以下是 chi2_contingencychisquare 函数的语法和参数说明:

# chi2_contingency函数
scipy.stats.chi2_contingency(observed, correction=True, lambda_=None)

参数说明:
- observed:列联表(二维数组),存储每个类别的实际观察值,需要注意每行和每列的总和必须相等。
- correction:是否应用 Yates 校正,默认 True。
- lambda_:指定进行卡方值计算时所采用的独立检验方法。

返回值说明:
- 卡方值
- p 值
- 自由度
- 期望值

# chisquare 函数
scipy.stats.chisquare(f_obs, f_exp=None, ddof=0, axis=None)

参数说明:
- f_obs:观察数组(一维或多维数组),存储每个类别的实际观察值。
- f_exp:期望数组(一维或多维数组),存储每个类别的期望值,默认使用 f_obs 计算期望值。
- ddof:自由度的减少量,默认为 0,仅用于多维数组。
- axis:计算的轴向。

返回值说明:
- 卡方值
- p 值

卡方值计算示例

列联表的卡方值计算

下面是一个简单的示例,演示如何用 Python 计算列联表的卡方值。

假设我们有一个这样的数据表格(行表示性别,列表示车型,数字表示数量),并希望计算行和列之间的独立性是否存在差异:

       小轿车    跑车    SUV
男性    12      8      4
女性    6       9      5

使用 chi2_contingency 函数进行卡方值的计算,代码如下:

import numpy as np
from scipy.stats import chi2_contingency

obs = np.array([[12, 8, 4], [6, 9, 5]])
chi2, p, dof, ex = chi2_contingency(obs, correction=True)

计算结果如下:

卡方值: 2.082075106163864
p 值: 0.3541795562722749
自由度: 2
期望值: [[ 9.6  8.4  5. ]
         [ 8.4  7.4  4.2]]

由于 p 值大于显著性水平,因此不能拒绝原假设(即行和列之间独立性不存在)。

单一数组的卡方值计算

下面是一个示例,演示如何使用 Python 计算单一数组的卡方值。

假设我们有一个数组 arr,表示一组随机变量的观察数值:

import numpy as np
from scipy.stats import chisquare

arr = np.array([30, 20, 15, 5])
exp = np.array([15, 15, 15, 15])
chi2, p = chisquare(arr, f_exp=exp)

计算结果如下:

卡方值: 20.0
p 值: 0.00037572043251818365

由于 p 值小于显著性水平,因此可以拒绝原假设(即观察值和期望值之间存在差异)。

以上就是计算卡方值的完整攻略,希望能对大家有所帮助。