小果带你认识R数据可视化检验数据分布之Q-Q图






小果带你认识R数据可视化检验数据分布之Q-Q图

小图  生信果  2024-02-10 19:00:08

检验数据的分布对于正确选择统计方法、进行假设检验、评估模型拟合程度以及提高预测和推断的准确性都具有重要的意义,它是数据分析和统计推断的基础和关键环节。
小果今天向大家介绍的是其中一种方法Q-Q图,那么接下来跟随小果的步伐一起来认识学习它吧。Q-Q图(Quantile-Quantile plot)是一种用于检验一个数据集是否符合某个理论分布的方法,它通过比较数据集的分位数与理论分布的分位数来判断它们的相似程度。在Q-Q图中,如果数据集的分布与理论分布相似,那么数据点应该大致落在一条直线上。如果数据点偏离直线,表示数据集的分布与理论分布有差异。Q-Q图常用于检验数据集是否符合正态分布,可以通过比较数据点与直线的偏离程度来判断数据集的正态性。此外,Q-Q图也可以用于比较不同数据集的分布,判断它们是否来自同一个分布。
小果先讲述一下Q-Q 图的大概制作步骤:
1.将数据集按照从小到大的顺序排序。
2.计算数据集中每个数据的累积概率,即该数据在数据集中的位置除以数据集的总数。
3.根据理论分布的概率密度函数,计算相应的累积概率。
4.将数据集的累积概率与理论分布的累积概率进行比较,绘制成散点图或折线图。   
那么接下来又到了小果的举例环节:

1. ggplot2
 

大家还记得小果之前讲述的ggplot2吗,在这里我们就可以使用 ggplot2 的 geom_qq 和 geom_qq_line 绘制 Q-Q 图。
> tibble(y = rt(500, df = 8)) %>%+   ggplot(aes(sample = y)) ++   geom_qq() + geom_qq_line() 
接下来我们估计分布的参数,并传递到理论分布中。
> df <- tibble(y = rt(500, df = 8))> params <- as.list(MASS::fitdistr(df$y, "t")$estimate)> ggplot(df, aes(sample = y)) ++   geom_qq(distribution = qt, dparams = params["df"]) +        +   geom_qq_line(distribution = qt, dparams = params["df"])
 由上图可以得知,点与线重合度变得更高了。

2. qqplotr
 

我们也可以使用 qqplotr 来绘制 Q-Q 图,使用之前记得先安装和载入qqplotr 包。
> install.packages("qqplotr")> require(qqplotr)           > df <- tibble(x = rnorm(500))> ggplot(df, aes(sample = x)) ++   stat_qq_band() ++   stat_qq_line() ++   stat_qq_point() ++   labs(x = "Xiao guo", y = "Select samples")
 
我们可以使用 stat_qq_band() 函数来绘制 Q-Q 图,并添加置信区间,置信区间表示了理论分布的分位数与观察值的分位数之间的不确定性。我们可以使用 bandType 参数来指定。
> ggplot(df, aes(sample = x)) ++   geom_qq_band(bandType = "ks", mapping = aes(fill = "Ks"), alpha = 0.8) ++   geom_qq_band(bandType = "ts", mapping = aes(fill = "Ts"), alpha = 0.8) ++   geom_qq_band(bandType = "pointwise", mapping = aes(fill = "Normal"), alpha = 0.8) ++   geom_qq_band(bandType = "boot", mapping = aes(fill = "Bootstrap"), alpha = 0.8) ++   stat_qq_line() ++   stat_qq_point() ++   scale_fill_manual(values = c("#11e1a1", "#aa2d22", "#aaa3cb", "#eeecc4")) ++   labs(x = "xiaoguo", y = "Select samples")
 
在ggplot2的学习中我们讲述过可以使用其他理论分布的参数作为一个 list 传递给 dparams 参数,在这里构建 Q-Q 图也是一样的。
> df <- tibble(x = rexp(500, 4))> dist <- "exp"> params <- list(rate = 4)> ggplot(df, aes(sample = x)) ++   stat_qq_band(distribution = dist, dparams = params, fill = "#aaa3cb") ++   stat_qq_line(distribution = dist, dparams = params) ++   stat_qq_point(distribution = dist, dparams = params) ++   labs(x = "xiaoguo", y = "Select samples"
 当然还支持分面来进行操作。
> dist <- "beta"> params <- list(shape1 = 2, shape2 = 4)> ggplot(diamonds, aes(sample = price, colour = cut, fill = cut)) ++   stat_qq_band(distribution = dist, dparams = params, alpha = 0.6) ++   stat_qq_point(distribution = dist, dparams = params) ++   stat_qq_line(distribution = dist, dparams = params) ++   facet_wrap(vars(cut)) ++   labs(x = "xiaoguo", y = "Select samples") 
 那小果的分享今天就到这里啦,不知道小伙伴们学会了绘制Q-Q图了吗,小果接下来还会讲解P-P图,小伙伴们记得继续关注小果哦,最后提醒小伙伴们一定记得要关注小果的工具平台呀
(http://www.biocloudservice.com/home.html),
小伙伴们下次再见。 

小果还提供思路设计、定制生信分析、文献思路复现;有需要的小伙伴欢迎直接扫码咨询小果,竭诚为您的科研助力!


定制生信分析

服务器租赁

扫码咨询小果


往期回顾

01

1024G存储的生信服务器,两人成团,1人免单!

02

单个数据库用腻了?多数据库“组合拳”带你打开免疫浸润新思路!

03

孟德尔随机化的准备工作,GWAS数据的网站下载方法

04

跟着小果学复现-手把手带你拿下IF=46.9Nature 级别的主成分分析(PCA)图!!