如何使用Q-Q图验证数据的分布

作者|Satyam Kumar 编译|VK 来源|Towards Data Science

Q-Q图是检验任何随机变量(如正态分布、指数分布、对数正态分布等)分布的图形方法,是观察任何分布性质的一种统计方法。

例如,如果给定的一个分布需要验证它是否是正态分布,我们运行统计分析并将未知分布与已知正态分布进行比较。然后通过观察Q-Q图的结果,我们可以确定给定的分布是否正态分布。

绘制Q-Q图的步骤:

  1. 给定一个未知的随机变量。

  2. 找到每个百分位值

  3. 生成一个已知的随机分布,根据该分布同样遵循步骤1-2。

  4. 绘制Q-Q图


给定一个随机分布,需要验证它是否为正态/高斯分布。为了便于理解,我们将这个未知分布命名为X,将已知的正态分布命名为Y。

生成未知分布X:

X = np.random.normal(loc=50, scale=25, size=1000)

我们正在生成一个正态分布,有1000个值,平均值=50,标准差=25。

查找1%~100%:

X_100 = []
for i in range(1,101):
    X_100.append(np.percentile(X, i))

计算每个百分位数(1%,2%,3%,. . .,99%,100%)X的随机分布值,并将其存储在X_100中。

生成已知的随机分布Y及其百分位值:

Y = np.random.normal(loc=0, scale=1, size=1000)

生成一个正态分布,其平均值为0,标准偏差为1,需要与未知分布X进行比较,以验证X分布是否正态分布。

Y_100 = []
for i in range(101):
    Y_100.append(np.percentile(Y, i))

计算每个百分位数(1%,2%,3%,. . .,99%,100%)Y的随机分布值,并将其存储在Y_100中。

绘图:

为以上获得的未知分布值绘制散点图。

这里X是未知分布,要与Y这个正态分布相比。

对于Q-Q图,如果图中的散点在一条直线上,则两个随机变量具有相同的分布,否则它们具有不同的分布。

从上面的Q-Q图可以看出X是正态分布的。

如果两个分布不一样呢?

如果X不是正态分布,并且它有其他分布,那么如果Q-Q图是在X和正态分布之间绘制的,那么散射点就不会在一条直线上。

这里,X分布是对数正态分布,因此Q-Q图中的散射点不是直线。

让我们再观察一下:

这是4个不同条件下X和Y分布的Q-Q图。

  • 左上:对数正态分布与正态分布的QQ图
  • 右上:正态与指数分布的QQ图
  • 左下:指数与指数分布的QQ图
  • 右下:logistic与logistic分布的QQ图

python实现:

import numpy as np
import matplotlib.pyplot as plt

X = np.random.normal(loc=50, scale=25, size=1000)
X_100 = []
for i in range(1,101):
  X_100.append(np.percentile(X, i))

Y = np.random.normal(loc=0, scale=1, size=1000)
Y_100 = []
for i in range(1,101):
  Y_100.append(np.percentile(Y, i))

plt.scatter(X_100, Y_100)
plt.grid()
plt.ylabel("Y - normal distribution")
plt.xlabel("X - normal distribution")
plt.show()

结论

Q-Q图可以用来比较任意两个分布,并且可以通过与已知分布的比较来验证未知分布。这种方法有一个主要的局限性,即需要大量的数据点,因为得出较少的数据不是明智的决定。通过观察Q-Q图可以预测这两种分布是否相同。

原文链接:https://towardsdatascience.com/how-to-verify-the-distribution-of-data-using-q-q-plots-acdb7ca2d576

欢迎关注磐创AI博客站: http://panchuang.net/

sklearn机器学习中文官方文档: http://sklearn123.com/

欢迎关注磐创博客资源汇总站: http://docs.panchuang.net/

版权声明:本文为fendouaini原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/fendouaini/article/details/108417799

智能推荐

redis 初步了解

1.连接redis 通过java操作 1.首先 导入redis驱动 2.连接redis通过jedis 2.创建redis连接池 连接redis通过 jedis 相当于HTTPclient 1.创建单例模式的方法 在调用的时候被创建 2.创建私有静态 jedisPool 3. 创建私有类 创建静态代码块 放入连接池的基本配置 4.有 最大连接数 最大空闲书 最小空闲连接数 5. 创建连接redis对...

第6章数据类型-基本数据类型-Boolean类型-main

防采集标记:亢少军老师的课程和资料 Dart交流群:1046954554 Flutter开源项目请关注: https://github.com/kangshaojun @作者: 亢少军 '...

使用 Infura 和 web3.js 呼叫合约

如果你希望马上开始学习以太坊DApp开发,可以访问汇智网提供的出色的在线互动教程: 以太坊DApp实战入门教程 以太坊去中心化电商应用开发实战 如果你希望了解如何部署合约,可以查看另一篇文章:在truffle中使用infura部署以太坊智能合约。 Infura 提供公开的 Ethereum 主网和测试网络节点。到 Infura 官网申请,只要输入一点基本资料和 Email,就可以收到 API-ke...

手写RPC通信框架

RPC基本介绍 服务器端构建 API包下主体编写 首先初始采用Socket进行通信利用IO进行数据交互,对客户端要提供API调用接口,使得客户端可以利用API中提供的接口,获得服务器端的数据。服务器端模块目录如下: 先编写一个接口,该接口放置在api模块下,实现类放置在provider模块下,这样做目的是让客户端仅加载API包的条件下,可以调用服务器端的实现类完成具体业务逻辑。 服务器端需要客户端...

Highcharts饼状图Ajax动态赋值的问题

这种饼状图是动态的当鼠标放上面那一部分会突出的 Highcharts下载:点击下载 Highcharts-zh_CN.js下载:点击下载 效果图: 前台js代码: 控制层代码: 其中用到两种传值方式一种JSON另一种用Map传值给Ajax,下面为取到的值。 两个饼状图并列展示前台代码: 给饼状图赋值主要就是取json拼接成 data:[[name,y],[name,y]]这样的数组 注意y后面的数...

猜你喜欢

Qt工程Windows下的安装包制作

工具 Depends.exe nisedit2.0.3.exe nsis-2.50-setup.exe 先安装nsis-2.50-setup.exe, 在安装nisedit2.0.3.exe. 都按默认安装即可. Depends.exe不需要安装. 步骤 1, 在工程中的main()函数里添加如下代码解决库路径问题. 2, 在工程文件.pro中添加如下内容, 其中”DESTDIR=in...

LNMP架构(8)GoAccess可视化动态日志分析平台的部署

一.简介 1.goaccess主要用于分析apache和nginx日志,功能十分强大。 二。安装 三。用goaccess分析nginx的日志  网页分析日志...

JAVAWEB学习总结,DAY10(JavaScript高级)

学习目标 能够使用正则表达式进行表单的验证 能够使用DOM中来查找节点 能够使用DOM来增删改节点 能够使用数组中常用的方法 能够使用日期对象常用的方法 案例一使用JS完成表单的校验plus 一,案例需求 用户名输入框,电子邮箱, 手机号码 , 获得焦点的时候给用户提示, 失去焦点进行 校验 用户名:只能由英文字母和数字组成,长度为4~16个字符,并且以英文字母开头 手机号:以1开头, 第二为是3...

通过url访问静态资源

通过url访问资源 以前都是将静态页面写在了WEB-INF下面,然后在springmvc配置文件中配置视图解析器即可通过controller中的请求方法,跳转到其他页面 springmvc的视图解析器:这时要访问的资源在/WEB-INF/html/下,并且配置了前缀和后缀,我们只需要在controller里返回文件名即可,例如return “index”,就会跳转到inde...