Python 数据正态性检验及Python、R、SPSS正态检测方法

前提:数据正态性是诸如回归分析、方差分析等进行前需要进行的判断。

1. 所有方法:

  • 首先最常用的方法是图示法,包括正态图和P-P/Q-Q图。正态图看一下是不是“钟形”分布曲线;P-P是查看实际数据累积比例与对应正态分布累积比例的散点图;Q-Q是查看实际数据与对应正态分布分位数的符合程度。

  • 其次是正态性检验方法,利用观测数据判断总体是否服从正态分布的检验称为正态性检验,它是统计判决中重要的一种特殊的拟合优度假设检验。

  • 最后是描述法(偏度-峰度检验法),即通过描述数据偏度和峰度系数来检验数据的正态性。参考正态分布的偏度为0,峰度为3(实际应用中通常将峰度值减去3,根据具体的软件需要注意)。一般现实数据是不可能达到这个要求的,所以如果峰度绝对值小于10并且偏度绝对值小于3,即可判定数据基本为正态分布。

几种方法对比。从上面介绍可以看出,正态性检验最为苛刻,而实际中可能存在样本不足的情况,此时如果数据的图示法基本符合正态分布也是可行的。同时,采用偏度峰度的判别方法也简单可行,但容易受到异常值的影响。

一般而言,如果原始数据不满足正态分布(比如偏态分布),通过取对数、开根号这种数据变换方法可使数据更接近正态性。

2. 正态性检验方法:

检验方法
  • Shapiro-Wilktest(夏皮罗维尔克检验法,W检验):Shapiro-Wilk检验需要首先对数据进行排序,统计量可以看做是排序值与最佳无偏线性估计值之间的平方,值越高,代表样本与正态分布更匹配。W统计量计算公式参见Shapiro-Wilk
  • Kolmogorov-Smirnov(科尔莫戈罗夫检验法,K-S检验):Kolmogorov-Smirnov检验是基于累计分布函数的,单样本K-S检验可用于检测一个数据的观测值是否符合特定的理论分布(比如正态分布等);两样本的K-S检验可用于比较两个观测样本的经验函数是否存在显著差异。K-S检验是一种稳健的非参数化方法,不依赖于均值位置、适用范围广。K-S统计量的计算公式参见Kolmogorov-Smirnov
检验思路【重点】
  • 检验问题:W检验与K-S检验的原假设H0为:总体服从正态分布。
  • 判断思路:因为原始假设为数据符合正态分布,所以如果得到的显著性值很小(小于设定的0.01,0.005,0.001等),那么原假设被推翻,说明数据不符合正态分布;反之,如果统计变量的显著性值大于设定的显著性水平,那么原假设成立,数据符合正态分布(简单来说,p>0.05是我们的目标,如果满足,即可说明数据满足正态性分布)。
方法对比
  • 原理不同:上述可知两个方法的基本原理不一致。
  • 样本量大小:在选择时,经常依据样本量的大小进行选择。对于W检验,适用于小样本,作者推荐样本量小于20的时候使用(参考Shapiro-Wilk),SPSS统计软件以及搜索资料发现,在样本量小于50时,推荐使用W检验;在样本量位于50-5000的情况下,可以同时考虑W检验和K-S检验;在样本量大于5000时,一般只使用K-S检验(SPSS在样本量大于5000时只显示K-S统计量)。

3. SPSS、R和Python语言代码实战

SPSS
R语言
# W 检验
shapiro.test(mydata$age)

# K-S检验采用nortest包中的lillie.test()函数来实现
library(ggplot2)
head(diamonds)
install.packages("nortest")
library(nortest)

lillie.test(diamonds$price)
Python语言

下面展示下用Python中的scipy包进行检验。

from scipy import stats
rng = np.random.default_rng()
x = stats.norm.rvs(loc=5, scale=3, size=100, random_state=rng)

shapiro_test = stats.shapiro(x)

shapiro_test
ShapiroResult(statistic=0.9813305735588074, pvalue=0.16855233907699585)

shapiro_test.statistic
0.9813305735588074

shapiro_test.pvalue
0.16855233907699585
  • K-S检验
    函数形式:scipy.stats.kstest(rvs, cdf, args=(), N=20, alternative='two-sided', mode='auto')
    官方链接:https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.kstest.html
    主要参数:rvs为待检验的数组或列表;cdf为检验方法,如果是单样本检验,数值为'norm', 'expon', 'rayleigh', 'gamma'等,设置为'norm’即为正态性检验;默认是双边检验;N设置输入的rvs为变量生成函数时指定数组的长度;其他变量不解释了。
from scipy import stats
x = np.linspace(-15, 15, 9)
stats.kstest(x, 'norm')
# 输出:KstestResult(statistic=0.444356027159..., pvalue=0.038850140086...)
from scipy import stats
rng = np.random.default_rng()
pts = 1000
a = rng.normal(0, 1, size=pts)
b = rng.normal(2, 1, size=pts)
x = np.concatenate((a, b))

k2, p = stats.normaltest(x)

4 完结

从应用角度来看很简单,在Python下,就是stats.normaltest(x)、stats.kstest(x, 'norm')以及stats.shapiro(x)三个的调用,后两者在样本量为50和5000时进行区分调用。

其他参考资料:
https://zhuanlan.zhihu.com/p/70755099
https://www.statsref.com/HTML/index.html
https://www.51xxziyuan.com/58/1287.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,928评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,192评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,468评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,186评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,295评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,374评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,403评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,186评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,610评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,906评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,075评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,755评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,393评论 3 320
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,079评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,313评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,934评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,963评论 2 351

推荐阅读更多精彩内容