如何利用Python中的scipy做卡方检验?

news2024/11/19 11:17:37

1.简单介绍

卡方检验是一种用途很广的计数资料的假设检验方法。它属于非参数检验的范畴,主要是比较两个及两个以上样本率(构成比)以及两个分类变量的关联性分析。其根本思想就是在于比较理论频数和实际频数的吻合程度或拟合优度问题。
应用场景:两个率或两个构成比比较的卡方检验;多个率或多个构成比比较的卡方检验以及分类资料的相关分析等。
无效假设是:观察频数与期望频数没有差别。
卡方值的计算公式:

x 2 = ∑ i = 1 n ( O i − E i ) 2 E i x^2=\displaystyle\sum_{i=1}^n{\frac{(O_i-E_i)^2}{E_i} } x2=i=1nEi(OiEi)2
O为观测频数,E为期望频数。

2.使用条件

2.1 随机样本数据

两个独立样本有以下情况:

  • 所有的理论数T≥5并且总样本量n≥40,用Pearson卡方进行检验。
  • 如果理论数T<5但T≥1,并且≥40,用连续性校正的卡方进行检验。
  • 如果有理论数T<1或n<40,则用Fisher’s检验。

2.2 卡方检验的理论频数不能太小

对于R x C表:

  • R×C表中理论数小于5的格子不能超过1/5;
  • 不能有小于1的理论数。如果实验中有不符合R×C表的卡方检验,可以通过增加样本数、列合并来实现。

3.实现方法

3.1 关键函数

若要实现该方法,主要会用到scipy这个模块,关键函数为:scipy.stats.chi2_contingency

输入参数:

  • observed:需要检验的R x C表,类型为array
  • correction:修正参数,默认为True,若自由度为1,则应用Yates校正以获得连续性。修正的效果是将每个观测值向相应的期望值调整0.5。
  • lambda_:默认情况下,此检验中计算的统计量是皮尔逊卡方统计量。可以设置为字符串或者数字。其他可选参数:"pearson"(value 1);"log-likelihood"(value 0);"freeman-tukey"(value -1/2);"mod-log-likelihood"(value -1);"neyman"(value -2);"cressie-read"(value 2/3)。

输出:

  • chi2: 检验统计量,即卡方值
  • p: p-value,p值小于0.05则认为否定假设,即存在差异;若大于0.05则无法否定假设,两组差别无显著意义,简答来说就是,无差异
  • dof :自由度
  • expected:基于表格的边际和,生成的期望频率或者期望值。

3.2例子

使用代码举例:

from scipy.stats import chi2_contingency
import numpy as np
kf_arr=np.array([[120,55],[80,25]])
kf= chi2_contingency(kf_arr)
##   chisq-statistic, p-value, expected_frep
kf

4.应用场景

4.1 独立性检验

假设要统计性别与选择高铁的座位类型是否有关,统计数据如下:
data
数据构建代码:

import pandas as pd
sex_seat_df=pd.DataFrame({'性别': ['男','女'],
             '商务座': [200,100],
             '一等座': [320,290],
             '二等座': [645,530]})
sex_seat_df.set_index('性别',inplace=True)

构建完成数据以后,可以利用scipy做卡方检验:

from scipy.stats import chi2_contingency
sex_seat_kf=chi2_contingency(sex_seat_df)
sex_seat_kf

卡方检验完成后,结果如下:
结果
从以上的检测结果图,我们可以发现数据的卡方值为17.52,而p值为0.00<0.05,故我们认为原假设——“性别与选择高铁的座位类型无关” 不成立,即:性别与选择高铁的座位类型有关
引申,那么卡方值为多少时,我们会认为性别与选择高铁的座位类型无关呢?
原数据的自由度为(3-1)*(2-1)=2,我们选择的置信水平为95%,将以下值代入,求得卡方的临界值,当原始数据的卡方值小于此数据时,我们认为是无关的:

import scipy
print(scipy.stats.chi2.ppf(0.95,2))

linjie

4.2 统一性检验

假设一家电影公司想要了解北京、上海和深圳三个城市对于新上市电影的喜好程度是否一致。现从以上城市各抽取800个消费者进行调查,喜好程度只能选择一项,调查结果如下:
city_movie
进行数据构建,并进行卡方检验:

import pandas as pd
from scipy.stats import chi2_contingency
movie_like_degree_city=pd.DataFrame({
    'like_degree':['非常喜欢','比较喜欢','一般','不喜欢','非常不喜欢'],
    '上海':[150,200,230,100,120],
    '北京':[160,180,240,90,130],
    '深圳':[170,170,220,110,130]
})
movie_like_degree_city.set_index("like_degree",inplace=True)
movie_kf=chi2_contingency(movie_like_degree_city)
print(movie_kf)

检验结果如下:
result
从以上数据可以看出,原数据的自由度为(5-1)*(3-1)=8,p-value为0.52>0.05,故没有理由拒绝原假设,原假设成立。即:北京、上海和深圳三个城市对于新上市电影的喜好程度相同。

4.3 适合度检验

假设我们要检验赌场的骰子是否动过手脚?可以对骰子进行一定数量的测试,并得出结果如下:

``点数
现在提出假设:骰子出现1-6的概率是一致的,进行卡方检验

# 统一性检验,检验骰子是否有问题
import numpy as np
from scipy import stats
#构建数据
observed_df=pd.DataFrame({'点数': [1, 2, 3, 4, 5, 6], '出现次数': [85, 96, 102, 106, 97, 114]})
observed_df.set_index('点数',inplace=True)
#现观察骰子出现情况
observed = observed_df.values
#期望频率
expected = np.array([100,100,100,100,100,100])
#计算卡方值和p-value
chi_v= np.sum(np.divide(np.square(observed-expected), expected))
#根据卡方值和自由度,计算p-value
p_value = 1 - stats.chi2.cdf(chi_v, len(observed)-1)
print(chi_v, p_value)

输出结果如下:

结果
从以上结果可以发现,p值小于0.05,故拒绝原假设,即该骰子出现各个点数的概率是不一致的,存在问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/72284.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据架构】如何通俗易懂的介绍数据模型

一直以来&#xff0c;如何和业务领导讲明白什么是数据模型&#xff0c;是沟通的一大难题&#xff0c;下面演示一个示例&#xff0c;仅供参考。 介绍抽象世界 先从大佬胡本立的《以人为中心的数据观》说起。这个世界可以划分为3个世界&#xff0c;一个是客观存在的客观世界&am…

Lecture3:神经网络与反向传播

目录 1.计算图 2.反向传播与计算图 2.1 第一个例子 2.2 第二个例子--sigmoid 2.3 第三个例子--MAX门 2.4 第四和例子--对于向量的梯度 3.神经网络 4.常见矩阵求导公式 4.1 标量对向量求导 4.2 二次型对向量求导 1.计算图 在实践中我们想要推导和使用解析梯度&…

SOLIDWORKS PDM 2023新功能 SOLIDWORKS本地数据管理优化升级

SOLIDWORKS 2023新版本已经与大家见面&#xff0c;今天众联亿诚与大家分享SOLIDWORKS PDM 2023新功能&#xff0c;让我们先一起来看看视频—— 点击观看SOLIDWORKS PDM 2023新功能 长期以来&#xff0c;SOLIDWORKS PDM Professional一直为SOLIDWORKS的本地数据管理制定标准。随…

centos8 离线安装redis的艰苦历程(gcc、make、redis)

目录 背景环境 一、安装gcc 二、安装make 三、安装redis 背景环境 服务器centos8&#xff0c;内网不能联网 本机Windows&#xff0c;能联网 一、安装gcc 1、下载rpm文件 比较恶心的是需要手动的搜索一个一个的下载。不要问我为什么知道的&#xff01;&#xff01;&…

C++11特性-模板的改进

1.模板的右尖括号>> C11模板的多个右尖括号需要一个空格符fun<A<> >,之前连在一起是右移操作符 C11特性优化了这个fun<A<>> 2.模板的默认参数 函数模板能添加模板参数 template <typename T int> 类模板参数多个时&#xff0c;必…

opencv c++ 光流法、稀疏光流法、稠密光流法、均值迁移追踪(meanshift、camshift)

1、概念 参考&#xff1a; (70条消息) 什么是光流法_张年糕慢慢走的博客-CSDN博客_光流法 (70条消息) 计算机视觉--光流法(optical flow)简介_T-Jhon的博客-CSDN博客_光流法 此外&#xff0c;还有基于均值迁移的目标追踪方法&#xff1a; camshift&#xff1a; (75条消息)…

【VC7升级VC8】将vCenter Server 7.X 升级为 vCenter Server 8 (上)—— VC 8系统要求与升级前的说明

目录1. 新 vCenter Server Appliance 8的系统要求1.1 确认升级路径1.2 硬件要求1.3 存储要求1.4 软件要求1.5 vSphere Client 软件要求2. 升级说明2.1 升级阶段介绍2.2 旧VC7虚拟机的信息2.3 打开升级用安装程序&#xff08;1&#xff09;进入vcsa镜像目录&#xff08;2&#x…

leetcode(力扣)算法刷题-160. 相交链表

描述&#xff1a; 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据保证整个链式结构中不存在环。 注意&#xff0c…

Java基础入门第三版黑马课后习题(编程部分)

第 1 章 Java 开发入门 第 2 章 Java 编程基础 1. 编写程序,计算13…99的值,要求如下&#xff1a; (1)使用循环语句实现1~99的遍历 (2)在遍历过程中,通过条件判断当前的数是否为奇数,如果是就累加,否则不加。 public class getSum { 2 public static void main(String[] ar…

vue elementui 多选级联组件 全选功能

Vue 封装 多选级联组件 支持全选功能 使用方式和elm官方一致&#xff0c;原参数一致主要参数&#xff1a; options&#xff1a;级联数菜单。多维数组mulSelectedVal&#xff1a;绑定值。id集合。且取值最后一层idcollapseTags&#xff1a;是否tag展示fieldNames&#xff1a;自…

酵母葡聚糖硫酸酯(SPS)|葡聚糖修饰异黄酮|右旋糖酐修饰Savinase蛋白酶

酵母葡聚糖硫酸酯(SPS)|葡聚糖修饰异黄酮|右旋糖酐修饰Savinase蛋白酶 酵母葡聚糖硫酸酯(SPS) 中文名称&#xff1a;酵母葡聚糖硫酸酯(SPS) 纯度&#xff1a;95% 存储条件&#xff1a;-20C&#xff0c;避光&#xff0c;避湿 外观:固体或粘性液体 包装&#xff1a;瓶装/袋…

C++ 函数重载的细节

前言&#xff1a;如果不想看论证&#xff0c;可以直接点击总结&#xff0c;跳转到最后 目录 总结 1、使用重载函数时&#xff0c;如果数据类型不匹配&#xff0c;C尝试使用类型转换与形参进行匹配&#xff0c;如果转换后有多个函数能匹配上&#xff0c;编译器将报错&#xff1…

【重识云原生】第六章容器基础6.4.12节——IPv4与IPv6双协议栈配置

1 IPv4/IPv6 双协议栈特性 Kubernetes v1.23 [stable] IPv4/IPv6 双协议栈网络能够将 IPv4 和 IPv6 地址分配给 Pod 和 Service。 从 1.21 版本开始&#xff0c;Kubernetes 集群默认启用 IPv4/IPv6 双协议栈网络&#xff0c; 以支持同时分配 IPv4 和 IPv6 地址。 1.1 支持的…

6 张配图通俗易懂说透 K8S 请求和限制

6 张配图通俗易懂说透 K8S 请求和限制 在 Kubernetes 中使用容器时&#xff0c;了解涉及的资源是什么以及为何需要它们很重要。有些进程比其他进程需要更多的 CPU 或内存。这很关键&#xff0c;永远不应该让进程挨饿。知道了这一点&#xff0c;我们应该正确配置容器和 Pod&…

ICV:L2级乘用车渗透率预计将在2025年超过50%

全球前沿科技咨询机构ICV近期发布了全球乘用车市场的分析报告。ICV在报告中指出&#xff0c;作为汽车消费大国之一的中国在2022年仍是乘用车销量第一的国家。目前L0和L1级别的自动驾驶乘用车仍占市场主导地位&#xff0c;但随着供应端在技术方面的不断突破以及需求端在认可度方…

让你的Python程序像C语言一样快

让你的Python程序像C语言也一样快 在《Python性能优化指南–让你的Python代码快x3倍的秘诀》中有提到很多加速Python程序的方法&#xff0c;在随后的系列文章中我也为大家专门介绍了用PyPy加速Python 和 用Numba&#xff1a;一行代码将Python程序运行速度提升100倍。但在所有方…

VM系列振弦读数模块通讯协议

通讯协议是上位机通过 VMXXX 模块支持的数字接口完成信息交互的数据格式、传输步骤、 通讯速率等的一系列预先约定。上位机必须按照本章描述的通讯协议规则来完成与 VMXXX 的数据交互工作。 寄存器机制 VMXXX 内部维护有若干寄存器&#xff0c;模块在寄存器参数值的控制下…

【LeetCode_字符串_逻辑分析】13. 罗马数字转整数

目录考察点第一次&#xff1a;2022年12月8日15:24:16解题思路代码展示优秀的解题思路1. 总结规律2. 字符串替换题目描述13. 罗马数字转整数 考察点 逻辑分析能力 第一次&#xff1a;2022年12月8日15:24:16 解题思路 分析能力有待提高 代码展示 class Solution {public i…

【HTML5期末作业】用HTML+CSS一个兰州交通大学官网网站

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

百度 Android 直播秒开体验优化

作者 | 任雪龙 导读 网络直播功能作为一项互联网基本能力已经越来越重要&#xff0c;手机中的直播功能也越来越完善&#xff0c;电商直播、新闻直播、娱乐直播等多种直播类型为用户提供了丰富的直播内容。随着直播的普及&#xff0c;为用户提供极速、流畅的直播观看体验也越来越…