作为一种重要的统计方法,卡方检验(Chi-Square Test)是常用的用于分类变量间关系的检验方法之一。在Python中,SciPy库提供了chisquare函数用于进行卡方检验。本文将介绍卡方检验的原理、使用方法及实现例子,帮助读者更好地理解和应用卡方检验。
一、卡方检验的原理
卡方检验的核心思想是比较实际观测值和理论值的差异,若两者差异显著,则说明两变量之间存在关系。卡方检验对不同维度数据的分析不同,本文主要介绍二维卡方检验的原理。
在二维表的情况下,卡方检验先假设两变量之间不存在关系,根据假设计算期望值E,再根据实际观测值O和期望值E计算出卡方值,最后通过查表或计算进行显著性检验,判断假设是否成立。
具体计算公式如下:
卡方值 χ²=(O-E)²/E
其中,O为实际观测值,E为期望值。
若卡方值越大,则两变量间的关系越显著,假设被拒绝;反之,若卡方值越小,则关系越不显著,假设被接受。
二、卡方检验的使用
- 数据准备
在进行卡方检验之前,需要准备好数据。一般来说,数据以二维表形式存在,既包括实际观测值O,也要包括期望值E,如下所示:
类别A 类别B
变量1 70 30
变量2 40 60
其中,70表示变量1和类别A的交叉点数。
- 根据数据计算卡方值
使用Python中的SciPy库可以方便地计算卡方值和对应的p值。代码如下:
from scipy.stats import chisquare import numpy as np obs = np.array([[70, 30], [40, 60]]) #实际观测值 exp = np.array([[50, 50], [50, 50]]) #期望值 stat, pval = chisquare(obs.ravel(), f_exp=exp.ravel()) print(stat, pval)
其中,chisquare函数用于计算卡方值和对应的p值,obs和exp分别表示实际观测值和期望值,ravel()函数将二维数组转换为一维数组,f_exp参数指定期望值,设置为None时使用obs.sum()/4作为期望值。
- 检验假设
在得到卡方值和p值后,需要判断假设是否成立。一般设置显著性水平α为0.05,若p值小于等于α,则拒绝原假设,说明两变量存在关系;反之则接受原假设,说明不存在关系。
代码如下:
alpha = 0.05 if pval <= alpha: print("Reject null hypothesis, variables are related.") else: print("Accept null hypothesis, variables are independent.")
三、实现例子
下面以一个简单的例子来演示卡方检验的使用。假设对一个电商网站进行了A/B测试,测试用户登录后对网站的浏览时长有无影响,数据如下:
浏览时长<10s 浏览时长>=10s
登录A 1000 2000
登录B 1500 2500
首先需要计算期望值E,根据数据计算得到期望值如下:
浏览时长<10s 浏览时长>=10s
登录A 1200 1800
登录B 1300 1900
使用Python代码进行计算和假设检验如下:
obs = np.array([[1000, 2000], [1500, 2500]]) #实际观测值 exp = np.array([[1200, 1800], [1300, 1900]]) #期望值 stat, pval = chisquare(obs.ravel(), f_exp=exp.ravel()) print(stat, pval) alpha = 0.05 if pval <= alpha: print("Reject null hypothesis, variables are related.") else: print("Accept null hypothesis, variables are independent.")
最终结果为:拒绝原假设,说明用户登录方式对浏览时长有影响。
四、小结
卡方检验是一种常用的用于分类变量关系的检验方法,可以判断两变量之间是否存在关系。在Python中,使用SciPy库提供的chisquare函数可以很方便地进行卡方检验。通过本文的介绍,读者可以更好地理解和使用卡方检验,对数据的统计分析更加规范和科学化。