发明名称 一种基于格拉布斯规则和矩阵实验室语言的药学测试数据中异常值的剔除方法
摘要 本发明涉及基于格拉布斯规则和矩阵实验室语言的药学测试数据中异常值的剔除方法,可有效解决药学中数据异常值的剔除和药学科研领域之外的适宜数据组的异常值处理的问题,方法是,首先编制程序,然后输入原始数据及相应函数,按照对单组数据的异常值的处理方法,首先判断输入的原始数据是否符合函数要求,若符合,再生成输出变量的空元胞数组矩阵后,依次对每组数据进行单组数据的格拉布斯异常值剔除,同时将生成的结果依次赋给上述元胞数组相应的矩阵,最后给出输出信息,实现对多组数据的批量循环剔除,本发明方法快速、准确,易操作,大大提高原始数据处理效率。
申请公布号 CN102436542B 申请公布日期 2015.11.04
申请号 CN201110283466.3 申请日期 2011.09.22
申请人 河南中医学院 发明人 刘瑞新;李学林;陈天朝;孙广科;施钧瀚;吴子丹
分类号 G06F19/00(2011.01)I 主分类号 G06F19/00(2011.01)I
代理机构 郑州天阳专利事务所(普通合伙) 41113 代理人 聂孟民
主权项 一种基于格拉布斯规则和矩阵实验室语言的药学测试数据中异常值的剔除方法,其特征在于,由以下步骤实现:(1)、编制程序模型,方法是:用函数[Xnew,del,index]=Grubbs(X,alpha,tail),其中X,alpha,tail为输入变量,Xnew,del,index为输出变量,各变量含义如下:X为输入原始数据的矩阵,或称测试值的输入向量,数据个数最多为100个,对数据的横排或竖排无要求,处理后的结构与原结构一致;alpha是显著水平值,为0.01、0.05、0.1,默认0.05;tail为尾数值,包括单侧检验尾数值和双侧检验尾数值,‑1为单侧低值检验尾数值,1为单侧高值检验尾数值,0为双侧检验尾数值,默认为0;Xnew是最终生成的无离群值的向量;del是删掉的离群值;index是删掉的离群值的原始编号;如果输入的变量数为1个,则默认显著水平值为0.05,同时默认尾数为0,即双侧检验;如果输入的变量数为2个,则默认尾数为0,即双侧检验;如果输入的显著水平不为0.01、0.05、0.1中任一个数,则提示输入备选的显著水平值0.01、0.05或0.1;如果输入的尾数不为1、‑1、0中任一个数,则提示输入正确的尾数‑1、0或1;统一为列向量:[p,q]=size(X),其中p、q是矩阵X的行数与列数,如果q等于1,[n,m]=size(X),则将矩阵X的行数与列数的值赋给变量n和m,如果p等于1,则将矩阵X进行转置X=X',即如果原来是1行20列的矩阵,则变成20行1列的矩阵,[n,m]=size(X),将矩阵X的行数与列数的值赋给变量n和m;平行测定的个数不能大于100,如果平行测定的个数大于100,则提示超出程序范畴;构建一个n×2的样本矩阵,N=1:1:n,N为1,2,3……n的数列,将N转置为列向量N=N',[Xsort,N]=sort(X),将矩阵X中的数值进行由小到大的排序,并将排序后的新矩阵命名为Xsort,Xorigin=[N,Xsort],生成一个按样本编号大小同时排序的“原始”矩阵Xorigin,Xsort2=Xorigin,Xsort2与Xorigin相同,index=zeros(n,1),即生成一个n行1列的零矩阵;临界值表:参照国标《数据的统计处理和解释——正态样本离群值的判断和处理(GB‑T4883‑2008)》:<img file="FDA0000762454850000021.GIF" wi="1125" he="1153" />临界值表Gtab中,第一列为序号,第一行中0.9、0.95、0.975、0.99、0.995为显著水平,从第3行至第100行,分别为样本量为3至100时各显著水平对应的临界值,中间略去90行,具体数据可参见GB‑T4883‑2008;方式一:如果尾数为‑1,则进行低值检验,首先找到第一个值即最小值,计算统计量Gi,计算公式按国标《数据的统计处理和解释——正态样本离群值的判断和处理(GB‑T4883‑2008)》中的“G'<sub>n</sub>”,并比较Gi与临界值表中相应的值(Gs)的相对大小,如果Gi/Gs&gt;1,则最小值剔除,得到新数据,再进行新数据的下一轮循环比较;否则不进行剔除;方式二:如果尾数为1,则进行高值检验,首先找到最后一个值即最大值,计算统计量Gi,计算公式按国标《数据的统计处理和解释——正态样本离群值的判断和处理(GB‑T4883‑2008)》中的“G<sub>n</sub>”,并比较Gi与临界值表中相应的值(Gs)的相对大小,如果Gi/Gs&gt;1,则最大值剔除,得到新数据,再进行新数据的下一轮循环比较;否则不进行剔除;方式三:如果尾数为0,则进行双侧检验,首先找到最小值和最大值,计算最大值减去均值的统计量Dmax和均值减去最小值的统计量Dmin并比较二者大小,若Dmax/Dmin&gt;1,则按照上述“方式二”进行下一步;否则按上述“方式一”进行下一步,如果有数据被剔除,则再进行新一轮的比较和剔除;最后,再把新生成的Xnew的元素顺序调为原始的、无序的、向量的单列,将新矩阵中的检测后的数据仍按最初输入时的顺序显示,序号同步,将离群值编号数列index中为0的数值去掉,如果去掉后没有元素了,则删掉的离群值为空,即未删掉离群值,同时所删掉的离群值的编号也为空,显示“数据组不含溢出值”;如果删掉为0的元素后还有元素,则对编号进行由小到大的排序,b=length(index),b是一共删掉的数据的个数,c=1:b,即c依次取1、2、……、b,依次取值,循环进行,找到Xsort2的第一列序号中等于c的行号,则该行号所对应的Xsort2的第二列数据即为所删除的异常值,循环完毕后,转置矩阵;最后,如果p为1,即初始向量是行向量,则对新生成的矩阵进行转置,删除的异常值的矩阵也进行转置,删除的异常值的序号矩阵也同时进行转置;(2)、对单组数据的异常值循环剔除,方法是,根据步骤(1)编制的程序,经微机进行如下步骤:①首先输入原始数据、显著水平和尾数变量,即X,alpha,tail,并输入函数[Xnew,del,index]=Grubbs(X,alpha,tail),对于同一组的输入变量测试数据,平行测定的数据个数最多为100个,否则提示“平行测定数超过100,超出本程序范畴”;“显著水平”的值为0.01、0.05、0.1,默认为0.05,按步骤(1)程序要进行该显著水平是否为0.01、0.05、0.1三个值之一的判断,如果符合条件,则进入下一步,否则提示输入备选的显著水平值;“尾数”的选值为‑1、1、0,默认为0,即单侧检验和双侧检验的尾数取值不同,‑1为单侧的低值检验,1为单侧的高值检验,0为双侧检验,根据步骤(1)程序要进行尾数是否为‑1、0、1三个值之一的判断,若符合条件,则进入下一步,否则提示输入正确的尾数;②统一数据结构:如果原输入数据为列向量,则保持不变;若为行向量,则转置为列向量;③构建一个含有原始序号及原始测试数据的矩阵,并按原始数据由小到大的排序方式排序,同时原始序号随测试数据的顺序变化而变化,生成新的矩阵备用;④判断所输入的尾数值:方式A:如果尾数为‑1,则进行下侧的低值检验,首先找到第一个最小值,计算统计量Gi,其数值与国标《数据的统计处理和解释——正态样本离群值的判断和处理(GB‑T4883‑2008)》中的“G'<sub>n</sub>”相同,比较Gi与临界值表中相应的值(Gs)的相对大小,如果Gi/Gs&gt;1,则最小值剔除,得到新数据,再进行新数据的下一轮循环比较;否则不进行剔除;方式B:如果尾数为1,则进行上侧的高值检验,首先找到最后的一个最大值,计算统计量Gi,其数值与国标《数据的统计处理和解释——正态样本离群值的判断和处理(GB‑T4883‑2008)》中的“G<sub>n</sub>”相同,比较Gi与临界值表中相应的值(Gs)的相对大小,如果Gi/Gs&gt;1,则最大值剔除,得到新数据,再进行新数据的下一轮循环比较;否则不进行剔除;这里的G'<sub>n</sub>和G<sub>n</sub>计算公式是不同的,具体参见GB‑T4883‑2008;方式C:如果尾数为0,则进行双侧检验,首先找到最小值和最大值,计算统计量Dmax和Dmin并比较二者大小,若Dmax/Dmin&gt;1,则按照步骤④中“方式B”进行下一步;否则按步骤④中“方式A”进行下一步,如果有数据被剔除,则再进行新一轮的比较和剔除;⑤整理数据结构,把新矩阵的元素顺序调为原始的顺序;如果初始向量是行向量,仍还原为行向量;⑥给出输出变量,包括新数据、剔除值以及剔除值的序号,如果原始数据符合异常值剔除条件,则得到剔除后的新数据,可对新数据继续进行其他相应处理;如果所有数据均不符合异常值剔除条件,则数据组不含异常值,可直接对原始数据继续进行其他相应处理;(3)、对多组数据异常值的批量循环剔除,方法是,按步骤(1)编制的程序,由以下步骤实现:①首先判断输入变量是否符合函数要求,输入变量除原始数据由数组向量变为矩阵外,显著水平、尾数的要求均同步骤(2),原始数据矩阵中单组数据最大平行测定的个数为100,但对组数没有限制,但应保证原始数据矩阵的“行”与“列”与设计程序时的规定一致,否则转置矩阵;②生成输出变量的空元胞数组矩阵,因不同数据组最终剔除的值的个数可能不同,因此未采用矩阵形式,而采用元胞数组的形式表示;③依次按步骤(2)对每组数据进行单组数据的格拉布斯异常值剔除,同时将生成的结果依次赋给上述元胞数组相应的矩阵;④给出输出信息,包括新数据最终生成的无离群值的元胞数组、剔除值元胞数组以及剔除值的序号元胞数组,从而得到最终的药学测试数据。
地址 450008 河南省郑州市金水区金水路1号