2.5 波动幅度
波动幅度是描述原值波动大小的衍生序列。
通俗的讲,一段时间内最大值与最小值之差就可以作为波动幅度W。
wi=ma-mi
其中ma和mi是X[-l]i内的最大值和最小值。
但这么做会有隐患,当X中有特别大或特别小的值时,wi会持续一段时间(长度为l),受异常值影响很大。所以考虑将异常值去掉后,把正常数据的最大值、最小值以及当前值做差后的结果作为波动幅度W。
时间序列X的波动幅度序列W:
mu=max(Norm(X[-l]i))
md= min(Norm(X[-l]i))
其中mu、md分别是X[-l]i中正常数据的最大值和最小值,Norm(…)是之前介绍的异常发现方法(箱线图法、正态统计法、距离法),返回所有的正常数据。
SPL例程:
A |
B |
C |
|
1 |
=data=file(“1Ddata.csv”).import@tci().to(100) |
/时间序列X |
|
2 |
=l=5 |
/区间l |
|
3 |
=data.((if(#<=l,null,(xi=~,s=~[-l:-1],norm=func(A5,s,1.5), ma=max(norm),mi=min(norm),max(ma-xi,xi-mi,ma-mi))))) |
/波动幅度W,箱线图法中的四分位距倍数为1.5 |
|
4 |
/箱线图法,返回正常数据,参数:序列,四分位距倍数 |
||
5 |
func |
||
6 |
=A5.median(:4) |
||
7 |
=B6(1) |
/Q1 |
|
8 |
=B6(3) |
/Q3 |
|
9 |
=B8-B7 |
/IQR |
|
10 |
=B7-B9*B5 |
/td |
|
11 |
=B8+B9*B5 |
/tu |
|
12 |
=A5.select(~>=B10&&~<=B11) |
/正常值 |
A3格中计算波动幅度序列W;
A5代码块是箱线图发现异常法,返回所有正常数据,这里也可以换成其他的发现异常方法,比如正态统计法、距离法。
计算结果示例:
图中横轴是序列索引,左纵轴是原值X的取值,右纵轴是波动幅度W的取值。图例中X是原值,W是波动幅度。(前5个时刻没有波动幅度,图中只画了后95个时刻的波动幅度)
根据最大值和最小值算出的波动幅度只考虑原值本上的波动,没有考虑原值的趋势,比如当原值整体呈下降趋势时,波动的幅度会很大。所以波动幅度还可以考虑主线后再计算。
原值与主线对位相减后的序列称为波动序列,记为Wv,取Wv [-(l+1)]i+1内绝对值最大的前一半数的均值作为波动幅度wi。
时间序列X的波动幅度序列W:
Wv=X—M
tophi=top(-n\2,|Wv [-(l+1)]i+1|)
wi=avg(tophi)
其中|Wv [-(l+1)]i+1|是指Wv [-(l+1)]i+1的数都取绝对值,tophi是xi对应的|Wv [-(l+1)]i+1|中最大的前一半数。
SPL例程:
A |
B |
C |
|
1 |
=data=file(“1Ddata.csv”).import@tci().to(100) |
/时间序列X |
|
2 |
=l=5 |
/区间l |
|
3 |
=fit_main(A1,10) |
/主线M,k=10 |
|
4 |
=A1--A3 |
/波动序列Wv |
|
5 |
=A4.(if(#<=l,null,(s=~[-l:0],s.top(-(l+1)\2,abs(~)).avg()))) |
/波动幅度 |
A3格中是最小二乘法算出的主线(也可以用移动平均的方法算主线);
A5格中计算波动幅度序列W;
计算结果示例:
图中横轴是序列索引,左纵轴是原值X的取值,右纵轴是波动幅度W的取值。图例中X是原值,W是波动幅度。(前5个时刻没有波动幅度,图中只画了后95个时刻的波动幅度)