天软金融分析.NET函数大全 > TSL函数 > 基础函数 > 数组 > 数组操作

AbnormalData    

简述
数组中出现奇异值的处理。其中y为数据表,Flag为处理方法,Ystore为选择中位数和3倍标准差法返回被处理数据的数据。
定义
AbnormalData(y:array;flag:String;ystore:array)
参数
名称类型说明
yarray一维数字数组
FlagString用户自定义,奇异值处理方法
显示名 取值
中位数 "median"
3倍标准差 "zvalue"
四分位法 "quartile"
ystorearray数据表类型,存放修改的数据,包括修改的行、原数值、处理后的值
  • 算法

    中位数法:上边界=中位数+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_奇异值处理"
相关