做数据分析为何要学统计学(5)——什么问题适合使用卡方检验?

2023-12-12 12:28

本文主要是介绍做数据分析为何要学统计学(5)——什么问题适合使用卡方检验?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

卡方检验作为一种非常著名的非参数检验方法(不受总体分布因素的限制),在工程试验、临床试验、社会调查等领域被广泛应用。但是也正是因为使用的便捷性,造成时常被误用。本文参阅相关的文献,对卡方检验的适用性进行粗浅的论述。

首先,从技术角度来看,(1)卡方检验的样本涉及的因素(也就是变量)需要两个(含)以上,而且是定性变量(分类变量,定类变量),其值可以是数字,也可以符号,但是即使是数字也不具备数量的含义,只是用于区分。比如性别变量,它的值可以是男或女,也可以是0或1,A或B;(2)其样本数据是由多个因素在不同水平(取值)情况下共同决定的数据,直观上表现为列联表(交互分类表,交叉表),形如下表。

某项产品的地区调查(人)
北京上海
满意600480
一般120150
不满意8070

上表涉及的因素(变量)有两个,分别是地区和满意度,其值分别是[北京,上海]和[满意,一般,不满意]。而样本是由两个变量的不同取值作用下的统计数据,可以是总和,也可以是平均数,或者其他统计量。

其次,从应用的角度来看,我们的目的是要进行无差异推断,或者不相关推断(无差异等价于不相关)。比如上述问题可以回答北京、上海两地对该产品的满意度是否无差异,或者说对该产品的满意度是否与上述地区不相关。通过即调用卡方检验函数,获得p=0.00472,在显著性水平0.05下,两地满意度无差异(或与地区不相关)的假设被拒绝。于是我们可以认为“两地对某产品的满意度是有差异的”或“某产品的满意度与地区有相关性”。代码如下:

#chi2_contingency是卡方检验函数
from scipy.stats import chi2_contingency
import numpy as np
#定义样本数据
X= np.array([[600,120,80],[480,150,70]])
chi2_contingency(X)
结果:(10.714285714285714, 0.004714356473549276, 2, array([[576., 144.,  80.],[504., 126.,  70.]]))。这些数值分别为卡方值、p值、自由度和理论值。

还有一种特殊情况,就是样本数据只有一组,也就是说表面上看因素只有一个,这种情况实际是进行“试验值(实际值,经验值)与理论值的无差异”推断。如下例:

进行抛硬币试验,进行七轮,每轮抛20次,数据如下表所示。是否可以认为硬币正面与反面(只有这两种情况)朝上的概率相同。

硬币正面向上的频数
第一轮第二轮第三轮第四轮第五轮第六轮第七轮
812107989

乍一看,此样本只有一组数据,而结合要解答的问题,实际上还有一组数据,即理论值。该理论值是等概率条件下硬币正面向上的次数,也就是每轮都是10。于是样本就变成了

硬币正面向上的频数
第一轮第二轮第三轮第四轮第五轮第六轮第七轮
812107989
10101010101010

通过将上述样本数据带入卡方检验函数,p=0.98928。即在显著性水平0.05下,我们接受“硬币正面与反面朝上的概率相同”这一假设。

再来看一个例子,某餐厅对一年内每周内每天的营业额进行统计(均值),看看营业情况是否存在时间方面的差异,数据如下。

一周的营业额统计(万元)

周一周二周三周四周五周六周日
9116781510

该问题同样是一种“试验值(实际值,经验值)与理论值的无差异”推断问题。只不过理论值的与上例不同。如果我们认为营业额与时间无关,也就意味的每天营业额是相同的,于是理论值将由每天营业额的均值来体现。即样本数据为:

一周的营业额统计(万元)

周一周二周三周四周五周六周日
9116781510
9.429.429.429.429.429.429.42

通过将上述样本数据带入卡方检验函数,p=0.85073。即在显著性水平0.05下,我们接受“营业额不存在时间方面的差异”这一假设。尽管从表面来看,该结果不太容易被接受,似乎周末营业情况更好,但是放眼总体(更长的时间范围),并不能支持直观感受。

***********************接下来划重点,举一个非常有代表性的误用卡方检验的例子***************

某调查机构调查了不同收入水平话费支出的情况,试图分析收入水平是否与话费支出水平相关。数据如下

收入

3000

4000500060007000800010000
话费90100150180200300400

然后对两组数据进行了卡方检验,p=0.000006。结论:拒绝两者不相关的假设。也就是说收入水平与话费支出水平是相关的。从结果来看是没有问题的,两组数据确实是显著正相关的,其皮尔逊相关系数corr=0.9758。但是从样本数据本身来看,不符合使用卡方检验的适用条件。因为:

(1)收入和话费两个因素不是定性变量,而是定量变量。

(2)样本值也不是两个因素共同确定的数值,而是归属于每个因素本身。

对于此类问题使用相关系数才是合理的。

如果上述调查结果改为不同收入水平和话费支出水平下的用户数量,则可以应用卡方检验。比如数据转换为

30004000500060007000800010000
<=90853024718123
90-100710011291295
100-150152075141068
150-2005459019161
200-250698350113
250-300316151415806
>30029419132090

使用卡方检验后1.12896*10^{-300}<0.05,于是我们可以拒绝收入水平与话费支出水平不相关的假设,也就是说收入水平会影响(或决定)话费支出水平。

这篇关于做数据分析为何要学统计学(5)——什么问题适合使用卡方检验?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/484651

相关文章

Java使用Thumbnailator库实现图片处理与压缩功能

《Java使用Thumbnailator库实现图片处理与压缩功能》Thumbnailator是高性能Java图像处理库,支持缩放、旋转、水印添加、裁剪及格式转换,提供易用API和性能优化,适合Web应... 目录1. 图片处理库Thumbnailator介绍2. 基本和指定大小图片缩放功能2.1 图片缩放的

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

MySQL中EXISTS与IN用法使用与对比分析

《MySQL中EXISTS与IN用法使用与对比分析》在MySQL中,EXISTS和IN都用于子查询中根据另一个查询的结果来过滤主查询的记录,本文将基于工作原理、效率和应用场景进行全面对比... 目录一、基本用法详解1. IN 运算符2. EXISTS 运算符二、EXISTS 与 IN 的选择策略三、性能对比

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

解决RocketMQ的幂等性问题

《解决RocketMQ的幂等性问题》重复消费因调用链路长、消息发送超时或消费者故障导致,通过生产者消息查询、Redis缓存及消费者唯一主键可以确保幂等性,避免重复处理,本文主要介绍了解决RocketM... 目录造成重复消费的原因解决方法生产者端消费者端代码实现造成重复消费的原因当系统的调用链路比较长的时

python使用try函数详解

《python使用try函数详解》Pythontry语句用于异常处理,支持捕获特定/多种异常、else/final子句确保资源释放,结合with语句自动清理,可自定义异常及嵌套结构,灵活应对错误场景... 目录try 函数的基本语法捕获特定异常捕获多个异常使用 else 子句使用 finally 子句捕获所

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499