python数据分析 - 卡方检验

简介: python数据分析 - 卡方检验

1.卡方检验


卡方检验也属于假设检验的一种即可以分析一个变量的拟合程度,如拟合优度检验(二项分布、泊松分布和正态分布),即可以分析数据是不是正态分布,在做T检验的时候(前提条件就是数据要符合正态分布)。


还可以用来分析两个变量间的关系:是否相互独立,是否来自一个总体。


2.独立性卡方检验与一致性卡方检验


对于两个变量关系的分析方法与在拟合优度中的方法略有差别,这里适用了一种称为列联表的表格来进行分析。


列联表


所谓列联表就是一个行列交叉的表格。将研究的两个变量,一个变量按类分行排列,另一个变量按类分列排列,行列交叉处是同属于两个变量不同类的数据。这样的表格称为列联表,这种类型的数据,也是做卡方检验所需要的数据


137485301de34c628814127c46e7e906.png

2.1 独立性卡方检验


下面举一个例子来说明下独立卡方检验如何运用的😎


比如说咖啡店,不同职业的人偏好不同口味的咖啡,老板想知道职业这个变量与不同口味咖啡是否独立。

数据如下图所示,在显著性为α=0.01下,检验职业与口味是否独立性



IT
行政 工程 合计
美式咖啡 25 21 10 56
拿铁咖啡 82 88 30 200
卡布奇诺 223 16 5 244
合计 330 125 45 500


1.假设


H_0:职业与咖啡无关系(独立)

H 1 :职业与咖啡有关系(不独立)


2.计算期望频数


本例中行与列的数相等,r=c=3是个3*3的列联表,所以需要计算9个期望频数值。根据上表数据,利用公式计算每一行列的期望频数。例如:


d1553cac5d91419d9974f4ec28276ea8.png

1687259888430.png

3.计算卡方值


1687259918011.png

2.1.1 python独立性卡方检验


from  scipy.stats import chi2_contingency
import numpy as np
import pandas as pd
data=[[25,21,10],[82,88,30],[223,16,5]]
df=pd.DataFrame(data,index=['美式咖啡','拿铁咖啡','卡布奇诺'],columns=['IT','行政','工程'])
kt=chi2_contingency(df)
print('卡方值=%.4f, p值=%.4f, 自由度=%i expected_frep=%s'%kt)


3916e7902c9b4bcc8f5d41b013f2a766.png


p值小于0.01,则拒绝原假设,认为咖啡和职业不独立性。


2.2 一致性卡方检验


虽然表面看χ2的一致性检验方法与独立性检验方法一样,但两种检验方法在实质上还是有差别的。


二者差别


两者检验的目的不同。独立性检验是对两个变量是否相关进行的检验,而一致性检验是对总体之间在某一变量分类中是否具相同分布的检验。

其次,两者抽样程序不同。独立性检验是从一个总体中抽出一个样本,然后按两个变量的类别进行分类;而一致性检验是从多个总体进行抽样,抽出多个样本,然后按不同样本进行分类

两种方法推断期望频数的理论不同。独立性检验是基于独立事件的假设推出期望频数,而一致性检验是基于不同总体具有相同的概率的假设推出期望频数。


举例说明


研究职业与咖啡口味的关系时,如果关心的是职业与咖啡是否有关系,则应进行独立性检验。随机抽取一个人群样本后,将职业和咖啡口味分为不同的组,形成列联表进行检验。


研究是不同职业组对不同咖啡口味的要求是否一致,则应进行一致性检验。在不同职业组中进行抽样。把每一个职业组作为一个类别,检验在不同咖啡口味上的分布是否一致。


还是那上面那个数据举例,计算过程是一样的,只是在假设上有点差异。


1.假设


H 0  :不同职业的咖啡口味一致

H 1  :不同职业的咖啡口味不一致


3.正态分布卡方检验


其实还有柏松分布卡方检验和多项分布卡方检验,后续更进。


a2e10cef5e43466aa37a525d63db7250.png

正态分布卡方检验属于非参数方法,

非参数法:通过样本信息来检验未知总体是否为某一种分布(正态分布,均匀分布或任意分布)


非参数方法是通过对比样本的频数与期望频数(目标分布的频数)的差距来判断抽取样本的总体分布是否为目标分布

下面举一个例子来说明下独立卡方检验如何运用的😎


有这样一组数据40件商品的质量:

现在要看下这组数据是否服从正态分布。


1.假设


H 0 :数据质量服从正态分布

H 1  :数据质量不服从正态分布


α=0.05


2.计算正态分布区间界限


我们假设服从正态分布,从这组数据中求出数据的均值和标准差,用这二个数据,结合标准正态分布表,生成一个标准正态分布的数据出来:

19cd3dc820e04c0b9783de9e1f59e1ea.png

bb0a6212a7094843a555227e5ba4bd02.png

为标准正态分布划分出几个区间(那为标准的正态分布划分8个区间,每个区间5个数据,在上图只有8个区间)

8个区间对应的临界值所对应的X值(区间界限),如下图


4a93c16906ca4bf49986c1f584ebd01c.png

3.计算卡方值


根据计算的区间界限,将样本数据的每一个数据都分配到对应的区间中,然后统计实际频数。最后由实际频数与期望频数的差值计算卡方统计量,计算过程如下表:


1687260229602.png

自由度:k-r-1,本例中,划分了8个区间k=8,估计了2个总体参数和σ,所以r=2,自由度为8-2-1=5


查卡方分布表(双侧显著水平0.5/2=0.025,自由度为5)得卡方值为11.07。因为计算卡方统计量为8<11.07,落在接受域,所以接受原假设,拒绝备择假设,即质量的数据可以认为是正态分布。


总结一下

就是根据实际的数据,算出的均值与标准差,去拟合一个标准的正态分布数据,因为标准的正态分布,每个区间的数据是均匀的,


然后在将实际的数据落在的标准正态分布的区间。计算不同区间的数据个数与标准正态的数据个数,代人求卡方值。


3.1 python正态分布卡方检验


import scipy from stats
df=[7.68,6.63,7.16,5.98,6.34,
    6.92,8.27,8.19,8.6,6.82,
    7.52,7.96,9.23,6.04,8.08,
    6.4,5.63,5.8,6.18,7.4,
    8.52,6.34,5.62,7.29,7.33,
    6.44,6.03,8.18,8.32,8.52,
    6.24,6.23,8.2,7.31,8.5,
    7.51,6.01,7.25,7.44,7.86]
ks_test = stats.kstest(df,'norm')
shapiron_test = stats.shapiro(df)
print('ks_test: ',ks_test)
print('shapiro_test: ',shapiron_test)

479fb4c250d54519898ff61e45f13c3c.png


这二种方法都可以ks_test、shapiron_test,看p值

p值>0.05,接受原假设服从正态分布


相关文章
|
19天前
|
数据采集 存储 数据挖掘
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
51 0
|
5天前
|
Python
SciPy 教程 之 Scipy 显著性检验 7
SciPy 教程之 Scipy 显著性检验第7部分,介绍显著性检验的基本概念及其在 SciPy 中的应用。显著性检验用于评估样本数据与假设之间的差异是否由随机因素引起。SciPy 的 `scipy.stats` 模块提供了执行显著性检验的功能,包括 KS 检验等方法,用于检测数据是否符合特定分布。示例代码展示了如何使用 KS 检验验证一组数据是否符合正态分布。
12 2
|
7天前
|
Python
SciPy 教程 之 Scipy 显著性检验 3
本教程介绍Scipy显著性检验,包括其基本概念、原理及应用。显著性检验用于判断样本与总体假设间的差异是否显著,是统计学中的重要工具。Scipy通过`scipy.stats`模块提供了相关功能,支持双边检验等方法。
15 1
|
14天前
|
机器学习/深度学习 数据采集 数据挖掘
解锁 Python 数据分析新境界:Pandas 与 NumPy 高级技巧深度剖析
Pandas 和 NumPy 是 Python 中不可或缺的数据处理和分析工具。本文通过实际案例深入剖析了 Pandas 的数据清洗、NumPy 的数组运算、结合两者进行数据分析和特征工程,以及 Pandas 的时间序列处理功能。这些高级技巧能够帮助我们更高效、准确地处理和分析数据,为决策提供支持。
33 2
|
20天前
|
存储 数据挖掘 数据处理
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第26天】Python 是数据分析领域的热门语言,Pandas 库以其高效的数据处理功能成为数据科学家的利器。本文介绍 Pandas 在数据读取、筛选、分组、转换和合并等方面的高效技巧,并通过示例代码展示其实际应用。
31 2
|
25天前
|
数据采集 数据可视化 数据挖掘
R语言与Python:比较两种数据分析工具
R语言和Python是目前最流行的两种数据分析工具。本文将对这两种工具进行比较,包括它们的历史、特点、应用场景、社区支持、学习资源、性能等方面,以帮助读者更好地了解和选择适合自己的数据分析工具。
27 2
|
8天前
|
Python
SciPy 教程 之 Scipy 显著性检验 1
本教程介绍Scipy显著性检验,包括统计假设、零假设和备择假设等概念,以及如何使用scipy.stats模块进行显著性检验,以判断样本与总体假设间是否存在显著差异。
14 0
|
11天前
|
并行计算 数据挖掘 大数据
Python数据分析实战:利用Pandas处理大数据集
Python数据分析实战:利用Pandas处理大数据集
|
11天前
|
数据采集 数据可视化 数据挖掘
利用Python进行数据分析:Pandas库实战指南
利用Python进行数据分析:Pandas库实战指南
|
13天前
|
SQL 数据挖掘 Python
数据分析编程:SQL,Python or SPL?
数据分析编程用什么,SQL、python or SPL?话不多说,直接上代码,对比明显,明眼人一看就明了:本案例涵盖五个数据分析任务:1) 计算用户会话次数;2) 球员连续得分分析;3) 连续三天活跃用户数统计;4) 新用户次日留存率计算;5) 股价涨跌幅分析。每个任务基于相应数据表进行处理和计算。
下一篇
无影云桌面