Skip to main content
 首页 » 编程设计

python之如何在 python 中创建两个不同大小的样本之间的 qq 图

2025年05月04日22虾米姐

我有一个原始样本数据和它的模拟数据(不要问我是怎么模拟的),我想检查直方图是否匹配。所以最好的方法是通过 qqplot 但是 statsmodels 库不允许不同大小的样本。

请您参考如下方法:

构建 qq 图涉及在两个集合中找到相应的分位数并将它们相对于彼此绘制。在一组大于另一组的情况下,通常的做法是采用较小组的分位数水平,并使用线性插值来估计较大组中的相应分位数。此处对此进行了描述:http://www.itl.nist.gov/div898/handbook/eda/section3/qqplot.htm

手动操作相对简单:

import numpy as np 
import pylab 
 
test1 = np.random.normal(0, 1, 1000) 
test2 = np.random.normal(0, 1, 800) 
 
#Calculate quantiles 
test1.sort() 
quantile_levels1 = np.arange(len(test1),dtype=float)/len(test1) 
 
test2.sort() 
quantile_levels2 = np.arange(len(test2),dtype=float)/len(test2) 
 
#Use the smaller set of quantile levels to create the plot 
quantile_levels = quantile_levels2 
 
#We already have the set of quantiles for the smaller data set 
quantiles2 = test2 
 
#We find the set of quantiles for the larger data set using linear interpolation 
quantiles1 = np.interp(quantile_levels,quantile_levels1,test1) 
 
#Plot the quantiles to create the qq plot 
pylab.plot(quantiles1,quantiles2) 
 
#Add a reference line 
maxval = max(test1[-1],test2[-1]) 
minval = min(test1[0],test2[0]) 
pylab.plot([minval,maxval],[minval,maxval],'k-') 
 
pylab.show()