正态概率图
概率图是一种直观比较来自不同分布的数据的方法。这些数据可以是经验数据集或理论数据集。概率图可以有两种类型:
- PP 图: (Probability-to-Probability)pp 图是将两种分布(经验和理论)的累积分布函数(CDF) 的比较可视化的方法。
- QQ 图: qq(分位数到分位数)图用于比较两个分布的分位数。分位数可以定义为具有相等概率的连续间隔或将样本划分为 类似的方式分布可能是来自过程的理论分布或样本分布等。正态概率图是qq图的一种情况。
正态概率图:正态概率图是一种了解数据集是否呈正态分布的方法。在此图中,数据相对于理论正态分布图绘制的方式是,如果给定数据集呈正态分布,则应形成一条近似直线。正态概率图是概率图(更具体地说是 QQ 图)的一种情况。此图在行业中通常用于查找与正常过程的偏差。
正态概率图具有以下轴。
- 横轴:正态统计中位数。
- 垂直轴:订单响应值
订单响应变量可以计算为:
其中 Ui 是统一阶中位数统计量,G 是正态分布的百分比点函数。它是累积分布函数的反函数。即给定概率分布,我们想要累积分布函数。
统一顺序统计中位数可以近似为:
数据应遵循的测量过程的基本假设
- 随机数。
- 从固定分布。
- 有固定位置
- 有固定比例。
正态概率图用于回答以下问题:
- 数据是正态分布的吗?
- 如果不是,分布的性质是什么
执行
在这个实现中,我们将使用 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手册