楼主: sheepyang1992
6110 1

[问答] MATLAB怎么指定qqplot的分布 [推广有奖]

  • 0关注
  • 4粉丝

已卖:583份资源

博士生

48%

还不是VIP/贵宾

-

威望
0
论坛币
919 个
通用积分
2.3936
学术水平
25 点
热心指数
22 点
信用等级
11 点
经验
8425 点
帖子
140
精华
0
在线时间
414 小时
注册时间
2013-10-5
最后登录
2024-1-5

楼主
sheepyang1992 学生认证  发表于 2015-6-6 14:38:08 |AI写论文
10论坛币
我想检验概率密度积分变换后的变量是否服从(0,1)均匀分布,但是matlab的qqplot默认正态分布,请问怎么换成均匀分布?

关键词:MATLAB matla atlab plot Lab 正态分布 matlab

沙发
sheepyang1992 学生认证  发表于 2016-7-15 16:25:00
首先,我们要明确Q-Q图的概念:
Q-Q图是正态分位数图,纵坐标是变量的取值,关键是横坐标,横坐标的做法:
首先把变量按从小到大的顺序排列,计算变量的长度,即总共有多少个取值,再按顺序计算变量的所有取值的累积百分比,所谓的累积百分比,也就是可以看成是累积概率, 比如有10个值,按照从小到大的顺序,第一个值的排序是1, 那么他的所占的百分比就是10%, 紧接着后一个值所占的百分比也会死10%, 但是累积概率值为20%, 依次往后计算, 因为最后一个值的累积百分比是100%,即等于1,这个值如果计算它的正态分布概率的分位数的话,是无限大的,因此需要对这个值进行修正一下,就是因为这一个值无限大,所以对全体计算出来的累积百分比减去一个适当小的数,修正后的累积百分比与原百分比相差不多,但是回避了最后一个值是1而无法计算的问题。

qqplot有两种用法:
第一种是检验两个序列是否来自同一个分布,这个应该没什么问题就是plot(X,Y)
第二种是检验一个序列是否来自某种分布F(x),这时候用到qqplot(X,PD),在matlab的help中写的很清楚
qqplot(X,PD)makes an empirical quantile-quantile plot of the quantiles of the data in the vector X versus the quantiles of the distribution specified by PD, a ProbDist object of the ProDistUnivParam class and or ProbDistUnivKernel class
简单的说,我们是这样去定义PD的:PD=ProDistUnivParam(DistName, Params)
其中,DistName就是分布类型,可以填写以下这些类型:
  1. 'beta'
  2. 'binomial'
  3. 'birnbaumsaunders'
  4. 'exponential'
  5. 'extreme value' or 'ev'
  6. 'gamma'
  7. 'generalized extreme value' or 'gev'
  8. 'generalized pareto' or 'gp'
  9. 'inversegaussian'
  10. 'logistic'
  11. 'loglogistic'
  12. 'lognormal'
  13. 'nakagami'
  14. 'negative binomial' or 'nbin'
  15. 'normal'
  16. 'poisson'
  17. 'rayleigh'
  18. 'rician'
  19. 'tlocationscale'
  20. 'weibull' or 'wbl'
复制代码
Params就是你的分布的参数。

下面给出一个具体的例子:已知序列X,做出GEV参数估计后,画出Q-Q图:
  1. % GEV模型参数估计
  2. [parmhat]=gevfit(X);
  3. % qqplot
  4. PD=ProbDistUnivParam('gev',parmhat);
  5. figure
  6. qqplot(X,PD);
复制代码

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-20 16:26