probplot#
- scipy.stats.probplot(x, sparams=(), dist='norm', fit=True, plot=None, rvalue=False)[source]#
计算概率图的 quantile 值,并可以选择显示该图。
根据指定的理论分布(默认为正态分布)的 quantile 值生成样本数据的概率图。
probplot
可以选择计算数据的最佳拟合线,并使用 Matplotlib 或给定的绘图函数绘制结果。- 参数:
- xarray_like
从中创建
probplot
图的样本/响应数据。- sparamstuple,可选
特定于分布的形状参数(形状参数加上位置和尺度)。
- diststr 或 stats.distributions 实例,可选
分布或分布函数名称。默认值为 'norm',表示正态概率图。看起来很像 stats.distributions 实例的对象(即,它们具有
ppf
方法)也被接受。- fitbool,可选
如果为 True(默认值),则将最小二乘回归(最佳拟合)线拟合到样本数据。
- plotobject,可选
如果给定,则绘制 quantile 值。如果给定且
fit
为 True,则还绘制最小二乘拟合。plot 是一个必须具有 “plot” 和 “text” 方法的对象。可以使用matplotlib.pyplot
模块或 Matplotlib Axes 对象,或者使用具有相同方法的自定义对象。默认值为 None,表示不创建任何绘图。- rvaluebool,可选
如果提供了 plot 并且
fit
为 True,则将 rvalue 设置为 True 会在图上包含确定系数。默认值为 False。
- 返回:
- (osm, osr)ndarrays 元组
理论 quantile 值(osm,或阶统计量中位数)和排序响应(osr)的元组。osr 只是排序的输入 x。有关如何计算 osm 的详细信息,请参见“注释”部分。
- (slope, intercept, r)浮点数元组,可选
包含最小二乘拟合结果的元组(如果由
probplot
执行)。r 是确定系数的平方根。如果fit=False
且plot=None
,则不会返回此元组。
注释
即使给出了 plot,
probplot
也不会显示或保存该图;应在调用probplot
之后使用plt.show()
或plt.savefig('figname.png')
。probplot
生成概率图,这不应与 Q-Q 图或 P-P 图混淆。Statsmodels 具有此类型更广泛的功能,请参见statsmodels.api.ProbPlot
。用于理论 quantile 值(概率图的横轴)的公式是 Filliben 的估计
quantiles = dist.ppf(val), for 0.5**(1/n), for i = n val = (i - 0.3175) / (n + 0.365), for i = 2, ..., n-1 1 - 0.5**(1/n), for i = 1
其中
i
表示第 i 个排序值,n
是值的总数。示例
>>> import numpy as np >>> from scipy import stats >>> import matplotlib.pyplot as plt >>> nsample = 100 >>> rng = np.random.default_rng()
一个具有小自由度的 t 分布
>>> ax1 = plt.subplot(221) >>> x = stats.t.rvs(3, size=nsample, random_state=rng) >>> res = stats.probplot(x, plot=plt)
一个具有较大自由度的 t 分布
>>> ax2 = plt.subplot(222) >>> x = stats.t.rvs(25, size=nsample, random_state=rng) >>> res = stats.probplot(x, plot=plt)
一个使用广播的两个正态分布的混合
>>> ax3 = plt.subplot(223) >>> x = stats.norm.rvs(loc=[0,5], scale=[1,1.5], ... size=(nsample//2,2), random_state=rng).ravel() >>> res = stats.probplot(x, plot=plt)
一个标准正态分布
>>> ax4 = plt.subplot(224) >>> x = stats.norm.rvs(loc=0, scale=1, size=nsample, random_state=rng) >>> res = stats.probplot(x, plot=plt)
使用
dist
和sparams
关键字生成具有 loggamma 分布的新图>>> fig = plt.figure() >>> ax = fig.add_subplot(111) >>> x = stats.loggamma.rvs(c=2.5, size=500, random_state=rng) >>> res = stats.probplot(x, dist=stats.loggamma, sparams=(2.5,), plot=ax) >>> ax.set_title("Probplot for loggamma dist with shape parameter 2.5")
使用 Matplotlib 显示结果
>>> plt.show()