正态检验 (Normality Test)——常见方法汇总与简述

article/2025/1/5 9:43:32

前 言

在科学研究中,往往需要对数据进行差异性检验,而常用的参数检验需要数据服从正态分布,因此在决定是否采用参数检验之前需要先对数据进行正态性检验。这一步在任何统计学软件中(如SPSS、SAS、Origion、GraghPad等)都能够轻易实现,但每个软件都会同时包括多种正态检验方法,此时该选哪个方法来对自己的数据进行正态性检验呢?这就是本文要解决的主要问题。在查阅相关资料后,本文将对多种常见的正态检验方法进行简单地归纳总结,尽可能写清楚每个检验方法的适用范围,但对于每个检验方法的数学统计学原理不作深入解析,仅简略描述其大致的基本原理。

 


 

目 录

一、正态检验基本原理概述

二、正态检验方法汇总与简述

1、描述性统计方法

2、概率统计方法

(1)基于经验分布函数(empirical distribution function,EDF)

  ①Kolmogorov–Smirnov test 

  ②Lilliefors test 

  ③Anderson–Darling test

  ④Cramér–von Mises criterion

(2)基于卡方分布(Chi-squared distribution)

  ①D'Agostino's K-squared test (Skewness-Kurtosis test)

  ②Jarque–Bera test

(3)基于回归和相关(regression- and correlation-based)

  ①Shapiro–Wilk test

  ②Chen-Shapiro test

  ③Ryan-Joiner test

  ④Shapiro-Francia test

3、贝叶斯统计方法

三、正态检验方法总结(太长不看版)

四、关于正态检验的其他问题

五、参考资料


 

       在统计学中,正态检验主要用于检验一个数据集是否服从正态分布。常用的t检验、方差分析(ANOVA)等参数检验都有一个共同的前提条件:样本数据必须服从正态分布,即样本数据必须来源于一个正态分布的总体,若样本数据不服从正态分布,就不能用以上参数检验对数据进行分析,而应该使用非参数检验(如卡方检验、置换检验等)。因此在对数据进行统计分析之前,第一步就需要对数据进行正态性检验,以检验该数据来自正态分布总体的概率有多大,再选择对应的参数或非参数检验方法进行分析。

 

一、正态检验基本原理概述

正态检验属于非参数检验,其检验方法有很多种,且每一种检验方法的基本原理和适用条件都有所不同。在所有正态性检验方法中,其基本原理主要可以从以下三个方面进行解释:

(1)从描述性统计方法的角度来说,要检验数据是否服从正态分布,可以计算“数据分布”和“标准正态分布模型”之间的拟合优度,若拟合性较差,即认为数据不服从正态分布;

(2)从概率统计方面,即假设检验的角度来说,数据是否服从正态分布可以通过与“数据服从正态分布”这样一个零假设进行假设检验计算,构建相关统计量来计算出检验结果;

(3)从贝叶斯统计的角度来说,该方法本身并不检验其正态性,而是计算这批数据来自于服从μ、σ正态分布总体的可能性更大,还是来自于其他分布总体的可能性更大。

 

二、正态检验方法汇总与简述

根据以上三个不同角度的基本原理,可以把正态检验方法分为以下三部分:

1、描述性统计方法

描述性统计方法实际上就是图示法。该方法直接通过绘制数据的直方图,与标准正态分布曲线进行比较。但该方法在数据量少的时候比较难看出两者之间的差异,因此更多地会通过对数据直方图曲线与对应μ、σ的标准正态分布曲线之间进行回归,计算出拟合优度来说明两条曲线之间的拟合程度。这种用于评估数据正态性的图形工具有很多,其中“分位数-分位数图”(quantile-quantile plot,QQ plot),即QQ图是正态检验中最常见的图示方法。这种图正是样本数据直方图和正态分布图之间一种拟合优度的直观度量方式,当QQ图上的点都大致落在一条直线上时,表示高度正相关,即这些数据是正态分布的。

 

除此以外,不同的统计软件还会提供一些其他的正态检验图示方法,如直方图、PP图等。(PP图是根据变量的累积概率对应于所指定的理论分布累积概率绘制的散点图,用于直观地检测样本数据是否符合某一概率分布。如果被检验的数据符合所指定的分布,则代表样本数据的点应当基本在代表理论分布的对角线上。)

 

图示法相关链接:

正态QQ图原理

PP图和QQ图

 

2、概率统计方法

概率统计方法是最常用也是种类最多的正态检验方法,主要包括以下三类。(仅列举常用的部分方法,还有许多其他较新的检验方法及现有检验方法的改进方法等均未列出。)

(1)基于经验分布函数(empirical distribution function,EDF)

  ①Kolmogorov–Smirnov test 

简称为K-S检验, 是最为常用的正态性检验方法之一,其方法主要是计算出经验分布和理论分布之间的距离,并将其中最大的距离(差异)作为检验统计量。因此K-S检验的优点是不仅可检验正态分布,还可用于检验其他任何分布。但K-S检验需要我们已经事先知道分布总体的均值和方差,即需要指定总体的均值和方差才能进行计算,但在实际情况下很少会事先知道总体的均值和方差,所以难以进行K-S检验。同时也因为仅仅把分布间的最大差异作为统计量,因此相比于其他检验方法其敏感性相对弱一些,因此在GraphPad软件中不推荐使用该方法来进行正态性检验,但实际上在大样本情况下K-S检验还是非常实用的(SAS推荐样本量>2000)。

 

  ②Lilliefors test 

该检验实际上是K-S检验的一种改进方法(可简写成K-S-L检验),计算方法比K-S更复杂一些,主要通过计算经验分布函数累积分布函数之间的最大差异来进行检验,还包括对K-S检验的P值进行了调整等等,另外K-S-L检验直接利用样本的均值和方差进行计算,因此不需要事先指定总体分布的均值和方差。因此相比于K-S检验,K-S-L的检验效果更好一些,但与其他检验方法相比其敏感性依然较弱。在GraphPad中的K-S检验为了不需要用户指定总体分布的均值和方差,实际上采用的是K-S-L检验。另外,K-S-L检验最适用于对称分布的小样本(origion、matlab),同时也适用于大样本(origion中提到大样本分布曲线间的最大差异更具有统计显著性,因此一些分析人士建议K-S-L的样本量最好大于2000),但只适用于正态性检验

 

  ③Anderson–Darling test

简称为A-D检验,该检验主要通过计算数据的累积分布曲线理想正态分布的累积分布曲线之间的差异来进行检验,与K-S检验不同,该方法考虑了两条累积分布曲线之间的所有差异,因此它比K-S检验效果更好,也是检验正态性最好的方法之一。但该方法的缺点是仅适用于小样本,Origion中推荐样本量为26个以下,但有些超过200的工业数据也有可能通过A-D检验,另外该方法还可用于检验其他分布

 

  ④Cramér–von Mises criterion

(较少用,不作详细说明。SAS软件有提供该检验。)

 

(2)基于卡方分布(Chi-squared distribution)

  ①D'Agostino's K-squared test (Skewness-Kurtosis test)

该方法主要通过计算偏度(Skewness)峰度(Kurtosis)来量化数据分布曲线标准正态分布曲线之间的差异与不对称性,然后计算这些值与正态分布期望值的之间的不同程度。D'Agostino's K-squared test是一种常用且强大的正态性检验方法,是GraphPad中推荐的正态检验方法。由于分布曲线的偏度和峰度容易受到数据量的影响,因此该方法适用于大样本,且仅能用于正态性检验

 

  ②Jarque–Bera test

该方法通过计算样本数据正态分布两者偏度与峰度拟合优度,来检验样本是否来自均值和方差均未知的正态分布(即零假设中的正态分布参数是未知的,是一种双侧拟合优度检验)。Jarque–Bera test通常使用卡方分布来估计大样本的临界值,该临界值是通过蒙特卡洛模拟(Monte Carlo)计算出来的,因此该方法必须用于大样本(matlab提到样本量小于2000时,显著性水平会从0.001跌到0.5),且只能用于正态性检验

 

(3)基于回归和相关(regression- and correlation-based)

  ①Shapiro–Wilk test

Shapiro–Wilk test是正态性检验最为有效的方法之一,是一种在频率统计中检验正态性的方法,但其测试基础较难理解(不多加叙述)。该方法在每一个样本值都是唯一时的检验效果最好,但若样本中存在几个值重复的情况下该方法便会大打折扣。因此该方法只适用于小样本,推荐样本量为7~2000,Origion中允许样本大小为3~5000,当样本量超过5000时不再适用。该方法仅适用于正态性检验

 

  ②Chen-Shapiro test

Chen-Shapiro test是在不损失功率的情况下,Shapiro-Wilk test的拓展,是一个相对简单又有效的正态检验方法,和Shapiro-Wilk test一样只适用于小样本(<2000),同时仅适用于正态性检验。 

  

  ③Ryan-Joiner test

(较少用,不作详细说明。)

 

  ④Shapiro-Francia test

(较少用,不作详细说明。)

 

      在不同的统计软件(如SPSS、R、SAS、origion、GrapgPad等)中,会包括其中几个不同的正态检验方法,具体请查看相关软件的说明书。

 

3、贝叶斯统计方法

      主要通过贝叶斯因子将正态性和其他不同类别的分布进行比较。

 

三、正态检验方法总结(太长不看版)

根据查阅相关资料和软件说明书,以下为正态性检验的常用选择方法:

(1)当样本量较时通常会选择 K-S-L test 或 D'Agostino's K-squared test

(2)当样本量较时通常选用 Anderson-Darling test 或 Shapiro-Wilk test

当然具体还是要根据数据本身以及相关文献的处理方法进行选择!!!

 

四、关于正态检验的其他问题

(1)由于每个正态性检验方法的检验角度不同,因此同一批数据用不同的检验方法可能得到的结果会不尽相同,所以在实际操作中可以根据样本量大小选择多种检验方法进行正态性检验,同时通过QQ图等图示法辅助判断;

(2)正态性检验只是检验样本数据来自正态分布总体的可能性有多大,或者说只是检验样本数据的总体是否近似正态分布,因此样本的总体并不是一定服从标准正态分布,但已有大量实验表明,即使总体仅为近似的正态分布,也能很好地进行 -test、方差分析等参数检验。

(3)有些样本的总体可能仅为近似的正态分布,但没有一种直接的方法可以决定“偏离正态性的严重程度”是否足以改变“进行参数检验”的选择。正态性检验的意义本身并不全是为了决定什么时候使用非参数检验,还包括在确定一个样本的总体如果近似服从正态分布后,可以使用更加简单的方法来制定参考值范围、对数据进行质量控制等等。决定使用参数检验还是非参数检验是一个非常复杂且困难的问题,在实际研究中,不应该仅基于正态性检验的结果来自动断定是否使用非参数检验,还需要根据实际问题更深入地考虑其他影响因素(具体问题具体分析)。

(4)正态性检验在大多数情况下并不是十分有用。因为在样本量的情况下,正态检验对于检测“非正态分布”的作用不是很大;而当样本量足够大的时候,数据是否需要严格通过正态性检验、是否需要严格服从正态分布就显得不那么重要了,因为检验和方差分析等对于近似正态分布数据的检测结果是非常稳定的(根据大数定律和中心极限定理,当样本量足够大时,所有分布都近似于正态分布)。因此正态性检验只是一个测试方法,用于告诉我们自己的数据偏离理想正态分布的情况是否严重到足以使以正态分布为前提条件的统计方法失效,正态性检验的结果只是一个参考。

 

五、参考资料

https://en.wikipedia.org/wiki/Normality_test

https://www.graphpad.com/guides/prism/latest/statistics/stat_qa_normality_tests.htm

https://www.originlab.com/doc/Origin-Help/Normality-Test

https://www.originlab.com/doc/Origin-Help/NormalityTest-EX

https://towardsdatascience.com/6-ways-to-test-for-a-normal-distribution-which-one-to-use-9dcf47d8fa93

[转载]假设检验1_whu_Paprika_新浪博客 (sina.com.cn)

 


 

以上仅为个人整理的笔记,带有许多个人的理解,且对于每个方法具体的统计学原理没有作深入了解,若有理解错误的地方欢迎指出,谢谢!


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

相关文章

正态性检验方法汇总

本文主要对正态性检验方法做了汇总&#xff0c;重点阐述了常用的正态性检验方法的使用场景及其在 R 或 Python 中的实现。 0.概述 正态分布在统计学中有着极为重要的地位&#xff0c;它是 χ 2 \chi^2 χ2分布、 t t t分布、 F F F分布的基础&#xff0c;也是许多统计方法的理…

python语言程序设计(MOOC 嵩天)第五章 学习笔记(0214)

第五章 函数和代码的复用 5.1 函数的定义与使用 5.1.1 函数的理解和定义 函数是一段代码的表示&#xff1a; 函数是IPO的实现 函数是一段代码的封装 ①特定功能、可重用的语句组 ②功能的抽象 #作用&#xff1a;降低编程难度、代码复用 def <函数名> ( <变量> )…

Python-3.函数和代码复用

一、函数的定义与使用 使用保留字def定义函数,lambda 定义匿名函数可选参数(赋初值)、可变参数(*b)、名称传递保留字 return 可以返回任意多个结果保留字 global 声明使用全局变量,一些隐式规则1.1 函数的理解与定义 函数是一段代码的表示 函数是一段具有特定功能的、可重用的…

python123练习5: 函数和代码复用 (第5周)

实例7:七段数码管绘制 ‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬ 描述 这是"实例"题,与课上讲解实…

北京理工大学:《Python语言程序设计》详细笔记

第一章&#xff1a;程序设计基本方法 计算机与程序设计 计算机是根据指令操作数据的设备计算机发展参照摩尔定律&#xff0c;表现为指数形式 编译和解释 计算机执行源程序两种方式&#xff1a;编译和解释编译&#xff1a;将源代码一次性转换成目标代码的过程。执行编译过程…

Python语言程序设计(嵩天)-第5周-函数和代码复用

目录&#xff1a; 5.1 函数的定义与使用5.2 实例7: 七段数码管绘制5.3 代码复用与函数递归5.4模块4: PyInstaller库的使用5.5实例8: 科赫雪花小包裹 导学 前课复习 数字类型及操作&#xff1a; 整数类型的无限范围及4种进制表示浮点数类型的近似无限范围、小尾数及科学计数…

练习5: 函数和代码复用

练习5: 函数和代码复用 1 .1实例7&#xff1a;七段数码管绘制 描述 这是"实例"题&#xff0c;与课上讲解实例相同&#xff0c;请作答检验学习效果。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬…

《python语言程序设计》笔记

《python语言程序设计》笔记 第一章 程序设计基本方法1.1基本知识1.2计算机编程1.3数据类型温度转换1.4课后习题1.5python123习题与测试第二章2.1turtle库(海龟库)2.1.1空间坐标体系2.1.2turtle角度坐标体系2.1.3RGB色彩体系2.2turtle程序语法元素分析2.2.1库引用和 import2.…

中国大学MOOCPython语言程序设计(北京理工大学)第5-6周学习笔记和课后练习

中国大学MOOCPython语言程序设计&#xff08;北京理工大学&#xff09;第5-6周学习笔记和课后练习 第5周 函数与代码复用5.1 函数的定义与使用5.2 实例7: 七段数码管绘制5.3 代码复用与函数递归汉诺塔问题 5.4 模块4: PyInstaller库的使用5.5 实例8: 科赫雪花小包裹任意累积斐波…

全国计算机等级考试二级Python(2021年9月)备考笔记 第五天

文章目录 Python语言程序设计-嵩天老师(MOOC)听课笔记 第5周知识点一函数的定义函数的调用函数的调用过程参数个数可选参数传递可变参数传递参数传递的两种方式函数的返回值局部变量和全局变量lambda函数lambda函数的应用 实例 七段数码管绘制问题分析举一反三 知识点二代码复用…

Python语言程序设计笔记

例&#xff1a;获得用户输入数字N&#xff0c;计算并输出从N开始的5个质数&#xff0c;单行输出 首先&#xff1a;定义函数判断一个数是否是质数&#xff0c;return True/False&#xff0c;注意return True的格式&#xff0c;不在for循环体中&#xff0c;在函数体中(循环的高…

Python——函数和代码复用(模块4:PyInstaller库的使用)(实例:七段数码管绘制科赫雪花小包裹)

前言 本篇主要介绍函数和代码复用&#xff0c;以七段数码管绘制为例&#xff0c;介绍函数的定义和使用。以科赫雪花小包裹为例&#xff0c;介绍PyInstaller库的使用。 &#xff08;从本篇开始&#xff0c;出现的一些库中函数介绍以及部分简单代码都将以图片形式呈现&#xff0…

Python语言程序设计第五章

第五章 函数和代码复用 方法论 -Python基本代码抽象即函数的使用方法 实践能力 -学会编写带有函数并复用代码的程度 5.1 函数的定义与使用 1、函数的理解与定义 函数是一段代码的表示 -函数是一段具有特定功能的、可重用的语句组 -函数是一种功能的抽象&#xff0c;一般函数…

创意画板延伸内容

在完成了创意画板的基础功能实现后&#xff0c;我们就可以通过画板来绘制一些有趣的图形了 1.平面山脉图 效果图如上 山脉图是由一个个山峰构成的&#xff0c;所以先绘制一个山峰 而山峰的绘制算法是&#xff1a;先确定两个点A B&#xff0c;然后获取A B的中间点P&#xff0…

Java第六课——画图板

Java第六课——画图板 这节课画一个画图板&#xff0c;可以画线画圆&#xff0c;还可以通过递归画出好看的图案如&#xff1a;谢尔宾斯基三角形&#xff0c;康托尔方形集&#xff0c;甚至立体图门格海绵。 首先创建一个窗体。定义一个类和一个方法。 public class Draw{publ…

分形理论中的分维解析

最近打算利用一段时间好好学习一下分形理论&#xff0c;也写一系列博客记录下自己的学习归纳情况。下面是这部分文章的目录&#xff1a; 一、分形理论的历史过程 二、分形理论的基础概念 三、分形理论的分维解析 四、分形理论的Hausdorff维数 五、分形理论的盒维数 六、分形理论…

python绘制n阶科赫曲线线段_分形几何中科赫雪花的绘制

目录分形几何在自然界中广泛存在(康托尔集、谢尔滨斯基三角形、门格海绵、龙形曲线、科赫曲线...),实际上分形几何是一种迭代的几何图形。本文主要讨论科赫曲线。 科赫曲线的绘制: import turtle def koch(size,n):#绘制科赫曲线含俩个参数,大小和阶数 if n == 0:#基线情…

【计算几何】大自然的数学模型--分形几何

一、前言 分形几何是几何数学中的一个分支&#xff0c;也称大自然几何学&#xff0c;由著名数学家本华曼德勃罗&#xff08; 法语&#xff1a;BenoitB.Mandelbrot&#xff09;在 1975 年构思和发展出来的一种新的几何学。分形几何是对大自然中微观与宏观和谐统一之美的发现&…

Java分形递归——门格海绵

门格海绵的结构简单来说就是从一个正方体开始&#xff1b;再把正方体的每一个面分成9个正方形&#xff0c;这时就形成了由27个小正方体组成的一个大正方体&#xff1b;然后再把每一面的中间的正方体和最中心的正方体去掉&#xff0c;最终留下20个正方体。最后&#xff0c;把每一…

门格海绵的实现

实现效果&#xff1a; 源代码&#xff1a; package sponge;import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Point; import java.awt.Polygon;import javax.swing.JFrame;public class Sponge_Main extends JFrame impleme…