中位数法:上边界=中位数+5.2*medianof(abs(yi-中位数)),下边界=中位数-5.2*medianof(abs(yi-中位数)),其中medianof表示求序列中位数。超出上边界的数改为上边界,低于下边界的数改为下边界。
3倍标准差法:上边界=μ+3σ,下边界=μ-3σ,其中u表示均值,σ表示标准差。超出上边界的数改为上边界,低于下边界的数改为下边界。
四分位法:左边界=14位数-1.5*(中位数-14位数),下边界=34位数+1.5*(34位数-中位数),。超出右边界的数改为右边界,低于左边界的数改为左边界。
范例01:返回奇异值的位置及处理后的结果。
t:=array(1,100,101,102,103,1000);
AbnormalData(t,"median",r);
return r;
返回:
其中,0和5为修改的行,1和1000是对应的原值,93.7和109.3是修改后的值
范例02:对源数据列增加一列奇异值处理后的结果
col:='SH000001';
setsysparam(pn_stock(),col);
setsysparam(pn_date(),20240930T);
setsysparam(pn_cycle(),cy_day());
days:=100;
//SH000001在20240930最近100天的行情数据中设置三个奇异值
t:=Nday(days,'日期',datetostr(sp_time()),col,close());
t[29,col]:=1500;
t[59,col]:=4500;
t[79,col]:=6000;
//找到数组指定列奇异值,以中位数法为例
tyc:= AbnormalData(t[:,col],"median",abn);
t[:,col$"_奇异值处理"]:=tyc;
return t;
返回结果:增加列"SH000001_奇异值处理"
