Python数学建模 正态分布检验
文章目录
- 基于Python的数学建模
- 数据生成
- 散点图/直方图
- QQ图(Quantile-Quantile Plot)
- JB检验(大样本 n>30)
- Shapior-wilk检验(小样本 3
基于Python的数学建模
- Github仓库:Mathematical-modeling
数据生成
- 生成正态分布数据和其他分布数据
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
np.random.seed(6666)
data_normal = np.random.normal(loc=0.0, scale=1.0, size=1000)
data_unknow = np.random.exponential(0.5,1000)
fig, ax = plt.subplots(nrows=1,ncols=2,figsize=(16,5))
ax[0].plot(data_normal)
ax[1].plot(data_unknow)
散点图/直方图
fig, ax = plt.subplots(nrows=2,ncols=2,figsize=(16,10))
# x轴坐标
index = np.arange(1,len(data_normal)+1,1)
# 绘制散点图
ax[0,0].scatter(index, data_normal)
ax[0,0].grid()
ax[0,1].scatter(index, data_unknow)
ax[0,1].grid()# 绘制直方图
# 直方图可以很好地观察数据的分布否具有正态性
n1, bins1, patches1 = ax[1,0].hist(data_normal,bins=256)
n2, bins2, patches2 = ax[1,1].hist(data_unknow,bins=256)
QQ图(Quantile-Quantile Plot)
- QQ图通过把测试样本数据的分位数与已知分布相比较,从而来检验:
- 两组数据是否来自同一分布
- 两组数据的尺度范围是否一致
- 两组数据是否有类似的分布形状
- 前面两个问题可以用样本数据集在Q-Q图上的点与参考线的距离判断;而后者则是用点的拟合线的斜率判断
- QQ图是一种散点图,对应于正态分布的QQ图,就是由标准正态分布的分位数为横坐标,样本值的分位数为纵坐标的散点图
- 若两样本分布相同,则散点图中的点在y=x附近。
- 若样本数据近似于正态分布,在QQ图上这些点近似的在直线y=σx+μy=\sigma x + \muy=σx+μ上,此直线的斜率是标准差σ\sigmaσ,截距为均值μ\muμ。
- 所以,利用QQ图可以作直观的正态性检验。若QQ图上的点近似的在一条直线上,可以认为样本数据来自正态总体。
# 计算均值,标准差
mean_normal = np.mean(data_normal)
std_normal = np.std(data_normal)mean_unknow = np.mean(data_unknow)
std_unknow = np.std(data_unknow)# 重新排序
data_normal = np.sort(data_normal)
data_unknow = np.sort(data_unknow)
# 四分位数,将这组数据划分为等量的四部分
## 0% 25% 50% 75% 100%
y_normal = np.quantile(data_normal, np.linspace(0,1,5))
y_unknow = np.quantile(data_unknow, np.linspace(0,1,5))fig, ax = plt.subplots(nrows=1,ncols=2,figsize=(16,5))
ax[0].scatter(np.ones_like(y_normal), y_normal)
ax[1].scatter(np.ones_like(y_unknow), y_unknow)
# 绘制QQ图,检测两组样本是否满足正态分布
y_test = np.random.normal(loc=0.0, scale=1.0, size=10000)
y_test = np.quantile(y_test, np.linspace(0,1,15))
y_normal = np.quantile(data_normal, np.linspace(0,1,15))
y_unknow = np.quantile(data_unknow, np.linspace(0,1,15))# 指定直线方程 sigma=0 mu=1
x = np.linspace(np.min(y_test),np.max(y_test),100)
y = x
fig, ax = plt.subplots(nrows=1,ncols=2,figsize=(16,5))
ax[0].scatter(y_test, y_normal)
ax[0].plot(x,y)x = np.linspace(np.min(y_test),np.max(y_test),100)
y = x
ax[1].scatter(y_test, y_unknow)
ax[1].plot(x,y)
JB检验(大样本 n>30)
- 雅克-贝拉检验(Jarque-Bera Test)
- H0H_{0}H0:该变量服从正态分布
- H1H_{1}H1:该变量不服从正态分布
from scipy import stats
# Statstic: 代表显著性水平
# P: 代表概率论与数理统计中的P值
# 对正态样本进行检验
jarque_bera_test = stats.jarque_bera(y_normal)
print("JB Test Statstic:{} Pvalue:{}".format(jarque_bera_test.statistic,jarque_bera_test.pvalue))# 对随机样本进行检验
jarque_bera_test = stats.jarque_bera(y_unknow)
print("JB Test Statstic:{} Pvalue:{}".format(jarque_bera_test.statistic,jarque_bera_test.pvalue))
Shapior-wilk检验(小样本 3<n<50)
- Shapior检验主要应用于小样本的情况下,即
在这里插入代码片
在样本量在3到50之间的时候进行的检验。 - H0H_{0}H0:该变量服从正态分布
- H1H_{1}H1:该变量不服从正态分布
from scipy import stats
# Statstic: 代表显著性水平
# P: 代表概率论与数理统计中的P值
# 对正态样本进行检验
shapiro_test = stats.shapiro(y_normal)
print("Shapiro wilk Test Statstic:{} Pvalue:{}".format(shapiro_test.statistic,shapiro_test.pvalue))# 对随机样本进行检验
shapiro_test = stats.shapiro(y_unknow)
print("Shapiro wilk Test Statstic:{} Pvalue:{}".format(shapiro_test.statistic,shapiro_test.pvalue))
KS检验(Kolmogorov-Smirnov)
- KS检验是比较一个频率分布f(x)与理论分布g(x)或者两个观测值分布的检验方法。
- H0H_{0}H0:两个数据分布一致或者数据符合理论分布
- H1H_{1}H1:两个数据分布不一致或者数据不符合理论分布
# 对正态样本进行检验
KstestResult = stats.ks_2samp(y_normal, y_normal)
print("KS Test Statstic:{} Pvalue:{}".format(KstestResult.statistic,KstestResult.pvalue))# 对随机样本进行检验
KstestResult = stats.ks_2samp(y_unknow, y_normal)
print("KS Test Statstic:{} Pvalue:{}".format(KstestResult.statistic,KstestResult.pvalue))
Python数学建模 正态分布检验相关推荐
- Python数学建模系列(六):蒙特卡洛算法
文章目录 前言 往期文章 1.蒙特卡洛算法 样例1 样例2 样例3 2.三门问题 3.M*M豆问题 结语 前言 Hello!小伙伴! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出- ...
- python实现Shapiro-Wilk正态分布检验
python实现Shapiro-Wilk正态分布检验 Shapiro-Wilk检验 Shapiro-Wilk检验等显著性假设检验方法,则从统计学意义上将样本分布与正态分布进行比较,以确定数据是否显示出 ...
- python实现Anderson-Darling正态分布检验
python实现Anderson-Darling正态分布检验 正态性检验 确定您绘制样本所基于的总体是否呈非正态分布的单样本假设检验.许多统计过程均依赖于总体正态性,且使用正态性检验确定否定此假设是不 ...
- 【Python数学建模】SEIR传染病模型模型延伸-SEIDR模型(一),加入疫苗接种、政府管控、病毒变异等因素的影响
目录 一. SEIR传染病模型 二. SEIR模型的延伸--SEIDR模型 三. 模型延伸--影响因素1:疫苗接种 四. 模型延伸--影响因素2:政府管控 五. 模型延伸--影响因素3:病毒变异 写在 ...
- python数学建模(二)线性规划2.实战(思路清晰\过程完整、详细)
文章目录 (一)简单陈述本文章的内容 (二)线性规划例题(实战) 2.1 实战题目 2.2 符号规定和基本假设 2.3 模型的分析 2.4 模型的建立 2.5 模型一的求解和分析 2.5.1 (代码) ...
- Python数学建模系列(五):微分方程
文章目录 前言 往期文章 1.微分方程分类 2.微分方程解析解 3.微分方程数值解 3.1 场线图与数值解 3.2 洛伦兹曲线与数值解 4.传染病模型 模型一:SI-Model 模型二:SIS mod ...
- python数学建模--绘图动态可视化图表
目录 写在本博客的开篇 关于matplotlib绘图的两种模式 阻塞模式 交互模式 总结 绘制动态图的例子 二维折线图 结果演示 代码 三维折线图 结果演示 代码 三维散点图 结果演示 代码 写在本博 ...
- python可以用来数学建模吗_怎么用Python数学建模:python数据建模工具
怎么用Python数学建模 djcjfhfhhjdvjfhvfghhfgbdthhgdchfjfuivvh DSI方法在几何建模上的应用 本节叙述如何应用DSI方法来与曲面S相联系的二维图形图3.1) ...
- 【Python数学建模常用算法代码(二)之BP神经网络】
Python数学建模常用算法代码(二) BP神经网络模型Python代码 import numpy as np import math import random import string impo ...
最新文章
- Python多模块文件共享变量
- 火狐浏览器中添加selenium IDE步骤
- stm32 usb 虚拟串口 相同_RTThread STM32 虚拟串口代码级移植
- VS code配置c环境
- c++计算eigen随笔(3)-求逆
- 雅虎公司C#笔试题(之二)
- 工作流的设计,业务流程图的绘制与编辑,工作流软件,工作流源代码组件库,开发平台,开发引擎...
- Linux笔记-Centos7将python2升级为python3(及修改yum配置防报错)
- C语言获取某个分割符之前的内容
- google python代码规范_Python代码这样写才规范优雅! (二)
- 计算机工程制图课程安排,2017工程制图课程简介
- 计算机网络哈勃,「实时热点」美国哈勃已脱机一星期:NASA已尝试修复3次,均以失败告终...
- 计算机打印东西怎么横向打印机,打印机横向打印怎么设置,打印机不能横向打印...
- 与阿里合伙人合影,两年净赚一百万,这个草根姑娘有什么魔力?
- 【qq机器人】天气查询
- Flutter 启动页 消除白屏
- Linux常用快捷键、文件管理和查询
- 【IRP】Windows 驱动之IRP
- 【高等数学】为什么规定向量之间的夹角是0~180
- 编程基础篇:#1082 : 然而沼跃鱼早就看穿了一切
热门文章
- python怎么加字幕_python字幕处理工具
- 干了三年外包的普通程序员还能社招进阿里吗?
- 7-Zip压缩文件如何设置和清除密码?
- 科普小知识之生活中的传热学
- 全球及中国工业软件市场规模分析及需求应用前景调研报告2021-2027年
- H264 16 × 16 luma prediction modes
- web前端期末大作业 html+css+javascript汽车销售网站 学生网页设计实例 企业网站制作
- linux怎么写用拼音写中文为什么出错,Linux常见问题及错误中文解析
- ajax接收后台传来的图片
- 【弹跳闯关小游戏,c++】