scipy.stats.

median_abs_deviation#

scipy.stats.median_abs_deviation(x, axis=0, center=<function median>, scale=1.0, nan_policy='propagate')[原始碼]#

計算資料沿給定軸的中位數絕對偏差。

中位數絕對偏差 (MAD,[1]) 計算與中位數的絕對偏差的中位數。它是一種與標準差相似的離散程度度量,但對離群值更穩健 [2]

空陣列的 MAD 為 np.nan

在版本 1.5.0 中新增。

參數:
xarray_like

輸入陣列或可以轉換為陣列的物件。

axisint 或 None,可選

計算範圍的軸。預設值為 0。如果為 None,則計算整個陣列的 MAD。

centercallable,可選

一個將回傳中心值的函數。預設值是使用 np.median。任何使用者定義的函數都需要具有函數簽名 func(arr, axis)

scalescalar 或 str,可選

比例的數值將從最終結果中除掉。預設值為 1.0。字串 “normal” 也被接受,並導致 scale 為標準常態分位數函數在 0.75 處的倒數,約為 0.67449。也允許使用類似陣列的比例,只要它能正確廣播到輸出,使得 out / scale 是有效的運算。輸出維度取決於輸入陣列 xaxis 參數。

nan_policy{‘propagate’, ‘raise’, ‘omit’},可選

定義輸入包含 nan 時的處理方式。以下選項可用(預設為 ‘propagate’)

  • ‘propagate’:回傳 nan

  • ‘raise’:拋出錯誤

  • ‘omit’:執行計算時忽略 nan 值

回傳:
madscalar 或 ndarray

如果 axis=None,則回傳一個純量。如果輸入包含整數或精度小於 np.float64 的浮點數,則輸出資料類型為 np.float64。否則,輸出資料類型與輸入相同。

註解

center 參數僅影響計算 MAD 所圍繞的中心值。也就是說,傳入 center=np.mean 將計算圍繞平均值的 MAD - 它不會計算平均絕對偏差。

輸入陣列可能包含 inf,但如果 center 回傳 inf,則該資料的相應 MAD 將為 nan

參考文獻

[1]

“Median absolute deviation”,https://en.wikipedia.org/wiki/Median_absolute_deviation

[2]

“Robust measures of scale”,https://en.wikipedia.org/wiki/Robust_measures_of_scale

範例

當比較 median_abs_deviationnp.std 的行為時,後者在我們將陣列的單個值更改為離群值時會受到影響,而 MAD 幾乎沒有變化

>>> import numpy as np
>>> from scipy import stats
>>> x = stats.norm.rvs(size=100, scale=1, random_state=123456)
>>> x.std()
0.9973906394005013
>>> stats.median_abs_deviation(x)
0.82832610097857
>>> x[0] = 345.6
>>> x.std()
34.42304872314415
>>> stats.median_abs_deviation(x)
0.8323442311590675

軸向處理範例

>>> x = np.array([[10, 7, 4], [3, 2, 1]])
>>> x
array([[10,  7,  4],
       [ 3,  2,  1]])
>>> stats.median_abs_deviation(x)
array([3.5, 2.5, 1.5])
>>> stats.median_abs_deviation(x, axis=None)
2.0

標準化範例

>>> x = stats.norm.rvs(size=1000000, scale=2, random_state=123456)
>>> stats.median_abs_deviation(x)
1.3487398527041636
>>> stats.median_abs_deviation(x, scale='normal')
1.9996446978061115