📜  正态概率图

📅  最后修改于: 2022-05-13 01:55:45.733000             🧑  作者: Mango

正态概率图

概率图是一种直观比较来自不同分布的数据的方法。这些数据可以是经验数据集或理论数据集。概率图可以有两种类型:

  • PP 图: (Probability-to-Probability)pp 图是将两种分布(经验和理论)的累积分布函数(CDF) 的比较可视化的方法。
  • QQ 图: qq(分位数到分位数)图用于比较两个分布的分位数。分位数可以定义为具有相等概率的连续间隔或将样本划分为 类似的方式分布可能是来自过程的理论分布或样本分布等。正态概率图是qq图的一种情况。

正态概率图:正态概率图是一种了解数据集是否呈正态分布的方法。在此图中,数据相对于理论正态分布图绘制的方式是,如果给定数据集呈正态分布,则应形成一条近似直线。正态概率图是概率图(更具体地说是 QQ 图)的一种情况。此图在行业中通常用于查找与正常过程的偏差。

正态概率图具有以下轴。

  • 横轴:正态统计中位数。
  • 垂直轴:订单响应值

订单响应变量可以计算为:

N = G\left ( U_i \right )

其中 Ui 是统一阶中位数统计量,G 是正态分布的百分比点函数。它是累积分布函数的反函数。即给定概率分布,我们想要累积分布函数。

统一顺序统计中位数可以近似为:

U_i  = 1 - U_n , for \, i = 1\\ f_i = \frac{i-0.375}{n+0.365} for \, i = 2, 3, ..., n-1 \\ U_i = (0.5)^{1/n} \\ for \, i=n

数据应遵循的测量过程的基本假设

  • 随机数。
  • 从固定分布。
  • 有固定位置
  • 有固定比例。

正态概率图用于回答以下问题:

  • 数据是正态分布的吗?
  • 如果不是,分布的性质是什么

执行

在这个实现中,我们将使用 statsmodels Python库和 seaborn 库来可视化不同的图。这些库预先安装在 colab 中,但对于使用pip install 的本地环境。

Python3
# imports 
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import scipy.stats as sc
import statsmodels.graphics.gofplots as sm
  
# define distributions
sample_size = 10000 
standard_norm = np.random.normal(size=sample_size)
heavy_tailed_norm = np.random.normal(loc=0, scale=2, size=sample_size)
skewed_norm = sc.skewnorm.rvs(a=5, size=sample_size)
skew_left_norm = sc.skewnorm.rvs(a=-5, size=sample_size)
  
  
# plots for standard distribution
fig, ax = plt.subplots(1, 2, figsize=(12, 7))
sns.histplot(standard_norm,kde=True, color ='blue',ax=ax[0])
sm.ProbPlot(standard_norm).qqplot(line='s', ax=ax[1])
  
# plot for right-tailed distribution
fig, ax = plt.subplots(1, 2, figsize=(12, 7))
sm.ProbPlot(skewed_norm).qqplot(line='s', ax=ax[1]);
sns.histplot(skewed_norm,kde=True, color ='blue',ax=ax[0])
  
# plot for left-tailed distribution
fig, ax = plt.subplots(1, 2, figsize=(12, 7))
sm.ProbPlot(skew_left_norm).qqplot(line='s',color='red', ax=ax[1]);
sns.histplot(skew_left_norm,kde=True, color ='red',ax=ax[0])
  
# plot for heavy tailed distribution
fig, ax = plt.subplots(1, 2, figsize=(12, 7))
sm.ProbPlot(heavy_tailed_norm).qqplot(line='s',color ='green', ax=ax[1]);
sns.histplot(heavy_tailed_norm,kde=True, color ='green',ax=ax[0])
sns.histplot(standard_norm,kde=True, color ='red',ax=ax[0])


标准正常

右偏

左偏

重尾(见轴值)

参考:

  • NIST手册