楼主: kiddxyp
15020 2

[学习分享] 关于QQ图中的理论分位数(Theoretical Quantiles)的讨论 [推广有奖]

  • 0关注
  • 0粉丝

初中生

33%

还不是VIP/贵宾

-

威望
0
论坛币
10 个
通用积分
24.6188
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
80 点
帖子
6
精华
0
在线时间
7 小时
注册时间
2015-12-22
最后登录
2017-1-9

楼主
kiddxyp 发表于 2015-12-28 22:47:41 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

QQ图的主要作用是判断样本是否近似于某种类型的分布,这里的“QQ”是两个Quantiles的大写字母,即两个分位数,一个是样本分位数(Sample Quantiles),一般画在纵轴,一个是理论分位数(Theoretical Quantiles),一般画在横轴。

  1. n <-rnrom(100, 0, 1) #生成100个均值为0,方差为1的正态分布样本
  2. qqnorm(n)#做变量n的QQ图
复制代码

以正态分布为例,qqnorm()是判断样本是否近似于正态分布的函数。针对拟判断的样本变量,运行完上述代码,可以得到QQ图。

1.png

  1. q<- qqnorm(n) # 将变量n的QQ图的结果保存到变量q中
  2. q
复制代码

运行完结果后,我们想知道结果是怎么计算出来的,换句话说这个(x,y)形式的二维的散点图的坐标是如何确定的。要回答这个问题需要先从qqnorm()入手,把QQ图的结果保存到变量中,再对这个变量进行分析。

返回结果会发现q是一个列表变量

  1. >q
  2. $x
  3.   [1]  0.29237490  0.21470157  0.39885507  1.25356544 -1.25356544 -0.37185609  0.24042603
  4.   [8]  0.65883769 -1.43953147 -0.85961736 -2.57582930  0.01253347 -0.59776013 -0.89647336
  5. ……
  6. $y
  7.   [1]  0.462814915  0.374278392  0.554904362  1.336120985 -1.185658515 -0.005494698  0.446647652
  8.   [8]  0.856330811 -1.325852442 -0.642461498 -2.655929616  0.255900133 -0.314253761 -0.678510112
  9. ……
  10. #这里没有用set.seed()函数生成可重复的模拟样本,所以显示的值可能不同
复制代码

变量q$y是样本分位数,也是刚才随机产生的100个样本的值,即和变量n是完全一样的,为了验证,如果运行下面的代码,会得到100个“TRUE”

  1. n <- rnorm(100,0,1)
  2. qqnorm(n)
  3. q<- qqnorm(n)
  4. y <- q$y
  5. y==n
复制代码

接下来讨论这个q$x,q$x是理论分位数,之所以是“理论”,指的是如果按照正态分布的假设(qqnorm对应的是正态分布假设,qqpois对应的是泊松分布的假设),这个分位数的理论值应该是多少。例如如果有5个样本,那么理论分位数应该给出的是20%,40%,60%,80%,100%的分位数,但是100%的分位数一般会无限大,因此在这里需要进行一下数据处理,找一个“近似”的理论样本,来替代“真正”的理论样本。在这里问题就在这个“近似”的理论样本的数据处理方法。举个例子,假设P()为正态分布函数,是正态分布函数的反函数,假设一共有N个样本,则第n个样本的“真正”的理论样本分位数应该是\[P^{-1}\left ( \ \right )\],即概率等于n/N时的分位数。关于第n个样本的“近似”的理论样本分位数,数据处理方法有不同版本解释,有人认为是\[P^{-1}\left ( \frac{n-0.5}{N}\right )\]https://bbs.pinggu.org/forum.php?mod=viewthread&tid=2141131&page=1),在薛毅和陈立萍的《统计建模与R软件》(清华大学出版社,2007年)中,计算公式则是\[P^{-1}\left ( \frac{n-0.375}{N+0.25}\right )\],见下图。

2.png

我编了几行代码对这个公式进行了验证,结论是用哪一种数据处理方法取决于样本的数量N。如果N小于等于10的时候,分位数的取值应该是\[P^{-1}\left ( \frac{n-0.375}{N+0.25}\right )\],如果样本的数量N大于10,分位数的取值应该是\[P^{-1}\left ( \frac{n-0.5}{N}\right )\]。代码如下。

  1. N=100#设定样本数量,可以将100改为别的数进行验证
  2. d <- matrix(nrow= N ,ncol= 3)#生成一个N *3的矩阵
  3. d[,1]<-1:N#给每一次N的值编上序号
  4. for(i in 2:N){ #从i=2开始计算,一直计算到i=N
  5.   x <- rnorm(i,0,1) #生成均值为0,、方差为1的i个数的样本,保存到x
  6.   y <- qqnorm(x) #生成样本x的QQ图,保存到变量y
  7.   yy <- sort(y$x) #将QQ图中的理论样本值保存到变量yy中
  8.   yyy<- pnorm(yy,0,1) # 计算分位数yy的概率,保存到yyy中
  9.   a <- 1:i
  10.   ayyy<-lm(a~yyy) #计算公式“ayyy=a*系数+截距“中的参数
  11.   b <-summary(ayyy)$coefficients
  12.   d[i,2]<-b[1,1]#将截距保存到第二列
  13.   d[i,3]<-b[2,1]#将系数保存到第三类
  14. }
  15. d
复制代码

得到结果如下,验证了上述结论:

  1. > d
  2.        [,1]  [,2]   [,3]
  3.   [1,]    1    NA     NA
  4.   [2,]    2  0.375   2.25
  5.   [3,]    3  0.375   3.25
  6.   [4,]    4  0.375   4.25
  7.   [5,]    5  0.375   5.25
  8.   [6,]    6  0.375   6.25
  9.   [7,]    7  0.375   7.25
  10.   [8,]    8  0.375   8.25
  11.   [9,]    9  0.375   9.25
  12. [10,]   10  0.375  10.25
  13. [11,]   11  0.500  11.00
  14. [12,]   12  0.500  12.00
  15. [13,]   13  0.500  13.00
  16. [14,]   14  0.500  14.00
  17. [15,]   15  0.500  15.00
  18. [16,]   16  0.500  16.00
  19. [17,]   17  0.500  17.00
  20. [18,]   18  0.500  18.00
  21. [19,]   19  0.500  19.00
  22. [20,]   20  0.500  20.00
  23. ……
复制代码




二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Theoretical quantiles Theoretic quantile quant 正态分布 样本 字母

沙发
vieruodu 发表于 2019-11-25 21:06:36
好棒!对我非常有用,正在研究这个横坐标到底是什么!!

藤椅
CMO-首席物料官 发表于 2023-6-2 15:03:16
很好!

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-25 09:40