检验样本正态性

news2024/11/25 12:24:16

简介

在统计学中很多推论与正态分布有关,并且很多统计量构造为满足正态分布的形式,很多分布在特定条件近似于正态分布。因此,在统计推断中经常需要判断样本的正态性。本文介绍一些常用的方法。

环境和数据准备:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy import stats
from statsmodels.stats import diagnostic

# check out https://github.com/Paradiseeee/Heaven
from Heaven import mpl_tools
mpl_tools.Begin().setting()

# 正态分布样本与二项分布样本(两者方差均值一致)
n_sample = stats.norm.rvs(2, np.sqrt(1.6), 100)
b_sample = stats.binom.rvs(10, 0.2, size=100)

plt.hist(n_sample, bins=20)
plt.title('Normal sampling distribution')
plt.xlabel('observations'); plt.ylabel('frequency'); plt.show()

plt.hist(b_sample, bins=20)
plt.title('Binomial sampling distribution')
plt.xlabel('observations'); plt.ylabel('frequency'); plt.show()

请添加图片描述

一、通过绘图直观判断

频数(分布密度)图

通过图像对比判断样本是否服从理论总体的分布,需要总体分布已知(或假设拟合相应分布)

# 模拟总体
pop = stats.norm.rvs(2, np.sqrt(1.6), 10000)

# 绘制常见的分布图形
def plot_dist(rv, title):
    axes = mpl_tools.Func().get_subplots('AABC')
    # 频数密度图
    axes['A'].hist(rv, bins=20, density=True)
    # 箱形图
    axes['B'].boxplot(rv)
    # 小提琴图(竖起来的 KDE 图)
    axes['C'].violinplot(rv)
    plt.title(title, loc='left')
    plt.show()

plot_dist(n_sample, 'Normal Sampling Distribution')
plot_dist(b_sample, 'Binomial Sampling Distribution')
plot_dist(pop, 'Normal Population Distribution')

请添加图片描述
请添加图片描述
请添加图片描述

Q-Q 图

通过抽样和总体的分位数进行对比

# stats.probplot 严格来说是“概率图”,坐标轴未缩放的 Q-Q 图
stats.probplot(n_sample, dist='norm', plot=plt)
plt.title('Q-Q plot of normal samples \n(good fitting!)', loc='left')
plt.show()

stats.probplot(b_sample, dist='norm', plot=plt)
plt.title('Q-Q plot of binomial samples \n(bad fitting~)', loc='left')
plt.show()

请添加图片描述

二、通过参数量化比较

绘图方法优点在于直观,但是得出结论只能是粗略的,只是“看起来像”,缺乏可信度。通过统计参数对比可以更准确的量化样本的正态性。

Shapiro-Wilk test

results = pd.DataFrame(
    {'normal':[None]*4, 'binomial':[None]*4}, 
    index=['Shapiro', 'KS', 'Anderson', 'Lilliefors']
)

# 构造了一个统计量,该统计量越高,表示样本越有可能是正态分布
ntest = stats.shapiro(n_sample)
btest = stats.shapiro(b_sample)
results.loc['Shapiro', 'normal'] = (ntest.statistic, ntest.pvalue)
results.loc['Shapiro', 'binomial'] = (btest.statistic, btest.pvalue)

Kolmogorov-Smirnov test

ntest = stats.kstest(n_sample, stats.norm.cdf, args=(2, np.sqrt(1.6)))
btest = stats.kstest(b_sample, stats.norm.cdf, args=(2, np.sqrt(1.6)))
results.loc['KS', 'normal'] = (ntest.statistic, ntest.pvalue)
results.loc['KS', 'binomial'] = (btest.statistic, btest.pvalue)

Anderson-Darling test

ntest = stats.anderson(n_sample, dist='norm')
btest = stats.anderson(b_sample, dist='norm')
# 不提供连续的 p 值,取显著性水平为 1% 时的临界值
results.loc['Anderson', 'normal'] = (ntest.statistic, ntest.critical_values[ntest.significance_level == 1][0])
results.loc['Anderson', 'binomial'] = (btest.statistic, btest.critical_values[ntest.significance_level == 1][0])

Lilliefors’ test

ntest = diagnostic.lilliefors(n_sample, dist='norm')
btest = diagnostic.lilliefors(b_sample, dist='norm')
results.loc['Lilliefors', 'normal'] = ntest
results.loc['Lilliefors', 'binomial'] = btest

results = results.applymap(lambda x: tuple([round(i, 5) for i in x]))
print(results.to_markdown())
normalbinomial
Shapiro (0.99032, 0.6905)(0.93856, 0.00016)
KS (0.07716, 0.56435)(0.23, 4e-05)
Anderson (0.3403, 1.053)(2.65129, 1.053)
Lilliefors(0.06062, 0.48814)(0.17224, 0.001)

所有结果如上表,其中每个元组的第一位是对应的统计量,第二位是 p 值或者临界值,具体解释如下:

  • 对于 Shapiro 测试,统计量越大越接近正态分布(用于支撑原假设),p 值越小越拒绝原假设。从统计量来看,两个分布的样本都接近于正态分布,但是二项分布样本的 p 值明显小,在一般的显著性水平下(5%)可以拒绝原假设,即不服从正态分布。

  • 对于 KS 测试,正态样本的 p 值大于显著性水平,二项分布样本的 p 值小于显著性水平,拒绝原假设。

  • 对于 Anderson 测试,第一项是统计量,第二项是对应显著性水平为 1% 时的临界值(对于正态测试可选的有 15%、10%、5%、2.5%、1%,对于其他分布测试有不同的序列)。可以看到对于正态样本,统计量小于临界值,在 1% 的显著性水平下不能拒绝原假设;对于二项分布样本,拒绝原假设,样本不服从正态分布(2.65 > 1.05)。

  • 对于 Lilliefors 测试,根据第二项的 p 值进行判断,可以看到二项分布样本的 p 值为 0.001,可以拒绝原假设,不服从正态分布。

相关阅读 | 使用 fitter 拟合数据分布
阅读原文 | Paradise’s Blog


END

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

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

相关文章

CCLINK IE FIELD BASIC转MODBUS-TCP网关modbus tcp与tcp/ip的区别

协议的不同,数据读取困难,这是很多生产管理系统的难题。但是现在,远创智控YC-CCLKIE-TCP通讯网关,让这个问题变得非常简单。这款通讯网关可以将各种MODBUS-TCP设备接入到CCLINK IE FIELD BASIC网络中,连接到MODBUS-TCP…

在 Jetpack Compose 中使用 BottomDrawer

简介 Jetpack Compose 是一个现代化的,声明式的 UI 工具包,它让我们可以更方便地构建原生 Android UI。在本篇文章中,我们将会讨论如何在 Jetpack Compose 中使用 BottomDrawer。 什么是 BottomDrawer? BottomDrawer 是一种 UI 元素&…

【JAVA】准备工作------Java开发环境搭建,IDEA的基础设置与操作

🍉内容专栏:【JAVA】 🍉本文脉络:JAVA的准备工作,IDEA的安装以及基础设置和快捷操作 🍉本文作者:Melon西西 🍉发布时间 :2023.7.11 目录 1. 概述JDK、JRE 2. 第一个程序——创建…

Win10电脑插耳机没声音了如何恢复正常?

Win10电脑插耳机没声音了如何恢复正常?当Win10电脑插入耳机后却没有声音时,这可能会让用户感到困惑和沮丧,缺乏耳机声音可能会影响到用户的音频体验和日常使用,那么要怎么如何操作,才能让耳机恢复正常,以下…

webpack的打包流程

webpack的打包流程 yarn build 开始都走了哪些流程 yarn build 开始都走了哪些流程

软考A计划-系统集成项目管理工程师-项目进度管理-中

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 👉关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

【微信小程序-uniapp】CustomPicker 自定义单项选择器组件

1. 效果图 2. 组件完整代码 <template><view class="custom-picker"><view :class=<

2023数学建模国赛常用算法-Topsis优劣解距离法

更多国赛数学建模资料思路&#xff0c;关注文末&#xff01; 1 优劣解距离法&#xff08;TOPSIS&#xff09;简介 1.1 概念 TOPSIS 法是一种常用的组内综合评价方法&#xff0c;能充分利用原始数据的信息&#xff0c;其结果能精确地反映各评价方案之间的差距。基本过程为基于…

avue 自定义按钮修改后触发表单自带的校验方法

代码&#xff1a; <avue-form :option"option" v-model"publishForm" ref"publishForm"><template slot-scope"{size}" slot"menuForm"><el-button :size"size" click"$refs.publishForm.re…

【RuoYi-Cloud-Plus】学习笔记 09 - Sentinel(四)熔断降级知识整理

文章目录 前言参考目录版本说明学习笔记1、包结构2、DegradeSlot3、DegradeRule4、DegradeRuleManager5、CircuitBreaker5.1 CircuitBreaker.State6、AbstractCircuitBreaker6.1、AbstractCircuitBreaker#fromCloseToOpen6.2、AbstractCircuitBreaker#fromHalfOpenToOpen6.3、A…

0127 进程与线程1

目录 2.进程与线程 2.1进程与线程 2.1部分习题 2.2处理机调度 2.2部分习题 2.进程与线程 2.1进程与线程 2.1部分习题 1.一个进程的映像是&#xff08;&#xff09; A.由协处理器执行的一个程序 B.一个独立的程序数据集 C.PCB结构与程序和数据的组合 D.…

运动控制--双S型 + PID

运动控制--双S型 PID 1 介绍1.1 概述1.2 梯形速度曲线 VS 双S型速度曲线 2 运动控制器2.1 运动控制器的构成2.2 轨迹生成器2.3 插补器2.4 控制回路 3 PID4 双 S 型4.1 介绍4.2 双S模型&#xff08;7段S型&#xff09;规划参数算法公式轨迹分类 5 多种速度规划对比 【引用 Marc…

计算机网络基础第一章

一、计算机网络的概念及功能 1.1 计算机网络的概念 三网&#xff1a;有线电视网络、电信网络、计算机网络。 三网融合&#xff1a;通过计算机网络可以将有线电视、电信网络通过0/1编码等方式展现进行融合&#xff0c;从而实现计算机网络实现视频、电话等其他网络功能。 四网&a…

git推送出现问题error: remote origin already exists.(解决)

阿丹&#xff1a; 推送git的时候出现问题&#xff0c; 报错remote orign already exists这个错误 错误原因 可能是因为clone下来一个别人的仓库&#xff0c;在此基础上完成你的代码&#xff0c;推送到自己的仓库可能遇到如下问题&#xff1a; error: remote origin already e…

Ubuntu 放弃了战斗向微软投降

导读这几天看到 Ubuntu 放弃 Unity 和 Mir 开发&#xff0c;转向 Gnome 作为默认桌面环境的新闻&#xff0c;作为一个Linux十几年的老兵和Linux桌面的开发者&#xff0c;内心颇感良多。Ubuntu 做为全世界Linux界的桌面先驱者和创新者&#xff0c;突然宣布放弃自己多年开发的Uni…

SSM+Shiro安全框架整合(完成安全认证--登录+权限授权)+ssm整合shiro前后端分离

目录 1.搭建SSM框架 1.1.引入相关的依赖 1.2. spring配置文件 1.3. web.xml配置文件 1.4.配置Tomcat并启动 2.ssm整合shiro---认证功能 (1).引入依赖 (2).修改spring配置文件 (3).修改web.xml文件 (4).新建login.jsp(登录页面) (5).新建success.jsp(登录成功后跳转到此…

POLARDB IMCI 白皮书 云原生HTAP 数据库系统 一 列式数据是如何存储与处理的

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;在新加的朋友会分到2群&#xff08;共…

VMware ESXi 7.0 U3n macOS Unlocker OEM BIOS (标准版和厂商定制版)

VMware ESXi 7.0 U3n macOS Unlocker & OEM BIOS (标准版和厂商定制版) ESXi 7.0 标准版和 Dell (戴尔)、HPE (慧与)、Lenovo (联想)、Inspur (浪潮)、Cisco (思科) 定制版镜像 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-esxi-7-u3-oem/&#xff0c;查看…

第一代Spring Cloud核心组件

第一代Spring Cloud核心组件&#xff08;Spring Cloud Netflix&#xff09; Eureka服务注册中心(服务注册中心:Eureka,Nacos,Zookeeper,Consul) Ribbon负载均衡 Hystrix熔断器 Feign远程调用组件(Feign RestTemplate Ribbon Hystrix) GateWay网关组件 Config分布式配置中心 …

刘铁猛C#教程笔记——详解类型,变量,和对象第1节

强/弱类型语言 强类型语言&#xff1a;所谓强类型语言就是变量的值十分依赖变量的类型&#xff0c;也就是说假如一个变量其类型是整型&#xff0c;那么你在为该整型变量进行赋值的时候就不可以为其赋值一个字符串类型的常量&#xff0c;C#语言就是典型的强类型语言弱类型语言&…