statsmodels.graphics.functional.hdrboxplot¶
-
statsmodels.graphics.functional.hdrboxplot(data, ncomp=
2, alpha=None, threshold=0.95, bw=None, xdata=None, labels=None, ax=None, use_brute=False, seed=None)[source]¶ 高密度区域箱线图
- Parameters:¶
- datasequence
ofndarraysor 2-Dndarray 用于创建功能箱线图的函数向量。如果是一个1-D数组的序列,这些数组的大小应该相同。第一个轴是函数索引,第二个轴是函数定义的轴。因此
data[0, :]是第一个功能曲线。- ncomp
int,optional 要使用的组件数量。如果为 None,则返回数据中行数或列数较小的那个数量。
- alpha
listoffloatsbetween0and1,optional 额外要计算的分位数值。默认是 None
- threshold
floatbetween0and1,optional 用于异常值检测的百分位阈值。较高的值意味着对异常值的敏感度较低。默认值为 0.95。
- bwarray_like or
str,optional 如果是一个数组,它是用户指定的固定带宽。如果是None,则设置为normal_reference。如果是一个字符串,应该是以下之一:
normal_reference: 正常参考经验法则(默认)
cv_ml: 交叉验证最大似然
cv_ls: 交叉验证最小二乘法
- xdata
ndarray,optional 数据的独立变量。如果没有给出,则假设为整数数组 0..N-1,其中 N 是 data 中向量的长度。
- labelssequence
ofscalar orstr,optional 曲线在数据中的标签或标识符。如果未给出,异常值在图中会用数组索引进行标记。
- ax
AxesSubplot,optional 如果指定,此子图将用于绘图,而不是创建新图形。
- use_brutebool
使用蛮力优化器而不是默认的差分进化来寻找曲线。默认为False。
- seed{
None,int,np.random.RandomState} 传递给 scipy.optimize.differential_evolution 的种子值。可以是整数或 RandomState 实例。如果为 None,则使用 np.random 提供的默认 RandomState。
- datasequence
- Returns:¶
- fig
Figure 如果 ax 为 None,则创建图形。否则为 ax 连接的图形。
- hdr_res
HdrResultsinstance 一个具有以下属性的HdrResults实例:
‘中位数’, 数组。中位数曲线。
‘hdr_50’, 数组。50%分位数带。[上界, 下界]曲线
- ‘hdr_90’, list of array. 90% quantile band. [sup, inf]
曲线。
- ‘extra_quantiles’, list of array. Extra quantile band.
[上确界, 下确界]曲线。
‘outliers’, ndarray. 异常曲线。
- fig
另请参阅
注释
中位曲线是在主成分分析(PCA)的降维空间中具有最高概率的曲线。
离群值被定义为落在由阈值给定的分位数对应的带之外的曲线。
非异常区域定义为由所有非异常曲线组成的带状区域。
在幕后,数据集被表示为一个矩阵。每一行对应一个一维曲线。然后使用主成分分析(PCA)对该矩阵进行分解。这允许使用有限数量的模式或成分来表示数据。这种压缩过程可以将函数的表示转换为矩阵的标量表示。换句话说,您可以根据其成分可视化每条曲线。因此,每条曲线在这个简化空间中是一个点。如果有2个成分,这被称为二元图(2D图)。
在这个图中,如果某些点是相邻的(相似的成分),这意味着在原始空间中,曲线是相似的。然后,找到中位曲线意味着在降维空间中找到高密度区域(HDR)。此外,你离这个HDR越远,曲线与其他曲线的相似性就越低。
使用核平滑技术,可以恢复多元空间的概率密度函数(PDF)。从该PDF中,可以计算与点簇相关的密度概率并绘制其等高线。
最后,使用这些轮廓,可以提取不同的分位数以及中位曲线和异常值。
生成HDR箱线图的步骤包括:
计算多元核密度估计
计算90%、50%和alpha%分位数的等高线
绘制二元图
计算中位数曲线以及分位数和异常值曲线。
参考文献
- [1] R.J. Hyndman and H.L. Shang, “Rainbow Plots, Bagplots, and Boxplots for
功能数据”,第19卷,第29-45页,2010年。
示例
加载厄尔尼诺数据集。包含60年太平洋海洋海面温度数据。
>>> import matplotlib.pyplot as plt >>> import statsmodels.api as sm >>> data = sm.datasets.elnino.load()创建一个功能性箱线图。我们看到1982-83年和1997-98年是异常值;这些年份是厄尔尼诺现象(一种以海面温度升高和气压升高为特征的气候模式)以异常强度发生的年份。
>>> fig = plt.figure() >>> ax = fig.add_subplot(111) >>> res = sm.graphics.hdrboxplot(data.raw_data[:, 1:], ... labels=data.raw_data[:, 0].astype(int), ... ax=ax)>>> ax.set_xlabel("Month of the year") >>> ax.set_ylabel("Sea surface temperature (C)") >>> ax.set_xticks(np.arange(13, step=3) - 1) >>> ax.set_xticklabels(["", "Mar", "Jun", "Sep", "Dec"]) >>> ax.set_xlim([-0.2, 11.2])>>> plt.show()