scipy.stats.

expectile#

scipy.stats.expectile(a, alpha=0.5, *, weights=None)[source]#

計算指定水準的 expectile。

Expectile 是期望值的推廣,就像分位數是中位數的推廣一樣。水準 alpha = 0.5 的 expectile 是平均值。詳情請參閱「Notes」章節。

參數:
aarray_like

包含想要計算 expectile 的數字的陣列。

alphafloat, 預設值: 0.5

expectile 的水準;例如,alpha=0.5 給出平均值。

weightsarray_like,選用

一個與 a 中的值相關聯的權重陣列。weights 必須可廣播到與 a 相同的形狀。預設值為 None,這會給每個值一個權重 1.0。整數值的權重元素的作用類似於將 a 中對應的觀察值重複多次。詳情請參閱「Notes」章節。

回傳值:
expectilendarray

在水準 alpha 的經驗 expectile。

另請參閱

numpy.mean

算術平均值

numpy.quantile

分位數

Notes

In general, the expectile at level \(\alpha\) of a random variable \(X\) with cumulative distribution function (CDF) \(F\) is given by the unique solution \(t\) of

\[\alpha E((X - t)_+) = (1 - \alpha) E((t - X)_+) \,.\]

Here, \((x)_+ = \max(0, x)\) is the positive part of \(x\). This equation can be equivalently written as

\[\alpha \int_t^\infty (x - t)\mathrm{d}F(x) = (1 - \alpha) \int_{-\infty}^t (t - x)\mathrm{d}F(x) \,.\]

The empirical expectile at level \(\alpha\) (alpha) of a sample \(a_i\) (the array a) is defined by plugging in the empirical CDF of a. Given sample or case weights \(w\) (the array weights), it reads \(F_a(x) = \frac{1}{\sum_i w_i} \sum_i w_i 1_{a_i \leq x}\) with indicator function \(1_{A}\). This leads to the definition of the empirical expectile at level alpha as the unique solution \(t\) of

\[\alpha \sum_{i=1}^n w_i (a_i - t)_+ = (1 - \alpha) \sum_{i=1}^n w_i (t - a_i)_+ \,.\]

For \(\alpha=0.5\), this simplifies to the weighted average. Furthermore, the larger \(\alpha\), the larger the value of the expectile.

As a final remark, the expectile at level \(\alpha\) can also be written as a minimization problem. One often used choice is

\[\operatorname{argmin}_t E(\lvert 1_{t\geq X} - \alpha\rvert(t - X)^2) \,.\]

參考文獻

[1]

W. K. Newey and J. L. Powell (1987), “Asymmetric Least Squares Estimation and Testing,” Econometrica, 55, 819-847.

[2]

T. Gneiting (2009). “Making and Evaluating Point Forecasts,” Journal of the American Statistical Association, 106, 746 - 762. DOI:10.48550/arXiv.0912.0902

範例

>>> import numpy as np
>>> from scipy.stats import expectile
>>> a = [1, 4, 2, -1]
>>> expectile(a, alpha=0.5) == np.mean(a)
True
>>> expectile(a, alpha=0.2)
0.42857142857142855
>>> expectile(a, alpha=0.8)
2.5714285714285716
>>> weights = [1, 3, 1, 1]