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
如果提供了 plot 且
fit
為 True,則將 rvalue 設置為 True 會在圖表上包含判定係數。預設值為 False。
- 返回值:
- (osm, osr)tuple of ndarrays
理論分位數(osm,或順序統計中位數)和有序響應 (osr) 的元組。osr 只是排序後的輸入 x。有關如何計算 osm 的詳細資訊,請參閱「註釋」部分。
- (slope, intercept, r)tuple of floats, optional
包含最小平方法擬合結果的元組,如果由
probplot
執行。r 是判定係數的平方根。如果fit=False
且plot=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)
使用對數伽瑪分布生成新圖形,使用
dist
和sparams
關鍵字>>> 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()