如何判断一组数据是否符合正态分布呢?

2023-11-14

  • 在很多模型及假设检验中都需要满足一个假设条件:数据需服从正态分布。这篇文章主要讲讲如何判断数据是否符合正态分布。主要分为两种方法:描述统计方法和统计检验方法。

描述统计方法

  • 描述统计就是用描述的数字或图表来判断数据是否符合正态分布。常用的方法有Q-Q图、P-P图、直方图、茎叶图。

Q-Q图

  • Q是quantile的缩写,即分位数。 分位数就是将数据从小到大排序,然后切成100份,看不同位置处的值。比如中位数,就是中间位置的值。Q-Q图的x轴为分位数,y轴为分位数对应的样本值。x-y是散点图的形式,通过散点图可以拟合出一条直线, 如果这条直线的斜率为标准差,截距为均值.,则可以判断数据符合正态分布,否则则不可以。
    在这里插入图片描述
  • 拟合出来的这条直线和正态分布之间有什么关系呢?为什么可以根据这条直线来判断数据是否符合正态分布呢?我们先来想一下正态分布的特征,正态分布的x轴为样本值,从左到右x是逐渐增大的,y轴是每个样本值对应的出现的概率。概率值先上升后下降,且在中间位置达到最高。可以把Q-Q图中的y轴理解成正态分布中的x轴, 如果拟合出来的直线是45度,可以保证中位数两边的数值分布是一样的,即正态分布中基于中位数左右对称。

P-P图

  • P-P图是根据变量的累积概率对应于所指定的理论分布累积概率绘制的散点图,用于直观地检测样本数据是否符合某一概率分布。如果被检验的数据符合所指定的分布,则代表样本数据的点应当基本在代表理论分布的对角线上。
  • P-P图的检验原理与Q-Q图基本相同,只是Q-Q图用的是分布的分位数来做检验,而P-P图是用分布的累计比。和Q-Q图一样,如果数据为正态分布,则在P-P正态分布图中,数据点应基本在图中对角线上。

直方图

  • 直方图分为两种,一种是频率分布直方图,一种是频数分布直方图。频数就是样本值出现的次数,频率是某个值出现的次数与所有样本值出现总次数的比值。从直方图我们可以很直观的看出这组数据是否符合正态分布。
    在这里插入图片描述

茎叶图

  • 茎叶图的思路是将数组中的数按位数进行比较,将数的大小基本不变或变化不大的位作为一个主干(茎),将变化大的位的数作为分枝(叶),列在主干的后面,这样就可以清楚地看到每个主干后面的几个数,每个数具体是多少。
  • 茎叶图是一个与直方图相类似的特殊工具,但又与直方图不同,茎叶图保留原始资料的资讯,直方图则失去原始资料的讯息。将茎叶图茎和叶逆时针方向旋转90度,实际上就是一个直方图,可以从中统计出次数,计算出各数据段的频率或百分比。从而可以看出分布是否与正态分布或单峰偏态分布逼近。
    在这里插入图片描述

统计检验方法

  • 讲完了描述统计的方法,我们来看一下统计检验的方法。统计检验的方法主要有SW检验、KS检验、AD检验、W检验。

SW检验

  • SW检验中的S就是偏度,W就是峰度。
  • 偏度(skewness),是统计数据分布偏斜方向和程度的度量,是统计数据分布非对称程度的数字特征。包括右偏分布(也叫正偏分布,其偏度>0),正态分布(偏度=0),左偏分布(也叫负偏分布,其偏度<0)。在定义上,偏度是样本的三阶标准化矩:在这里插入图片描述
  • 峰度(kurtosis),表征概率密度分布曲线在平均值处峰值高低的特征数。直观看来,峰度反映了峰部的尖度,计算方法为随机变量的四阶中心矩与方差平方的比值。公式上就是把偏度计算公式里的幂次改为4即可。峰度包括正态分布(峰度值=3),厚尾(峰度值>3),瘦尾(峰度值<3)。公式可表示如下:
    在这里插入图片描述
  • 在Python的scipy包中scipy.stats.normaltest(x, axis=0, nan_policy=‘propagate’)的原理就是基于数据的偏度和峰度,该方法是专门做正态性检验的。x:待检验的数据;axis:默认为0,表示在0轴上检验,即对数据的每一行做正态性检验,我们可以设置为 axis = None 来对整个数据做检验;nan_policy:当输入的数据中有空值时的处理办法。默认为 ‘propagate’,返回空值;设置为 ‘raise’ 时,抛出错误;设置为 ‘omit’ 时,在计算中忽略空值。

KS检验

  • KS检验是基于样本累积分布函数来进行判断的。可以用于判断某个样本集是否符合某个已知分布,也可以用于检验两个样本之间的显著性差异。如果是判断某个样本是否符合某个已知分布,比如正态分布,则需要先计算出标准正态分布的累计分布函数,然后计算样本集的累计分布函数。两个函数之间在不同的取值处会有不同的差值。我们只需要找出来差值最大的那个点D。然后基于样本集的样本数和显著性水平找到差值边界值(类似于t检验的边界值)。判断边界值和D的关系, 如果D小于边界值,则可以认为样本的分布符合已知分布,否则不可以。
    在这里插入图片描述
  • 在Python中可通过scipy包直接进行KS检验:scipy.stats.kstest(x,cdf = “norm”);x表示待检验的样本集,cdf用来指明要判断的已知分布类型:‘norm’, ’expon’, ’logistic’, ’gumbel’, ’gumbel_l’, gumbel_r’,其中norm表示正态分布检验。返回两个值:D和对应的p_value值。

AD检验

  • AD检验是在KS基础上进行改造的,KS检验只考虑了两个分布之间差值最大的那个点,但是这容易受异常值的影响。 AD检验考虑了分布上每个点处的差值。
  • 在Python中可通过scipy包直接进行KS检验:scipy.stats.anderson(x, dist= ‘norm’),x为待检验的样本集,dist用来指明已知分布的类型,可选值与ks检验中可选值一致。返回三个结果: 第一个为统计值,第二个为评判值,第三个为每个评判值对应的显著性水平。

W检验

  • W检验(Shapiro-Wilk的简称)是基于两个分布的相关性来进行判断,会得出一个类似于皮尔逊相关系数的值。 值越大,说明两个分布越相关,越符合某个分布。
  • 在Python中可通过scipy包直接进行W检验:scipy.stats.shapiro(x),x为待检验的样本集,上面的代码会返回两个结果:W值和其对应的p_value。shapiro是专门用于正态性检验的,所以不需要指明分布类型。且 shapiro 不适合做样本数>5000的正态性检验。

判断完后,若数据不符合正态分布又当如何呢?后续小编将继续总结将非正态分布数据转换为正态分布的方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何判断一组数据是否符合正态分布呢? 的相关文章

  • 查找两个字典的匹配键值对

    检查一个字典的键值对是否也存在于其他字典中的最有效方法是什么 假设我有两个字典dict1 and dict2这两个字典有一些共同的键值对 我想找到这些并打印出来 做到这一点最有效的方法是什么 请建议 一种方法是 d inter dict k
  • 获取 pandas 中各列具有相同值的行

    在 pandas 中 给定一个 DataFrame D 1 2 3 0 apple banana banana 1 orange orange orange 2 banana apple orange 3 NaN NaN NaN 4 app
  • Urllib 的 urlopen 在某些网站上被破坏(例如 StackApps api):返回垃圾结果

    我在用着urllib2 s urlopen函数尝试从 StackOverflow api 获取 JSON 结果 我正在使用的代码 gt gt gt import urllib2 gt gt gt conn urllib2 urlopen h
  • numpy:与索引数组有效求和

    假设我有 2 个矩阵 M 和 N 都有 gt 1 列 我还有一个索引矩阵 I 有 2 列 1 列代表 M 一列代表 N N 的索引是唯一的 但 M 的索引可能出现多次 我想要执行的操作是 for i j in w M i N j 除了 fo
  • SQLAlchemy 在 MySQL 上使用什么列类型作为“文本”?

    我的总体用例是试图确定我是否可以编写一个与数据库无关的 至少支持 Postgres 和 MySQL 存储一些大数据作为原始文本 认为 500MB 作为粗略的理论上限 基于这个答案 https stackoverflow com a 2557
  • 当类的任何属性被修改时,类如何运行某些函数?

    是否有一些通用方法可以让类在以下情况下运行函数 any它的属性被修改了吗 我想知道是否可以运行某些子进程来监视类的更改 但也许有一种方法可以继承class并修改一些on change函数是 Python 类的一部分 有点像默认的 repr
  • ImportError:无法导入名称 GstRtspServer,未找到内省类型库

    我目前正在尝试让一个简单的 GstRtspServer 程序在外部亚马逊 Linux EC2 服务器上运行 但在让它实际运行时遇到了严重的问题 无论我做什么 当我尝试运行它时 即使程序仅减少到 import gi gi require ve
  • 更改散景图中选项卡的样式

    我想知道是否有办法更改散景图上生成的选项卡的属性 诸如增加文本字体 更改制表符宽度等更改 以下是用于生成具有两个选项卡的绘图的简单代码 from bokeh models widgets import Panel Tabs from bok
  • 在 Windows 上安装 PyGIMP

    在网上 我可以找到有关使用 python 编写 gimp 脚本的各种示例 http www jamesh id au software pygimp http www jamesh id au software pygimp http ww
  • 在 pandas eval 中调用 round()、ceiling()、floor()、min()、max()

    正如标题所说 有没有办法在 pandas eval 中支持 round ceiling min max floor 函数 数据框 import pandas as pd import numexpr as ne op d ID 1 2 3
  • argparse add_argument 别名

    有没有办法使用 argparse 创建别名 例如 我想做这样的事情 parser add argument foo parser add argument alias bar foo 也就是说 使用 bar应该相当于使用 foo 您可以简单
  • ModuleNotFoundError:没有名为“googleapiclient”的模块

    如果这是一个愚蠢的问题 我深表歉意 我在 stackoverflow 上搜索过 但没有找到解决办法 我正在致力于从 Python 2 7 迁移到 Python 3 8 我收到一个程序的以下错误 请帮我 Traceback most rece
  • 在类方法 Python 中调用多处理

    最初 我有一个类来存储一些处理后的值 并通过其他方法重用这些值 问题是当我尝试将类方法划分为多个进程以加速时 python 生成了进程 但它似乎不起作用 正如我在任务管理器中看到的那样 只有 1 个进程在运行 并且结果从未传递 我做了几次搜
  • 深度学习——一些关于caffe的幼稚问题

    我试图了解 caffe 的基础知识 特别是与 python 一起使用 我的理解是模型定义 比如给定的神经网络架构 必须包含在 prototxt file 当您使用数据训练模型时 prototxt 您将权重 模型参数保存到 caffemode
  • 函数调用中的星号[重复]

    这个问题在这里已经有答案了 我正在使用 itertools chain 以这种方式 展平 列表列表 uniqueCrossTabs list itertools chain uniqueCrossTabs 这与说有什么不同 uniqueCr
  • 在IPython笔记本中自动播放声音

    我经常在 IPython 笔记本中运行长时间运行的单元 我希望笔记本在单元完成执行时自动发出蜂鸣声或播放声音 有没有办法在 iPython 笔记本中执行此操作 或者我可以在单元格末尾放置一些命令来自动播放声音 我正在使用 Chrome 如果
  • 使用 python pyad 访问对象 [] 时出现问题

    我在尝试使用 pyad 访问活动目录用户属性时遇到问题 这是我的代码 user pyad aduser ADUser from cn tuser print user get attribute lastLogonTimestamp 这些是
  • 类型错误:对于仅使用浮点数的函数,返回数组必须是 ArrayType

    这个实在是难倒我了 我有一个计算单词权重的函数 我已经确认 a 和 b 局部变量都是 float 类型 def word weight term a term freq term print a type a b idf term prin
  • Python tkinter:在组合框中使用“文本变量”似乎没用

    使用textvariable在 tkinter 中创建组合框时的属性似乎完全没用 有人可以解释一下目的是什么吗 我查看了 Tcl 文档 它说textvariable用于设置默认值 但看起来在 tkinter 中您只需使用 set方法来做到这
  • 关闭 IPython Notebook 中的自动保存

    我正在寻找一种方法来关闭 iPython 笔记本中的自动保存 我已经通过 Google Stack Overflow 搜索看到了有关如何打开自动保存的参考资料 但我想要相反的内容 关闭自动保存 如果这是可以永久设置的东西而不是在每个笔记本的

随机推荐

  • 深入理解计算机系统-程序链接

    链接 就是将不同部分的代码和数据手机和组合成为一个单一文件的过程 这个文件可被加载到存储器并执行 链接过程可以在如下时间执行 编译时 在源代码翻译成机器代码时 加载时 程序被加载器加载到存储器并执行时 运行时 由应用程序去完成这个工作 OS
  • 笛卡尔积的解释和作用

    一 笛卡尔积的解释 例 给出二个域 假设集合A a b 集合B 0 1 2 则两个集合的笛卡尔积为 a 0 a 1 a 2 b 0 b 1 b 2 类似的例子有 如果A表示某学校学生的集合 B表示该学校所有课程的集合 则A与B的笛卡尔积表示
  • c语言浮点数出错_20192020第二学期C语言练习题03

    一 单选题 共100题 50分 1 若有定义int a 10 p a 则表达式p 5表示 A 元素a 5 的地址 B 元素a 6 的地址 C 元素a 5 的值 D 元素a 6 的值 正确答案 A 2 题号 8281若有定义 int aa 8
  • FFmpeg将编码后数据保存成mp4

    以下测试代码实现的功能是 持续从内存块中获取原始数据 然后依次进行解码 编码 最后保存成mp4视频文件 可保存成单个视频文件 也可指定每个视频文件的总帧数 保存多个视频文件 为了便于查看和修改 这里将可独立的程序段存放在单个函数中 1 线程
  • Android判断有无外置SD卡(TF卡),并读写文件

    转载来源 https blog csdn net qq 27061049 article details 94178875 1 相关方法说明 2 Android Manifest xml 添加权限
  • 自制USB-HUB一分四扩展器

    自制USB HUB一分四扩展器 电脑只有俩USB2 0接口 不够用 所以决定自己做一个 使用到的芯片是sl2 1a 考虑到是自己用 所以成本还是比较重要的 这款芯片价格便宜 而且做扩展器也是够用的 适用于USB2 0 下面是原理图 其实这个
  • 您的计算机已被.balckhoues-V-XXXXXXX勒索病毒感染?恢复您的数据的方法在这里!

    引言 网络威胁不断进化 勒索病毒成为了当今数字世界中的一大威胁 在这些恶意软件中 balckhoues V XXXXXXX 勒索病毒以其高级的加密技术和威胁手段引起了广泛关注 本文91数据恢复将深入介绍 balckhoues V XXXXX
  • RAS非对称加密,前端js加密,node后端解密,jsencrypt

    纯HTML引入jsencrypt js文件 node后端解密也是独立文件jsencryptnode js 前端加密 下面是公钥
  • 实战经验分享:如何通过HTTP代理解决频繁封IP问题

    在网络爬虫和数据采集等应用中 频繁遇到目标网站封锁或限制IP的情况是非常常见的 为了解决这个问题 使用HTTP代理是一种有效的方法 本文将与您分享一些实战经验 帮助您通过HTTP代理解决频繁封IP问题 确保您的数据采集工作顺利进行 一 了解
  • 查看Oracle数据库的用户名和密码

    运行 cmd 按如下输入命令 sqlplus as sysdba sysdba为超级用户 alter user 用户名 account unlock 解除锁定 必须带 号 注意用英文字符 alter user 用户名 identified
  • 网页版百度网盘倍速方法

    打开控制台在console中输入以下代码 videojs getPlayers video player html5player tech setPlaybackRate 2 然后回车即可 后面数字即为速度可以自由定义 附 打开控制台办法
  • Selenium Python2022(二)

    您可能需要在多种情况下针对不同的浏览器 例如Firefox Chrome Internet Explorer Edge 测试代码 跨不同浏览器测试网站的做法称为自动浏览器测试 要使用Selenium自动化测试执行自动浏览器测试 您应该在单元
  • 元宇宙时代超高清视音频技术白皮书关于流媒体协议和媒体传输解读

    流媒体协议 元宇宙业务场景对流媒体传输的实时性和互动性提出了更高的要求 这就需要在传统的 RTMP SRT HLS 等基础上增加实时互动的支持 实时互动 指在远程条件下沟通 协作 可随时随地接入 实时地传递虚实融合的多维信息 身临其境的交互
  • 数据可视化:在 React 项目中使用 Vega 图表 (二)

    上一篇讲了如何在 React 项目中用 Vega Lite 绘制基本的 area chart 图表 本篇将介绍如何绘制多层图表 如何添加图例 多层图表 通过上一篇文章 我们知道了可以通过 mark encoding 等来描述我们想要的图表
  • STM32F103ZET6【HAL函开发】STM32CUBEMX------7.DAC实验

    STM32F103ZET6有2 个 DAC 转换器 每个转换器对应 1 个输出通道 对应的IO口如下 DAC OUT1 PA4 DAC OUT2 PA5 目的 DAC通道2可以输出3 3以下的任意电压 同时通过ADC1通道8采集到 打印到串
  • Vue中div contenteditable 的光标定位

    在Vue做项目时 做了一个div contenteditable true 的组件作为文本输入框 在非手动输入值后 光标会丢失 经测试以下这段代码可用 直接将光标定位到最后 function keepLastIndex obj consol
  • 刷脸支付大量的商户正在大步踏进数字化

    传统的商业零售不缺乏客源 但是弊端在于 顾客和商家建立有效接触的时间太短 可能只有结账时的短短十秒左右 很多人都有过去便利店买东西 店员安利办会员卡的经历 但是绝大多数人只想尽快买单走人 商家想做进一步精准推进和营销实在难上加难 蜻蜓是首款
  • Python3,我把新年祝福写在“雨“中,你看,雨一直下,气氛还算融洽,在同个屋檐下....

    新年愿望写在 雨 中 1 引言 2 代码实战 2 1 模块介绍 2 1 1 Pygame 介绍 2 1 2 Pygame的display介绍 2 1 3 Pygame的event介绍 2 1 4 Pygame的font介绍 2 2 代码示例
  • C++之弱引用智能指针weak_ptr的验证

    目录 shared ptr带来的问题 标准库weak ptr弱引用验证 标准库中weak ptr交叉引用的验证 shared ptr带来的问题 在交叉引用时 会造成堆上资源无法释放的问题 使用weak ptr弱引用就可以打破这个交叉引用 因
  • 如何判断一组数据是否符合正态分布呢?

    在很多模型及假设检验中都需要满足一个假设条件 数据需服从正态分布 这篇文章主要讲讲如何判断数据是否符合正态分布 主要分为两种方法 描述统计方法和统计检验方法 判断一组数据是否为正态分布的方法 描述统计方法 Q Q图 P P图 直方图 茎叶图