【机器学习】QQ-plot深入理解与实现_python qqplot subplot-程序员宅基地

技术标签: 机器学习  

QQ-plot深入理解与实现

26 JUN

最近在看关于CSI(Channel State Information)相关的论文,发现论文中用到了QQ-plot。Sigh!我承认我是第一次见到这个名词,异常陌生。维基百科给出了如下定义:

“在统计学中,QQ-plot(Q代表分位数Quantile)是一种通过画出分位数来比较两个概率分布的图形方法。首先选定区间长度,点(x,y)对应于第一个分布(x轴)的分位数和第二个分布(y轴)相同的分位数。因此画出的是一条含参数的曲线,参数为区间个数。如果被比较的两个分布比较相似,则其QQ图近似地位于y=x上。如果两个分布线性相关,则QQ图上的点近似地落在一条直线上,但并不一定是y=x这条线。QQ图同样可以用来估计一个分布的位置参数。”

这段话刚开始看的时候,的确不是很清楚,难以理解。我也在网上找了一些资料,最有用的当属网上的一本在线电子书《Online Statistics Education: An Interactive Multimedia Course of Study》,里面的Chanpter8专门有讲解QQ-plot。本文中主要借鉴了这门书中的内容,以更浅显易懂的语言来讲清楚QQ-plot,我学习的过程中也用Matlab做了一些试验,文中将代码一并附上。

QQ-plot其实是Quantile-Quantile Plot的缩写,Quantile分位现在理解没有关系,看到最后你就会理解它的意思了。QQ-plot的目的是什么呢?是为了验证两组数据的分布是否相同或者相似,因此在实际中很多情况都会用到。为了讲清楚QQ-plot,我们先来介绍另外两种以图形的方式评价数据分布情况的方法:直方图(histogram)和 经验累积分布函数(empirical cumulative distribution function, eCDF)。

我们考虑一个随机变量X服从[0,1]区间内均匀分布,我们任取n个数据{  x1,x2...,xn x1,x2...,xn }。本例中n=100,直方图频率分布如图1所示。直方图的概率分布与bins的个数有关(bins为10,5,3)。不同的bins对应的图形也不同,图bins=10的时候还呈现锯齿状,但是bins=3的时候就趋于平稳,所以根据直方图来看累积分布不是很靠谱。随后,我们又使用eCDF对数据进行分析,如图2所示。黄色部分即为eCDF与理论CDF的误差,根据大数定理,当n取值越大,误差越小。

1

图1. 直方图统计

2

图2. eCDF vs 理论CDF

相关代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
data = unifrnd(0,1,1,100)'; %生成100个再[0,1]均匀分布的随机数
figure
subplot(3,1,1);
hist(data,10); %bins=10
xlabel( 'x' );
ylabel( 'Frequency' );
subplot(3,1,2);
hist(data,5); %bins=5
xlabel( 'x' );
ylabel( 'Frequency' );
subplot(3,1,3);
hist(data,3); %bins=3
xlabel( 'x' );
ylabel( 'Frequency' );
theory_y=data;
figure
[F,X]=ecdf(data); %ECDF
plot(X,F, '-k' , 'LineWidth' ,3);
hold on;
plot(data,theory_y, '-b' , 'LineWidth' ,3);
legend( 'Empirical CDF' , 'Theoretical CDF' ,2);
hold on;
%------两曲线之间填充颜色-------
theory_y=sort(theory_y);
theory_y=[theory_y(1);theory_y]; %Note:100数据进行ECDF会产生101个数的ECDF坐标,因此为了填充颜色,这里更改theory_y的维数
fill([X ',fliplr(X' )],[theory_y ',fliplr(F' )], 'y' );
xlabel( 'x' );
ylabel( 'F(x)' );

好了,到现在开始要说QQ-plot了。我们用如下两个例子来说明:QQ-plot for 平均分布 & QQ-plot for 正态分布。

QQ-plot for 平均分布:

Sample中有n个数据,  x1,x2,...,xn x1,x2,...,xn 。我们首先对数据进行排序,使之满足  x1<x2<...<xn x1<x2<...<xn 。我们将x所在区间[0,1]进行n等分。即变为  [0,1n],(1n,2n],...,(n1n,1] [0,1n],(1n,2n],...,(n−1n,1]n个自区间。为了符合平均分布,我们期望第q个数据的值坐落在第q个子区间的中间值,也就是

Eq=q0.5n Eq=q−0.5n

现在我们可以理解Quantile-Quantile(q-q) Plot了,第1个Q是Data Sample的分位即  x1,x2,...,xn x1,x2,...,xn ;第2个Q便是期望  Eq Eq 。因此QQ-plot其实就是n个点的集合

(q0.5n,xq),forq=1,2,...,n (q−0.5n,xq),�forq=1,2,...,n

因此在QQ-plot for平均分布中,当QQ点越接近y=x时,那么数据越接近平均分布。下面我们考虑表1中的5组数据,以及随机生成50个,500个,1000个数据的QQ-plot图,如图3所示。可以看出,当sample size越大,QQ-plot越接近y=x。

表1. Computing the Expected Quantile Values.

Data (x) Rank (q) Middle of the 
q
th Interval
0.03
0.24
0.41
0.59
0.67
1
2
3
4
5
0.1
0.3
0.5
0.7
0.9

3

图3. QQplot for uniform data

相关代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
A=[0.03,0.24,0.41,0.59,0.67];
B=unifrnd(0,1,1,50);
C=unifrnd(0,1,1,500);
D=unifrnd(0,1,1,1000);
subplot(2,2,1);
gqqplot(A, 'unif' );
title( 'Sample size n = 5' );
subplot(2,2,2);
gqqplot(B, 'unif' );
title( 'Sample size n = 50' );
subplot(2,2,3);
gqqplot(C, 'unif' );
title( 'Sample size n = 500' );
subplot(2,2,4);
gqqplot(D, 'unif' );
title( 'Sample size n = 1000' );

QQ-plot for 正态分布:

这个就简单了,跟上面是一样的道理。我们取Z为标准的正态分布,  μ=0,σ=1 μ=0,σ=1 。现将n个数据进行排序,再做出相应的QQ-plot点的集合

(Φ1(q0.5n),xq),forq=1,2,...,n (Φ−1(q−0.5n),xq),�forq=1,2,...,n

同样我们给出了表2,5组正态分布的数据以及其相应的期望值。为了比较,我们也随机产生了n为50,500,1000的正态分布随机数进行QQ-plot,如图4所示。

表2. Computing the expected quantile values for normal data.

Data (z) Rank (q) Middle of the
q
th Interval
Normal(q)
-1.96
-.78
.31
1.15
1.62
1
2
3
4
5
0.1
0.3
0.5
0.7
0.9
-1.28
-0.52
0.00
0.52
1.28

4

图4. QQplot for normal data

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
E=[-1.96,-0.78,0.31,1.15,1.62];
F=randn(1,50);
G=randn(1,500);
H=randn(1,1000);
subplot(2,2,1);
gqqplot(E, 'norm' );
title( 'Sample size n = 5' );
subplot(2,2,2);
gqqplot(F, 'norm' );
title( 'Sample size n = 50' );
subplot(2,2,3);
gqqplot(G, 'norm' );
title( 'Sample size n = 500' );
subplot(2,2,4);
gqqplot(H, 'norm' );
title( 'Sample size n = 1000' );

好吧,到此为止,讲的差不多了,其实不难的。最后我们再来看一遍维基百科上对QQ-plot的定义:

“在统计学中,QQ-plot(Q代表分位数Quantile)是一种通过画出分位数来比较两个概率分布的图形方法。首先选定区间长度,点(x,y)对应于第一个分布(x轴)的分位数和第二个分布(y轴)相同的分位数。因此画出的是一条含参数的曲线,参数为区间个数。如果被比较的两个分布比较相似,则其QQ图近似地位于y=x上。如果两个分布线性相关,则QQ图上的点近似地落在一条直线上,但并不一定是y=x这条线。QQ图同样可以用来估计一个分布的位置参数。”

Sigh!应该理解了... 关于gqqplot函数的使用,请参考 http://ackjack.com/?p=56

 Posted by sinknode   Math & Matlab   matlabQQ-plot   1 Comment

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

智能推荐

关于印发《测绘地理信息质量管理办法》的通知-程序员宅基地

文章浏览阅读1k次。关于印发《测绘地理信息质量管理办法》的通知来源: 国家测绘地理信息局国土测绘司 时间:2015-07-02 14:59:41 【大 中 小】国测国发〔2015〕17号各省、自治区、直辖市、计划单列市测绘地理信息行政主管部门,新疆生产建设兵团测绘地理信息主管部门:《测绘地理信息质量管理办法》已经国家测绘地理信息局局务会议审议通过,现予印发,请认真贯彻执行。经商国家质量监督检验检疫总局同意,1997_测绘地理信息质量管理办法

只需十四步:从零开始掌握Python机器学习(附资源)_python机器学习赵涓涓-程序员宅基地

文章浏览阅读211次。Python 可以说是现在最流行的机器学习语言,而且你也能在网上找到大量的资源。你现在也在考虑从 Python 入门机器学习吗?本教程或许能帮你成功上手,从 0 到 1 掌握 Python 机器学习,至于后面再从 1 到 100 变成机器学习专家,就要看你自己的努力了。本教程原文分为两个部分,机器之心在本文中将其进行了整合,原文可参阅:suo.im/KUWgl 和 suo.im/96wD3。本教程..._python机器学习赵涓涓

实时增量备份工具(rsync –daemon + inotify tools)-程序员宅基地

文章浏览阅读713次,点赞15次,收藏9次。实时增量备份工具(rsync –daemon + inotify tools)

一维数组转二叉树结构输出(2024-01-22)_一维数组 树结构 java-程序员宅基地

文章浏览阅读577次,点赞17次,收藏11次。1、一维数组自动生成二叉树,其它的文章基本都是生成二维数组,结构图形输出的很少。2、结构输出有“”/“\” 便于识别。//当前节点已经完成,从队列移出,//TreeNode 赋值给数组。//左子结点加入队列。* @param root 根节点。* @param i 第几行。* @param l 左节点。* @param r 右节点。//当前节点 没有左子结点。//当前节点 没有又子结点。* @param ans 数组。//数组赋值 / \。//数组为空直接返回。_一维数组 树结构 java

vue Element ui增加loading效果_el-dialog v-loading-程序员宅基地

文章浏览阅读3.1k次。1.在需要加loading 的标签加v-loading="loading",该项目为折线图<div id="gate-shore1" class="gate-shore-wrap" v-loading="loading"></div>2.在组件内引入Element-UI的Loadingimport { Loading}from 'element-ui'3.在组件data里面增加属性及属性值loading: true4.在方法里面写代码,关于组件的开_el-dialog v-loading

网狐_经典版机器人添加说明_fguilibd.dll-程序员宅基地

文章浏览阅读9.3k次,点赞5次,收藏7次。一、 机器人添加1. 首先注册机器人帐号(平台注册或者网站注册均可)2. 将注册好的帐号标识为机器人:如下图,选择好注册之后的机器人,并且设置机器人3. 将设置好的机器人添加到相应的游戏房间a) 打开机器人工具:AndroidManager.exe,这个工具必须放在客户端的安装目录下b) 设置机器人添加帐号权限:打开数据库THAccountsD_fguilibd.dll

随便推点

信用卡新颖的攻击方式,黑客可非接触式卡进行交易-程序员宅基地

文章浏览阅读172次。网络安全研究人员披露了一种新颖的攻击方式,它可能使黑客欺骗销售点终端以使其与受害者的万事达卡非接触式卡进行交易,同时认为该卡是Visa卡。该研究报告是由国内知名网络安全组织东方联盟研究人员发表的,该研究报告是建立在去年9月进行的一项详细研究的基础上的,该研究涉及PIN旁路攻击,使不良行为者可以利用受害者的被盗或丢失的启用Visa EMV的信用卡来制造高价值在不知道卡PIN的情况下进行购买,甚至欺骗终端接受未经认证的离线卡交易。研究人员表示:“黑客可以将其与先前对Visa的攻击结合使用,从而绕过万

Java设计模式之行为型:状态模式_java中状态设计模式案例-程序员宅基地

文章浏览阅读1.1w次,点赞6次,收藏29次。在介绍状态模式之前,我们先来看这样一个实例:你公司力排万难终于获得某个酒店的系统开发项目,并且最终落到了你的头上。下图是他们系统的主要工作(够简单)。当你第一眼看到这个系统的时候你就看出来了这是一个状态图,每个框框都代表了房间的状态,箭头表示房间状态的转换。分析如下:房间有三个状态:空闲、已预订、已入住,状态与状态之间可以根据客户的动作来进行转换。定义每个状态的值。 publ..._java中状态设计模式案例

JavaScript — 原生js实现上传图片控件_js利用class实现上传图片组件-程序员宅基地

文章浏览阅读2.6k次,点赞2次,收藏15次。一、修改原生 input 样式html 结构<div class="card"> <input id="upload" type="file" accept=".jpg" /> <div class="view"> <!-- 上传成功后 --> <div id="imgContainer" class="img-container"> <img id="img" /&_js利用class实现上传图片组件

是德科技KEYSIGHT E4980A精密性LCR测试仪_keysight 4070电容测试精度-程序员宅基地

文章浏览阅读370次,点赞10次,收藏9次。此外,它还具有多种测量模式,可以根据不同的测试需求进行灵活的配置和使用。此外,它还具有很高的测量速度和采样率,可以在短时间内完成大量的测试和数据采集。它具有高精度、高稳定性和高分辨率的测量特点,可以满足各种电子元件和材料的分析和测试需求。此外,它还具有自动校准和校准验证功能,可以保证测量的准确性和可靠性。此外,它还具有自动校准和校准验证功能,可以保证测量的准确性和可靠性。它是一款四端仪器,可以测量电阻、电容和电感等元件的阻抗、相位和品质因数等参数,适用于各种电子元件和材料的分析和测试。_keysight 4070电容测试精度

我的白帽子之路:从一穷二白的骑手,到月薪26k的黑客-程序员宅基地

文章浏览阅读1k次。前两天偶然跟几个后台粉丝交流,才发现最近好消息还挺多。其中有个现在当了黑客的哥们(暂且叫他大刘)引起了我的注意,所以今天决定从技术和经验的角度,跟大家讨论一番。大刘当了两年的骑手,虽然每..._掌控安全学院优秀学员

/dev/tty /dev/ttyS0 /dev/tty0区别_vi /dev/ttys0-程序员宅基地

文章浏览阅读3k次。http://blog.chinaunix.net/uid-26696487-id-3207777.html/dev/tty /dev/ttyS0 /dev/tty0区别1、串行端口终端(/dev/ttySn)   串行端口终端(Serial Port Terminal)是使用计算机串行端口连接的终端设备。计算机把每个串行端口都看作是一个字符设备。有段时间这些串行端口设备通常被称为终端设备,因为 ..._vi /dev/ttys0

推荐文章

热门文章

相关标签