卡方检验值转换为P值

article/2025/9/17 22:03:21


卡方检验作为一种常见的假设检验,在统计学中的地位是显而易见的,如果你还不太清楚可以参看这篇博文:卡方检验用于特征选择,写的非常的浅显易懂,如果你还想再扩展点卡方检验方面的知识,可以参看这篇博文卡方检验基础,写的也很有意思。前辈的功底都很深厚,小弟就就不再阐述卡方检验的原理、意义及如何计算了,理解了其实很简单就那么个公式,再根据实际业务场景关键看你选择哪一个。从chi-squared value 到p-value,相信大多数同学和我一样,查表,因为大学课本上就是这么写的。假如在实际业务场景中,自由度和显著性水准都不确定的情况下,怎么办呢?查表就显得不那么地道了。

这时可能很多同学想到了著名的fisher精确检验,因为这个检验能直接求出的精确的p-value,但是在检验数据样本比较大的情况下,fisher精确检验的计算复杂度会让你显得那么的力不从心,本系列的后面将会讲到fisher精确检验的原理并给出其源码及与chi-squared的效率对比。还是抓紧时间侃侃怎么通过chi-squared计算p-value吧,估计心急的同学就等不及了。ok,咱们攻城师还是用代码说话,先上代码:

public double chisqr2pValue(int dof, double chi_squared) {if (chi_squared < 0 || dof < 1) {return 0.0;}double k = ((double) dof) * 0.5;double v = chi_squared * 0.5;if (dof == 2) {return Math.exp(-1.0 * v);}double incompleteGamma = IncompleteGamma.log_igf(k,v);// 如果过小或者非数值或者无穷if (Math.exp(incompleteGamma) <= 1e-8|| Double.isNaN(Math.exp(incompleteGamma))|| Double.isInfinite(Math.exp(incompleteGamma))) {return 1e-14;}double gamma = Math.log(Gamma.getApproxGamma(k));incompleteGamma -= gamma;if(Math.exp(incompleteGamma) > 1){return 1e-14;}double pValue = 1.0 - Math.exp(incompleteGamma);return (double) pValue;
}

这个chisqr2pValue函数引用到了两个函数,一个为getApproxGamma(k) 一个为log_igf(k,v),如果你对该函数的实现原理不太清楚,wiki中侃的很清楚:卡方分布,本文也不再阐述卡方分布的密度函数、自由度等等;具体求P-value说白了就是计算卡方分布的分布函数值,如下的公式:


其中,分子为不完全伽马函数,分母为伽马函数;那么上述chisqu2pvalue就是实现了上述公式。Ok,现在的问题转换为怎么求分子与分母。

在两年前我曾为了实现伽马函数的功能代码敲个积分,但是效果不太理想。但,今天发现个利器:斯特灵公式,估计大多数同学跟我一样,第一感觉斯特灵公式不是用来求阶乘的吗?不错,确实是,在实现fisher时我也用到了斯特灵公式;可是哥们确实有点孤陋寡闻,斯特灵还有个求伽马函数的近似公式,如下:


如果你想了解详细的斯特灵公式的推导信息,也是参考wiki:斯特林公式 是不是觉得维基太牛逼了?好吧,还是赶紧上代码:

public static double getApproxGamma(double n) {// RECIP_E = (E^-1) = (1.0 / E)double RECIP_E = 0.36787944117144232159552377016147;// TWOPI = 2.0 * PIdouble TWOPI = 6.283185307179586476925286766559;double d = 1.0 / (10.0 * n);d = 1.0 / ((12* n) - d);d = (d + n) *RECIP_E;d = Math.pow(d,n);d *= Math.sqrt(TWOPI/ n);return d;}


好,剩下的就差不完全伽马函数没有解了,怎么求?问大神wiki:不完全伽马函数 哎呦,在里面又发现个牛逼的不用计算积分的公式:


而M函数为什么呢?就是传闻中的合连几何函数,如果对这个函数感兴趣的可以继续参考wiki:合连几何函数 ,不过这里我们依旧只使用它的一个公式:


Ok,公式知道了,代码实现就很简单了,只不过在这里为了便于大数的计算,我采用了计算其log值,代码如下:

 public static double log_igf(double s, double z) {if (z < 0.0) {return 0.0;}double sc = (Math.log(z) * s) - z - Math.log(s);double k = KM(s, z);return Math.log(k) + sc;}private static double KM(double s, double z) {double sum = 1.0;double nom = 1.0;double denom = 1.0;double log_nom = Math.log(nom);double log_denom = Math.log(denom);double log_s = Math.log(s);double log_z = Math.log(z);for (int i = 0; i < 1000; ++i) {log_nom += log_z;s++;log_s = Math.log(s);log_denom += log_s;double log_sum = log_nom - log_denom;sum += Math.exp(log_sum);}return sum;}

Ok,简单吧?!以后你再也不用坑爹地查表了。下一篇再介绍下fisher精确检验吧。

 



http://chatgpt.dhexx.cn/article/JkCK7tla.shtml

相关文章

别错过,卡方检验实用总结!

通常情况下&#xff0c;卡方检验是研究分类数据与分类数据之间关系的分析方法&#xff0c;如性别和是否戴隐形眼镜之间的关系。卡方检验通常会涉及卡方值和P值两个名词术语。卡方值与P值有对应关系&#xff0c;P值小于0.05则说明有差异存在&#xff0c;即性别与是否戴隐形眼镜之…

【数据分析与数据挖掘】四、多因子与复合分析(上)

这一章内容&#xff1a;属性与属性之间常见的联系。 理论铺垫&#xff1a; 假设检验与方差检验&#xff1b;相关系数&#xff1a;皮尔逊、斯皮尔曼&#xff1b;回归&#xff1a;线性回归&#xff1b;PCA与奇异值分解&#xff1b; 1.假设检验 概念&#xff1a;做出一个假设&…

2020淘宝双11超级星秀猫怎么踢人 最强星秀猫怎么退出队伍

2020年的天猫双十一的喵币活动是叫—超级星秀猫&#xff0c;还是一个养猫的活动&#xff0c;不过是可以组队的&#xff0c;有的朋友是想把临时的人踢出队伍或者是自己离开队伍&#xff0c;但是不知道怎么操作&#xff0c;下面就来为大家详细的介绍一下。 1、踢人&#xff1a;今…

单点登录 ( 踢人模式 )

这是最终效果图 实现用户账号在别处登陆&#xff0c;踢出上个已经登陆的账号 单点登陆基本原理: 项目Demo结构 项目 demo 源码 https://github.com/610627597/TestDemo

Spring Security OAuth2 实现多人登录互踢下线

背景说明 一个账号只能一处登录&#xff0c;类似的业务需求在现有后管类系统是非常常见的。但在原有的 spring security oauth2 令牌方法流程&#xff08;所谓的登录&#xff09;无法满足类似的需求。 我们先来看 TokenEndpoint 的方法流程 客户端 带参访问 /oauth/token 接…

csgo服务器取消自动踢人,CSGO踢出玩家Kick相关控制台指令

本文将介绍CSGO一些关于踢人/KICK控制台指令&#xff0c;如果你自建服务器或本地建房的话&#xff0c;可能会用得上。 mp_autokick 如果你不想让好友因为队友伤害或挂机/AFK被服务器自动踢出&#xff0c;那么需要输入&#xff1a; mp_autokick 0 这样&#xff0c;服务器中的玩家…

单一用户登录,即当前用户登录后要踢出前一个登录,即做出踢人效果,如何实现?

单一用户登录&#xff0c;即当前用户登录后要踢出前一个登录&#xff0c;即做出踢人效果&#xff0c;如何实现&#xff1f; 一般情况下&#xff0c;用户登录&#xff0c;有两种方式&#xff1a;cookie方式&#xff0c;session方式。一般情况下&#xff0c;session方式是使用最…

【开发经验】客户端互踢实现思路

文章目录 场景如下实现思路 踢用户实现思路、用户单个客户端登录。冻结用户实现 场景如下 每个用户只能登录一个客户端&#xff0c;如微信、支付宝等app&#xff0c;只能在一个手机登录&#xff0c;如果再别的手机登录&#xff0c;则会踢掉之前的那个。冻结账户&#xff0c;账…

登录超时提示+踢人下线实现(spring security)

前言 最近&#xff0c;说有可能要上只允许一个地方登录&#xff0c;还要配合信息推送&#xff0c;今天有空&#xff0c;就起个头&#xff0c;把登录超时、登录踢人下线一起做了。信息推送的&#xff0c;后面再说&#xff0c;留好口子就行。 一、背景 这里是spring security&am…

【LEDE】树莓派上玩LEDE终极指南-86-OpenWrt增加踢人功能

查看文章 欢迎您&#xff01; 返回首页 最后修改于&#xff1a;2018-03-27 20:03:12 修改 导出 原理 ubus call hostapd.wlan1 del_client "{addr:AC:0D:1B:D0:60:29, reason:5, deauth:false, ban_time:0}" 步骤 修改/usr/lib/lua/luci/view/admin_status/index.ht…

Python搭建QQ机器人,监控QQ发言与进群退群,自动@新成员并屏蔽脏话踢人

目录 前言 原理 准备 go-cqhttp插件安装 nonebot框架的安装 插件的拓展 效果 警告 前言 emmmm&#xff0c;大家好&#xff0c;我叫善念。有点懒 好久没有给大家更新教程了。今天给大家带来的项目比较有趣&#xff0c;而且非常简单&#xff0c;简称 有手即可&#xff01;…

用户唯一登录,最新登录挤掉以前的登录,实现踢人.

最近在做一个功能&#xff0c;要求是这样的&#xff1a;相同的账号&#xff0c;例如admin账号&#xff0c;在A电脑登录成功&#xff0c;然后admin账号在B电脑登录&#xff0c;系统发现admin账号出现了重复登录&#xff0c;A电脑上登录的admin账号就会被退出登录。 流程图&…

企业微信群管理员可以踢人吗?企业微信群怎么自动踢人?

我们使用企业微信运营客户时&#xff0c;总会有人在企业微信群里面发广告、链接&#xff0c;非常影响其他客户的体验&#xff0c;有没有什么方法将这些人踢出群聊呢&#xff1f; 企业微信群怎么自动踢人&#xff1f; 在企业微信推出群防骚扰功能之前&#xff0c;群管理员最无奈…

spring boot + shiro 实现登陆 踢出用户功能 (挤人) 以及UnknownSessionException异常问题 记住我功能

简介&#xff1a;踢出用户功能&#xff1a;就是限制一个账号登陆人数。 本文限定一个账号一个用户登陆&#xff0c;并且是挤掉前一个用户 目录 首先 pom 然后Shiro配置Bean ShiroConfigBean 然后配置 ShiroRealm&#xff08;百度翻译&#xff1a; Realm 领域&#xff09; 然…

java怎么实现踢掉在线用户_Java多人在线聊天室(3)— 踢人下线功能

作为一个聊天室&#xff0c;肯定会有很多人在里面聊天&#xff0c;那么要是有人里面捣乱怎么办&#xff1f;直接踢人不解释。 我们在创建数据库的时候就有这样的考虑&#xff0c;所以我们的账户有两种&#xff0c;一种是管理员&#xff0c;一种是普通用户。 打开的数据库&#…

Shiro实现session限制登录数量踢人下线

Shiro实现session限制登录数量踢人下线 前言实现■ 架构准备ShiroConfig ■ redis内的存储分布■ 代码修改修改 JedisSessionDAO修改 SystemAuthorizingRealm新增 ApiLogoutFilter再次修改 JedisSessionDAO 最后 前言 近年无状态登录兴起&#xff0c;但sessionId方式仍是主流方…

SAP SM04踢人操作(摘录)

管理员在SAP系统中&#xff0c;使用事物码SM04对当前登录在线用户&#xff08;User&#xff09;进行管理&#xff0c;可查看服务器全部客户端&#xff08;Client&#xff09;的用户的在线状态&#xff0c;并可以结束指定用户的会话状态&#xff0c;也就是强制踢出用户。 双击查…

出生率新低!1978-2020中国人口出生率、死亡率及自然增长率变迁

根据国家统计局近日发布的《中国统计年鉴2021》&#xff0c;2020中国人口出生率为8.52‰&#xff0c;再创历史新低。同时&#xff0c;2020中国人口自然增长率仅为1.45‰&#xff0c;勉强维持正增长&#xff0c;同样是历史新低。 下面的视频记录了1978-2020中国人口出生率、死亡…

百度迁徙大数据整理[2020+2019同期]

统筹推进疫情防控和经济社会发展工作是常态化疫情防控阶段促进中国经济恢复的必然选择。基于百度地图迁徙大数据&#xff0c;采用双重差分模型探究不同阶段的疫情防控措施对中国人口流动的影响。结果表明&#xff0c;早期的疫情超常规防控措施有效控制了人口流动&#xff0c;导…