scipy.stats.probplot

scipy.stats.probplot(x, sparams=(), dist='norm', fit=True, plot=None, rvalue=False)[源代码]

计算概率图的分位数,并根据需要显示该图。

根据指定理论分布(默认情况下为正态分布)的分位数生成样本数据的概率图。 probplot (可选)计算数据的最佳拟合直线,并使用Matplotlib或给定的打印函数打印结果。

参数
xarray_like

样本/响应数据来自 probplot 创建打印。

sparams元组,可选

特定于分布的形状参数(形状参数加上位置和比例)。

dist字符串或统计信息。分布实例,可选

分发或分发函数名称。正态概率图的默认值为‘NORAME’。看起来足够像stats.Distribution实例的对象(即,它们有一个 ppf 方法)也被接受。

fit布尔值,可选

如果为True(默认),则将最小二乘回归(最佳拟合)线拟合到采样数据。

plot对象,可选

如果给定,则绘制分位数。如果给定并且 fit 为真时,也绘制出最小二乘拟合。 plot 是一个必须具有“Plot”和“Text”方法的对象。这个 matplotlib.pyplot 可以使用模块或Matplotlib轴对象,也可以使用具有相同方法的自定义对象。默认值为None,这意味着不会创建绘图。

退货
(OSM、OSR)ndarray元组

理论分位数(OSM,或顺序统计中间值)和有序响应(OSR)的元组。 osr 是简单排序的输入 x 。有关如何执行此操作的详细信息,请参阅 osm 是计算出来的,请参阅“注释”部分。

(坡度、截距、r)浮动数组,可选

包含最小二乘拟合结果的元组(如果由 probplotr 是决定系数的平方根。如果 fit=Falseplot=None ,则不返回此元组。

注意事项

即使 plot ,则不会显示或保存该图形。 probplotplt.show()plt.savefig('figname.png') 应在调用 probplot

probplot 生成概率图,不要将其与Q-Q或P-P图混淆。StatsModels具有更广泛的此类型功能,请参见 statsmodels.api.ProbPlot

用于理论分位数(概率图的水平轴)的公式是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 值的总数。

示例

>>> 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)

生成具有对数分布的新图形,使用 distsparams 关键词:

>>> 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()
../../_images/scipy-stats-probplot-1_00.png
../../_images/scipy-stats-probplot-1_01.png