qq图的全称和概念

(quantile-quantile plot),这是一个和分位数(quantile)相关的图

qq图的原理是比较两组数据的累计分布函数图从而判断两组数据是否服从同一个分布。

作用

1、检验一组数据是否服从某一分布。

2、检验两个分布是否服从同一个分布。

对累计分布曲线(概率密度曲线)的介绍

了解scipy模块的函数stats.norm.cdf(a,均值,方差)

from scipy import stats
area_value=stats.norm.cdf(0,0,1)

在如上的代码中,利用stats.norm.cdf函数,我们在一个均值为0,方差为1的正态分布曲线,计算了从负无穷到0的面积值(即0.5),返回给变量area_value

绘制正态分布(高斯分布)的累计分布曲线:

我们知道,正态分布曲线是一个以均值作为中心,向两侧扩散的倒U形曲线。
我们设置一个均值为0,方差为1的正态分布,利用numpy在0左右采取20个点,求取这些点在正态分布中的面积值,用于绘制累计分布曲线

import numpy as np
from scipy import stats
from matplotlib import pyplot as plt#采点:
x=np.arange(-5,5,0.5)#得到每个点在正态分布中的面积值:
y=stats.norm.cdf(x,0,1)#绘制正态分布的累计分布图(概率密度图)
plt.plot(x,y)
plt.show()

图像效果:

曲线是递增的,随X轴刻度的增大,Y轴刻度值接近1。

绘制分位点函数曲线

分位点函数,称为CDF的逆,或是标准偏差的乘数

效果就是给定概率值反推对应的X坐标值。利用stats.norm.ppf(a,均值,标准差)进行计算

#例如我计算概率(面积)为0.5时的x坐标值:
x_tick=stats.norm.ppf(0.5,0,1)
print(x_tick)

该代码中返回的值0.0

利用采点得到的cdf值,再用分位点函数,得到这些概率的x轴坐标,由此绘制出一条标准的y=x曲线:

import numpy as np
from scipy import stats
from matplotlib import pyplot as plt#采点:
x=np.arange(-5,5,0.5)#得到每个点在正态分布中的面积值:
y=stats.norm.cdf(x,0,1)#计算概率对应的x刻度值
y2=stats.norm.ppf(y,0,1)#绘制正态分布的分位点图:
plt.plot(x,y2)
plt.show()

图像效果:

从R语言包qqman中提取练习数据

下载如图网站中的qqman_0.1.8.tar.gz包,解压后,在文件夹data中,将*.RData数据转化为txt

使用的R语言代码如下:

#导入数据:
data<-load("gwasResults.RData")
#查看*.RData文件中保留的对象:
data
#将数据保存为txt格式:
writetable(gwasResults,file="gwas.txt",sep=",")

这里输入的data查看到的RData文件中保存的对象是gwasResults。最终得到一个gwas.txt的文本文件。

利用得到的gwas数据绘制qq图

from scipy import stats
import numpy as np
import pandas as pd
from matplotlib import pyplot as pltgwas = pd.read_csv(r'C:\Users\TSPC\Desktop\gwas.txt',sep=",")#转换数据:
gwas["-LOG10_P"]=-np.log10(gwas["P"])
#对P值取对数:
sorted_=np.sort(gwas["-LOG10_P"])yvals = np.arange(len(sorted_))
yvals=yvals/float(len(sorted_))
#得到百分位值:
yvals=stats.norm.ppf(yvals,0,1)#sorted_是对数化的P值
#yvals是对应的在正态分布的百分位值
plt.scatter(yvals,sorted_,color="#00FA9A",linewidths=.4,edgecolors="blue")#采点:
x=np.arange(-5,5,0.5)#得到每个点在正态分布中的面积值:
y=stats.norm.cdf(x,0,1)
#计算概率对应的x刻度值(百分数值)
y=stats.norm.ppf(y,0,1)#绘制正态分布的分位点图:
plt.plot(y,x,linestyle="--",color="red")
plt.xlabel("excepted P values (-log10)",size=15)
plt.ylabel("observed P values (-log10)",size=15)
plt.show()
plt.savefig("./qq_image.pdb")

这里vals是每个数在总体的累计比例数,比如一个1~250的数据,1的累计比例值就是1/250=0.004得到每个累计比例值在正态分布中的的百分位数,利用数据绘制散点图(百分位数-对数化的P值)。同样是在正态分布曲线x轴取点,计算百分位值,绘制作为比较的虚线。

查看效果:

使用第三方库实现qq图

1、安装第三方库geneview:

pip install geneview

2、使用代码实现qq图:

import matplotlib.pyplot as plt
from geneview.gwas import qqplot
import pandas as pd#提取出文件中的P值:
gwas_raw_data = pd.read_csv(r'C:\Users\TSPC\Desktop\gwas.txt',sep=",")
P_value = gwas_raw_data['P']# 绘制Q-Q图:
ax = qqplot(P_value, color="#00bb33", xlabel="Expected p-value(-log10)",ylabel="observed p-value(-log10))") plt.show()

3、图像效果:

geneview模块做出来的qq图截取了x轴大于0的数据进行画图,和上张图得到的效果有些区别。

qq图的理解以及python的实现相关推荐

  1. 【数据可视化应用】绘制QQ图(附Python和R语言代码)

    QQ图(Quantile-Quantile Plots)含义简单介绍 「含义」: QQ图是用于验证一组数据是否符合正态分布,或者验证某两组数据是否来自同一分布情况,是一种散点图,通常情况下,其横坐标为 ...

  2. python 绘制qq图

    qq图有两个作用:1.检验一组数据是否服从某一分布.2.检验两个分布是否服从同一分布.qq图全称是quantile-quantile plot,从名称中可以了解到是和分位数相关的图.由于最近在做数据分 ...

  3. python绘制qq图_Python中作QQ图(quantilequantile Plot)

    Q-Q图主要可以用来回答这些问题: 两组数据是否来自同一分布 PS:当然也可以用KS检验,利用python中scipy.stats.ks_2samp函数可以获得差值KS statistic和P值从而实 ...

  4. python 绘制q-q图代码

    python 绘制q-q图代码 今天,我们附上一份python绘制q-q图的代码 简单介绍一下思路 1.首先,我们需要对我们绘制的两份数据排序,然后,用散点图绘制在图例上 2.之后,绘制散点拟合曲线, ...

  5. 如何使用Python画QQ图

    QQ图,全称quantile-quantile plot,又称为分位图.通常用于判断一组数据是否服从某种理论分布,大多数情况用于判断是否服从正太分布.尽管Q-Q图不是正式的统计检验,但它提供了一种直观 ...

  6. PP图,QQ 图,及 python 画图

    统计学中有时会用到 PP 图 或 QQ 图,用来看样本数据是否服从某一特定分布. 若 PP 或 QQ 图中的点基本落在一条 45度 的线上,则说明服从特定分布. 一般的步骤为: 将样本数据从小到大排序 ...

  7. Q-Q图原理及Python实现

    一.累积分布函数与分位数 累积密度函数(CDF,Cumulative Distribution Function)即概率密度函数的积分,公式如下: 分位数是指满足  的数,例如上四分位数是指累积概率达 ...

  8. Q-Q图原理详解及Python实现

    [导读]在之前的<数据挖掘概念与技术 第2章>的文章中我们介绍了Q-Q图的概念,并且通过调用现成的python函数, 画出了Q-Q图, 验证了Q-Q图的两个主要作用,1. 检验一列数据是否 ...

  9. Python中作Q-Q图(quantile-quantile Plot)

    Q-Q图主要可以用来回答这些问题: 两组数据是否来自同一分布 PS:当然也可以用KS检验,利用python中scipy.stats.ks_2samp函数可以获得差值KS statistic和P值从而实 ...

最新文章

  1. 构建深度学习框架运行平台
  2. oracle 10g视频教程
  3. 【图像处理】灰度加权距离变换(GWDT)
  4. Linux系统非阻塞I/O select、poll和epoll非常好的两篇文章
  5. C#之判断Mysql数据库表是否存在
  6. 在struts中实现验证码
  7. 正则表达式(模拟网络爬虫、网络蜘蛛)
  8. 人脸识别技术软件测试测什么,人脸识别这么火,你知道它是什么吗?
  9. 热敏打印机USB测试工具,命令行版本xpt
  10. Word-去掉标题前面的小黑点
  11. 博客群建软件-如何让链接效果的最大化
  12. 鸿蒙系统安兔兔,5摄镜头+鸿蒙系统!华为P40系列曝光
  13. 讲讲自己试用期被劝退的经历!
  14. 【算法】求非空子集的三种思路
  15. 如何更改 Win7 网络连接显示名称
  16. 既然都有了NS,何不再入一个喷喷(Splatoon 2)【下】
  17. 路由器DNS 劫持攻击情况
  18. NRF24L01(1)
  19. [转贴]LINUX新手入门及安装配置FAQ
  20. NUIST找工作小玩具

热门文章

  1. 一墙之隔-看向世界和直面速度与激情
  2. 自定义ListVIew添加上下更多项
  3. 有些事情让感情无处安放
  4. WebRTC系列--视频编码控制之BALANCED(分辨率与帧率平衡模式)
  5. antd中如何实现分页勾选记住之前的选项
  6. 深度学习-fashion_mnist预测
  7. java fit 16s,16s分析之差异OTU 挑选(edgeR)
  8. 相机镜头光学中的一些疑难问题的解释
  9. python触屏模块_触摸屏滚动Tkinter Python
  10. TIPTOP报表提示:foreach: 字元轉換至數字程序失敗.