文章目录

  • 基于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图通过把测试样本数据的分位数与已知分布相比较,从而来检验:

    1. 两组数据是否来自同一分布
    2. 两组数据的尺度范围是否一致
    3. 两组数据是否有类似的分布形状
  • 前面两个问题可以用样本数据集在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数学建模 正态分布检验相关推荐

  1. Python数学建模系列(六):蒙特卡洛算法

    文章目录 前言 往期文章 1.蒙特卡洛算法 样例1 样例2 样例3 2.三门问题 3.M*M豆问题 结语 前言 Hello!小伙伴! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出-   ...

  2. python实现Shapiro-Wilk正态分布检验

    python实现Shapiro-Wilk正态分布检验 Shapiro-Wilk检验 Shapiro-Wilk检验等显著性假设检验方法,则从统计学意义上将样本分布与正态分布进行比较,以确定数据是否显示出 ...

  3. python实现Anderson-Darling正态分布检验

    python实现Anderson-Darling正态分布检验 正态性检验 确定您绘制样本所基于的总体是否呈非正态分布的单样本假设检验.许多统计过程均依赖于总体正态性,且使用正态性检验确定否定此假设是不 ...

  4. 【Python数学建模】SEIR传染病模型模型延伸-SEIDR模型(一),加入疫苗接种、政府管控、病毒变异等因素的影响

    目录 一. SEIR传染病模型 二. SEIR模型的延伸--SEIDR模型 三. 模型延伸--影响因素1:疫苗接种 四. 模型延伸--影响因素2:政府管控 五. 模型延伸--影响因素3:病毒变异 写在 ...

  5. python数学建模(二)线性规划2.实战(思路清晰\过程完整、详细)

    文章目录 (一)简单陈述本文章的内容 (二)线性规划例题(实战) 2.1 实战题目 2.2 符号规定和基本假设 2.3 模型的分析 2.4 模型的建立 2.5 模型一的求解和分析 2.5.1 (代码) ...

  6. Python数学建模系列(五):微分方程

    文章目录 前言 往期文章 1.微分方程分类 2.微分方程解析解 3.微分方程数值解 3.1 场线图与数值解 3.2 洛伦兹曲线与数值解 4.传染病模型 模型一:SI-Model 模型二:SIS mod ...

  7. python数学建模--绘图动态可视化图表

    目录 写在本博客的开篇 关于matplotlib绘图的两种模式 阻塞模式 交互模式 总结 绘制动态图的例子 二维折线图 结果演示 代码 三维折线图 结果演示 代码 三维散点图 结果演示 代码 写在本博 ...

  8. python可以用来数学建模吗_怎么用Python数学建模:python数据建模工具

    怎么用Python数学建模 djcjfhfhhjdvjfhvfghhfgbdthhgdchfjfuivvh DSI方法在几何建模上的应用 本节叙述如何应用DSI方法来与曲面S相联系的二维图形图3.1) ...

  9. 【Python数学建模常用算法代码(二)之BP神经网络】

    Python数学建模常用算法代码(二) BP神经网络模型Python代码 import numpy as np import math import random import string impo ...

最新文章

  1. Python多模块文件共享变量
  2. 火狐浏览器中添加selenium IDE步骤
  3. stm32 usb 虚拟串口 相同_RTThread STM32 虚拟串口代码级移植
  4. VS code配置c环境
  5. c++计算eigen随笔(3)-求逆
  6. 雅虎公司C#笔试题(之二)
  7. 工作流的设计,业务流程图的绘制与编辑,工作流软件,工作流源代码组件库,开发平台,开发引擎...
  8. Linux笔记-Centos7将python2升级为python3(及修改yum配置防报错)
  9. C语言获取某个分割符之前的内容
  10. google python代码规范_Python代码这样写才规范优雅! (二)
  11. 计算机工程制图课程安排,2017工程制图课程简介
  12. 计算机网络哈勃,「实时热点」美国哈勃已脱机一星期:NASA已尝试修复3次,均以失败告终...
  13. 计算机打印东西怎么横向打印机,打印机横向打印怎么设置,打印机不能横向打印...
  14. 与阿里合伙人合影,两年净赚一百万,这个草根姑娘有什么魔力?
  15. 【qq机器人】天气查询
  16. Flutter 启动页 消除白屏
  17. Linux常用快捷键、文件管理和查询
  18. 【IRP】Windows 驱动之IRP
  19. 【高等数学】为什么规定向量之间的夹角是0~180
  20. 编程基础篇:#1082 : 然而沼跃鱼早就看穿了一切

热门文章

  1. python怎么加字幕_python字幕处理工具
  2. 干了三年外包的普通程序员还能社招进阿里吗?
  3. 7-Zip压缩文件如何设置和清除密码?
  4. 科普小知识之生活中的传热学
  5. 全球及中国工业软件市场规模分析及需求应用前景调研报告2021-2027年
  6. H264 16 × 16 luma prediction modes
  7. web前端期末大作业 html+css+javascript汽车销售网站 学生网页设计实例 企业网站制作
  8. linux怎么写用拼音写中文为什么出错,Linux常见问题及错误中文解析
  9. ajax接收后台传来的图片
  10. 【弹跳闯关小游戏,c++】