scipy.stats.

probplot#

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

計算機率圖的分位數,並(可選)顯示圖表。

產生樣本數據相對於指定理論分布(預設為常態分布)分位數的機率圖。probplot 可選擇計算數據的最佳擬合線,並使用 Matplotlib 或給定的繪圖函數繪製結果。

參數:
xarray_like

用於 probplot 創建圖表的樣本/響應數據。

sparamstuple, optional

分布特定的形狀參數(形狀參數加上位置和尺度)。

diststr 或 stats.distributions 實例, optional

分布或分布函數名稱。預設值為 'norm',表示常態機率圖。外觀與 stats.distributions 實例足夠相似的物件(即它們具有 ppf 方法)也被接受。

fitbool, optional

如果為 True(預設),則將最小平方迴歸(最佳擬合)線擬合到樣本數據。

plotobject, optional

如果給定,則繪製分位數。如果給定且 fit 為 True,則也繪製最小平方法擬合。plot 是一個必須具有 "plot" 和 "text" 方法的物件。matplotlib.pyplot 模組或 Matplotlib Axes 物件可以使用,或具有相同方法的自訂物件。預設值為 None,表示不創建任何圖表。

rvaluebool, optional

如果提供了 plotfit 為 True,則將 rvalue 設置為 True 會在圖表上包含判定係數。預設值為 False。

返回值:
(osm, osr)tuple of ndarrays

理論分位數(osm,或順序統計中位數)和有序響應 (osr) 的元組。osr 只是排序後的輸入 x。有關如何計算 osm 的詳細資訊,請參閱「註釋」部分。

(slope, intercept, r)tuple of floats, optional

包含最小平方法擬合結果的元組,如果由 probplot 執行。r 是判定係數的平方根。如果 fit=Falseplot=None,則不會返回此元組。

註釋

即使給定了 plot,圖形也不會由 probplot 顯示或保存;在調用 probplot 後,應使用 plt.show()plt.savefig('figname.png')

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 是值的總數。

範例

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

使用對數伽瑪分布生成新圖形,使用 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