查看原文
其他

StatQuest生物统计学专题 - 分位数及其应用

冰糖 生信菜鸟团 2022-06-07

分位数的概念分位数应用之一:QQ图分位数应用之二:分位数标准化

分位数的概念

分位数(quantile)的概念非常简单,就是将数据按照数量均分后的边界值。

具体来说,分位数就是指将数据均分成相同大小的不同组之间的边界值。举例来说,中位数是将数据按照数量均分为两份,所以中位数就是一个分位数,可以称为1/2分位数。同样的,如果将数据均分为四份,那么就有三个分位数:1/4分位数、中位数或1/2分位数或2/4分位数、3/4分位数。

分位数有多种叫法,比如1/4分位数,可以叫做0.25分位数,也可以叫做25%分位数。

此外有时候还会遇到到百分位数(percentile)的概念,其实百分位数也是一种分位数,只不过百分位数是将数据均分为100组的分位数。所以1/2分位数可以叫做第50百分位数,0.25分位数可以叫做第25百分位数,75%分位数可以叫做第75百分位数。

分位数应用之一:QQ图

QQ图(quantile-quantile图)最常见的场景就是用于数据正态性的可视化衡量。当然正态化检视是QQ图的重要功能,然而QQ并不只是可以检视正态化,它同样可以检视数据是否符合其他各种类型的分布,还可以进行两组数据之间的分布比较。

QQ图的计算和绘制方法

以下以正态分布QQ图为例,进行QQ图的实际计算和绘制:

  1. 将原始数据的每个点作为一个分位数。比如原始数据有40个数据,那么每个数据点是一个分位数,共有40个分位数(相当于将数据分成了40份?);

  2. 找到一个正态分布,任意正态分布都行,本例以标准正态分布为例;

  3. 求出与原始数据分位数等量的正态分布的分位数,也就是说,原始数据有40个分位数,那么就求出正态分布的40个四十分位数;

  4. 然后将相应的原始数据和正态分布的分位数绘图即可;

  5. 可以将上图的散点图绘制一个拟合曲线(线性拟合已经讲过)。

正态分布是连续分布,它无法按照数量均分进行计算分位数,它是按照概率均分进行计算分位数。

可以在R中实现上述思想:

# 1.获取一个原始数据,这里以从正态分布N(5,10^2)中随机抽取40个数据作为原始数据
originData <- rnorm(40,mean = 5, sd = 10)
originData <- sort(originData) # 排序后作为分位数

# 2.使用标准正态分布曲线求解分位数
# 将0-1均分为41份,去掉0和1后,剩余的数值刚好将概率均分为40份
normProb <- seq(0,1,by=1/(length(originData)+1))
normProb <- normProb[-1]
normProb <- normProb[-(length(originData)+1)]
# 将概率normProb转换为相应的分位数
normQuantile <- qnorm(normProb,mean = 0, sd=1)

# 3.绘制QQ图及拟合直线
# 绘制QQ散点图
plot(normQuantile,originData)
# line是R中进行拟合的函数
abline(line(normQuantile,originData))

R中模拟的结果如下图:

StatQuest-XI-1

作为对比也可以绘制一下如果原始数据是均匀分布的情况,下例代表服从均匀分布U(-5,15)的40个数据的正态QQ图,将上述R脚本中的第一句更改为originData <- runif(40,min = -5, max = 15),其他不变,则可以得到如下QQ图:

StatQuest-XI-2

QQ图检视其他分布

虽然QQ图最常用的场景是用于观察数据的正态性,然而QQ图的作用却并不限于观察正态性,它同样可以观察其他分布情况 。以均匀分布为例,从均匀分布U(-5,15)中获取100个数据作为原始数据(为了更好的观察区别,数据提高为100个),分别绘制此数据的正态分布QQ图和均匀分布QQ图。

#2张QQ图纵向排列
opar<-par(no.readonly=T)
par(mfrow=c(2,1))

#####正态分布QQ图####
#原始数据为均匀分布
originData <- runif(100,min = -5, max = 15)
originData <- sort(originData)

normProb <- seq(0,1,by=1/(length(originData)+1))
normProb <- normProb[-1]
normProb <- normProb[-(length(originData)+1)]
normQuantile <- qnorm(normProb,mean = 0, sd=1)

plot(normQuantile,originData, main="Normal QQ-plot")
abline(line(normQuantile,originData))

#####均匀分布QQ图####
#原始数据为均匀分布
originData <- runif(100,min = -5, max = 15)
originData <- sort(originData)

unifProb <- seq(0,1,by=1/(length(originData)+1))
unifProb <- unifProb[-1]
unifProb <- unifProb[-(length(originData)+1)]
unifQuantile <- qunif(unifProb,min = 0, max = 1)

plot(unifQuantile,originData,main="Uniform QQ-plot")
abline(line(unifQuantile,originData))
#还原绘制设置
par(opar)

结果如下图,可以发现此数据可以很好的贴合到均匀分布QQ图中的拟合直线上,但是却在正态分布QQ图中有较大的偏移,表明数据更符合均匀分布。

StatQuest-XI-3

QQ图除了检视数据是否符合一个特定分布之外,还可以检视两个数据之间的分布是否相同。假如有两个数据集合A和B,数量分别为10和100,那么数据量较小的数据的每一个数据点作为一个分位数,也就是A的分位数的数目为10,数据量较大的数据则以数据量较小的数据的数据量计算分位数,也就是说B虽有100个数据,但是计算它的10个十分位数,然后将两者的分位数绘图即可。

以上过程只是为了说明QQ图的原理和计算方法,其实在R中是有专一的函数用于绘制QQ图的。

比如第一个例子中的从正态分布N(5,10^2)中随机抽取40个数据作为原始数据的正态分布QQ图为:

originData <- rnorm(40,mean = 5, sd = 10)

qqnorm(originData)

qqline(originData)

此外,qqplot函数可以用于其他分布或数据集之间的QQ图绘制。

分位数应用之二:分位数标准化

在芯片实验中,常常会遇到一种标准化方法——分位数标准化。这也是分位数的一种应用,先看一下分位数标准化要解决的问题是什么。

分位数标准化是为了去除仪器或技术误差

在一次芯片实验中,如果芯片质量较好或仪器的功率、发光较好等等情况下,那么这一个芯片的数值会整体偏高。然而这种数值偏高其实只是仪器或技术误差,和生物学意义并没有关系,因此为了对这种不同生物重复之间的基因表达数值进行标准化,则可以使用分位数标准化的方法。

分位数标准化的计算方法

分位数标准化非常简单,就是按照分位数求均值,并把均值作为标准化值。

如下图(左)所示的原始基因芯片表达值,共3个样本,每个样本有4个基因(不同颜色表示),他们整体的表达量是不同的,可以看出样本2#的表达量整体偏高。

分位数标准化的计算方法为:

  1. 将原始数据按照表达量排序,并作为分位数,如下图(左)所示,从上到下,表达量越来越小;

  2. 不同样本间相同分位数求均值,如下图(中)所示,样本1的蓝色、样本2的黄色、样本3的绿色是同一个分位数,因此计算三者的均值。其他类似,共4个均值;

  3. 将分位数均值作为各自的标准化值,如下图(右)所示,样本1的蓝色、样本2的黄色、样本3的绿色的标准化值是三者的平均值。其他类推。

StatQuest-XI-4

比如对于以下数据,标准化之后则为:

          Sample1 Sample2

geneA       1       4
geneB       2       5
geneC       3       6

          Sample1 Sample2

geneA      2.5     2.5
geneB      3.5     3.5
geneC      4.5     4.5

专题以往文章

  1. StatQuest生物统计学专题 - 基础概念

  2. StatQuest生物统计学专题 - p值

  3. StatQuest生物统计学专题 - 生物重复和技术重复

  4. StatQuest生物统计学专题 - RPKM,FPKM,TPM

  5. StatQuest生物统计学专题 - library normalization进阶之DESeq2的标准化方法

  6. StatQuest生物统计学专题 - library normalization进阶之edgeR的标准化方法

  7. StatQuest生物统计学 - Independent Filtering

  8. StatQuest生物统计学 - FDR及Benjamini-Hochberg方法

  9. StatQuest生物统计学 - 拟合基础

  10. StatQuest生物统计学 - 线性拟合的R2和p值

    参考资料

    StatQuest课程:https://statquest.org/video-index/


     猜你喜欢

    生信基础知识100讲

    生信菜鸟团-专题学习目录(5)

    生信菜鸟团-专题学习目录(6)

    生信菜鸟团-专题学习目录(7)

    还有更多文章,请移步公众号阅读

    ▼ 如果你生信基本技能已经入门,需要提高自己,请关注下面的生信技能树,看我们是如何完善生信技能,成为一个生信全栈工程师。

    ▼ 如果你是初学者,请关注下面的生信菜鸟团,了解生信基础名词,概念,扎实的打好基础,争取早日入门。



          

        



    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存