首页> 中国专利> 一种基于格拉布斯规则和矩阵实验室语言的药学测试数据中异常值的剔除方法

一种基于格拉布斯规则和矩阵实验室语言的药学测试数据中异常值的剔除方法

摘要

本发明涉及基于格拉布斯规则和矩阵实验室语言的药学测试数据中异常值的剔除方法,可有效解决药学中数据异常值的剔除和药学科研领域之外的适宜数据组的异常值处理的问题,方法是,首先编制程序,然后输入原始数据及相应函数,按照对单组数据的异常值的处理方法,首先判断输入的原始数据是否符合函数要求,若符合,再生成输出变量的空元胞数组矩阵后,依次对每组数据进行单组数据的格拉布斯异常值剔除,同时将生成的结果依次赋给上述元胞数组相应的矩阵,最后给出输出信息,实现对多组数据的批量循环剔除,本发明方法快速、准确,易操作,大大提高原始数据处理效率。

著录项

  • 公开/公告号CN102436542A

    专利类型发明专利

  • 公开/公告日2012-05-02

    原文格式PDF

  • 申请/专利权人 河南中医学院;

    申请/专利号CN201110283466.3

  • 申请日2011-09-22

  • 分类号

  • 代理机构郑州天阳专利事务所(普通合伙);

  • 代理人聂孟民

  • 地址 450008 河南省郑州市金水区金水路1号

  • 入库时间 2023-12-18 04:59:56

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2017-11-03

    未缴年费专利权终止 IPC(主分类):G06F19/00 授权公告日:20151104 终止日期:20160922 申请日:20110922

    专利权的终止

  • 2015-11-04

    授权

    授权

  • 2012-06-27

    实质审查的生效 IPC(主分类):G06F19/00 申请日:20110922

    实质审查的生效

  • 2012-05-02

    公开

    公开

说明书

技术领域

本发明涉及医药领域的一种基于格拉布斯规则和矩阵实验室语言的药学测试数据中异常值的剔除方法。

背景技术

在药学科学研究以及其他科研领域中,一个普遍存在的情况是,我们测定的一组或多组数据中存在一些异常值,那么这些数据中的异常值能否舍去?数学家已经给出了判断规则和检验标准,如格拉布斯检验、狄克逊检验等。然而,这些检验方法的实现,需要繁琐的计算步骤和过程,即“排序——指标计算——对比——查临界值表——对比——决定是否剔除——若剔除则进入下一轮新的指标计算——对比——查临界值表——……”,整个过程效率低下且易于出差错。在实际工作中,格拉布斯检验是应用较为普遍的方法之一,在计算机技术高度发达的今天,能否基于数学家预设的检验规则(如格拉布斯规则),通过一定的方法和程序实现批量、快速、准确、整套的异常值剔除?至今未见有清楚、完整,且可实施的方法的公开报导。

发明内容

针对上述情况,为克服现有技术之缺陷,本发明之目的就是提供一种基于格拉布斯规则和矩阵实验室语言的药学测试数据中异常值的剔除方法,可有效解决药学中数据异常值的剔除和药学科研领域之外的适宜数据组的异常值处理,以保证药学测试数据的准确、可靠的问题。

本发明解决的技术方案是,包括对单组数据的异常值循环剔除和对多组数据的批量循环剔除,前者是主体,后者包含前者,基于格拉布斯矩阵实验室语言,按照格拉布斯规则,通过微机和程序,经不断调试、修改和完善,可快速、有效实现对一组或多组数据的异常值循环剔除,步骤如下:

一、对单组数据的异常值循环剔除(名为Grubbs.m)

按照国标《数据的统计处理和解释——正态样本离群值的判断和处理(GB-T4883-2008)》的处理规则,通过微机程序,不区分检出水平和剔除水平,检出后直接剔除,剔除后不进行插值,每一个循环最多仅剔除1个,再对剔除后的数据(变量)进行下一轮检验,最后显示结果为多轮的累积结果,方法是:首先编制程序,然后输入原始数据及相应函数,其中函数的处理过程包括判断输入变量是否符合函数要求、统一数据结构、进行数据排序、根据不同的尾数分别进行循环比较和剔除、整理数据结构,给出新输出数据等。

二、对多组数据的批量循环剔除

按照对单组数据的异常值的处理方法,首先判断输入的原始数据是否符合函数要求,若符合,再生成输出变量的空元胞数组矩阵后,依次对每组数据进行单组数据的格拉布斯异常值剔除,同时将生成的结果依次赋给上述元胞数组相应的矩阵,最后给出输出信息,实现对多组数据的批量循环剔除。

本发明方法快速、准确,易操作,对于一组或多组测试数据,可在指定的显著水平下,以及指定是上侧、下侧还是双侧检验的前提下,快速、准确、批量地进行异常值的多轮循环剔除,并一次性给出剔除后的新数据、剔除的数据以及剔除数据的序号,可免除手动逐级、逐个、逐组进行剔除以及反复查对临界值表的繁琐和易错,大大提高原始数据处理效率,有效用于医药生产、研发及其他相关的数据测试与分析领域中,保证数据的准确可靠。

附图说明

图1为本发明的单组数据的异常值循环剔除工艺流程图。

图2为本发明的多组数据异常值的批量循环剔除工艺流程图。

具体实施方式

以下结合附图对本发明的具体实施方式作详细说明。

首先编制程序,然后再按工艺流程图进行操作,具体步骤是:

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)》:

Gtab=[ 1       0.9  0.95       0.975     0.99       0.995

    2    0     0     0     0     0

    3    1.148     1.153     1.155     1.155     1.155

    4    1.425     1.463     1.481     1.492     1.496

    5    1.602     1.672     1.715     1.749     1.764

    6    1.729     1.822     1.887     1.944     1.973

    7    1.828     1.938     2.020     2.097     2.139

    8    1.909     2.032     2.126     2.221     2.274

……略去90行

    99  3.014     3.204     3.380     3.597     3.750

    100       3.017     3.207     3.383     3.600     3.754];

临界值表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”),并比较Gi与临界值表中相应的值(Gs)的相对大小,如果Gi/Gs>1,则最小值剔除,得到新数据,再进行新数据的下一轮循环比较;否则不进行剔除。

如果尾数取1,则进行高值检验,首先找到最大值(最后一个),计算统计量Gi(计算公式参见国标《数据的统计处理和解释——正态样本离群值的判断和处理(GB-T4883-2008)》中的“Gn”),并比较Gi与临界值表中相应的值(Gs)的相对大小,如果Gi/Gs>1,则最大值剔除,得到新数据,再进行新数据的下一轮循环比较;否则不进行剔除。

如果尾数取0,则进行双侧检验,首先找到最小值和最大值,计算统计量Dmax(最大值减去均值)和Dmin(均值减去最小值)并比较二者大小,若Dmax/Dmin > 1,则按照上述“如果尾数取1,则进行高值检验,……”的方式进行下一步;否则按上述“如果尾数为-1,则进行低值检验,……”的方式进行下一步。如果有数据被剔除,则再进行新一轮的比较和剔除。

最后,再把新生成的Xnew的元素顺序调为原始的、无序的、向量的单列,将新矩阵中的检测后的数据仍按最初输入时的顺序显示,序号同步,将离群值编号数列index中为0的数值去掉,如果去掉后没有元素了,则删掉的离群值为空,即未删掉离群值,同时所删掉的离群值的编号也为空,显示“数据组不含溢出值”,返回;如果删掉为0的元素后还有元素,则对编号进行由小到大的排序,b=length(index),b是一共删掉的数据的个数,for c=1:b,c依次取1,2,……b,依次取值,循环进行,找到Xsort2的第一列序号中等于c的行号,则该行号所对应的Xsort2的第二列数据即为所删除的异常值,结束循环,转置矩阵,结束;

最后,如果p取1,即初始向量是行向量,则对新生成的矩阵进行转置,删除的异常值的矩阵也进行转置,删除的异常值的序号矩阵也同时进行转置。

2、对单组数据的异常值循环剔除,方法是,根据步骤1编制的程序,经微机进行如下步骤,如图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三个值之一的判断,若符合条件,则进入下一步,否则提示输入正确的尾数;

统一数据结构:如果原输入数据为列向量,则保持不变;若为行向量,则转置为列向量,例如,可将原来是1行20列的矩阵,变成20行1列的矩阵;

构建一个含有原始序号及原始测试数据的矩阵,并按原始数据由小到大的排序方式排序,同时原始序号随测试数据的顺序变化而变化,生成新的矩阵备用;

判断所输入的尾数值:

如果尾数是-1,则进行下侧的低值检验,首先找到第一个最小值,计算统计量Gi,其数值与国标《数据的统计处理和解释——正态样本离群值的判断和处理(GB-T4883-2008)》中的“G”相同,比较Gi与临界值表中相应的值(Gs)的相对大小,如果Gi/Gs>1,则最小值剔除,得到新数据,再进行新数据的下一轮循环比较;否则不进行剔除;

如果尾数是1,则进行上侧的高值检验,首先找到最后的一个最大值,计算统计量Gi,其数值与国标《数据的统计处理和解释——正态样本离群值的判断和处理(GB-T4883-2008)》中的“Gn”相同,比较Gi与临界值表中相应的值(Gs)的相对大小,如果Gi/Gs>1,则最大值剔除,得到新数据,再进行新数据的下一轮循环比较;否则不进行剔除;注意,这里的GGn计算公式是不同的,具体参见GB-T4883-2008。

如果尾数是0,则进行双侧检验,首先找到最小值和最大值,计算统计量Dmax和Dmin并比较二者大小,若Dmax/Dmin > 1,则按照步骤中尾数是1的方法进行下一步;否则按步骤中尾数是-1的方法进行下一步,如果有数据被剔除,则再进行新一轮的比较和剔除;

整理数据结构,把新矩阵的元素顺序调为原始的顺序;如果初始向量是行向量,仍还原为行向量;

⑥给出输出变量,包括新数据、剔除值以及剔除值的序号,如果原始数据符合异常值剔除条件,则得到剔除后的新数据,可对新数据继续进行其他相应处理;如果所有数据均不符合异常值剔除条件,则数据组不含异常值,可直接对原始数据继续进行其他相应处理。

3、对多组数据异常值的批量循环剔除,方法是,按步骤1编制的程序,按图2所示,由以下步骤实现:

①首先判断输入变量是否符合函数要求,输入变量除原始数据由数组向量变为矩阵外,显著水平、尾数的要求均同步骤2,原始数据矩阵中单组数据最大平行测定的个数为100,但对组数没有限制,但应保证原始数据矩阵的“行”与“列”与设计程序时的规定一致,否则转置矩阵;

②生成输出变量的空元胞数组矩阵,因不同数据组最终剔除的值的个数可能不同,因此未采用矩阵形式,而采用元胞数组的形式表示;

③依次按步骤2对每组数据进行单组数据的格拉布斯异常值剔除,同时将生成的结果依次赋给上述元胞数组相应的矩阵;

④给出输出信息,包括新数据最终生成的无离群值的元胞数组、剔除值元胞数组以及剔除值的序号元胞数组,从而得到最终的药学测试数据。

实施例1

对某一中药一定浓度的煎煮液,由20名健康志愿者按一定标准评价其苦度,得到20个苦度值(0.5、0.6、0.8、0.6、0.5、0.5、1.5、0.8、0.7、0.5、2.2、0.5、0.5、0.8、0.9、0.8、0.6、0.8、0.6、0.5),由于不同的人味觉存在差异,可能出现一些异常值,需要进行剔除。操作方法:

首先在矩阵实验室的命令窗口中输入原始数据:

[0.5       0.6  0.8  0.6  0.5  0.5  1.5  0.8  0.7  0.5  2.2  0.5  0.5  0.8  0.9  0.8  0.6  0.8  0.6  0.5];

由于人群中可能出现对苦味过度敏感的人,也有可能出现对苦味极不敏感的人,因此采用双侧检验(尾数值取0),显著水平取0.1;

输入按上述算法编好的程序命令,同时将尾数值、显著水平的数值输入,回车执行(保证相应的程序已保存在矩阵实验室相应的工作路径上);

结果输出:

新矩阵为:

[0.5000    0.6000    0.8000    0.6000    0.5000    0.5000    0.8000    0.7000    0.5000    0.5000    0.5000    0.8000    0.9000    0.8000    0.6000    0.8000    0.6000    0.5000]

删除的测试数据为:

[1.5000    2.2000]

删除的测试数据的原始序号为:

[7    11]

即剔除了原第7个数据(1.5)和第11个数据(2.2),即可得到某一浓度中药的最佳煎煮液。

实施例2

以对某十味中药一定浓度的煎煮液为例,由20名健康志愿者按一定标准评价其苦度,得到20×10个苦度值矩阵,采用双侧检验,显著水平取0.1,操作方法是:

首先用微机和步骤1编制的程序,在矩阵实验室的命令窗口中输入原始数据矩阵:

[0.6      0.5        0.5        0.7        0.7        1.9        0.7        4.0        1.5        1.3 

0.6       0.6        0.6        0.9        2.4        3.3        2.6        3.9        0.9        3.4 

0.5       0.5        0.8        0.8        0.9        2.0        1.3        4.0        1.3        2.0 

0.5       0.5        0.6        0.6        0.9        1.6        2.3        2.9        0.6        1.9 

0.6       0.5        0.5        0.5        1.8        3.0        1.7        3.7        0.5        4.5 

0.5       0.6        0.5        0.5        1.5        1.5        0.6        4.0        0.6        4.0 

1.3       1.8        1.5        1.2        2.5        3.1        3.0        4.4        2.9        5.0 

0.9       0.6        0.8        1.5        2.2        3.5        3.3        4.2        2.8        5.2 

1.5       0.6        0.7        1.5        2.4        3.5        2.5        3.5        2.5        4.5 

0.5       0.5        0.5        0.5        1.5        1.5        0.6        4.0        0.5        4.1 

0.6       0.8        2.2        2.6        2.5        3.2        3.0        4.3        0.6        4.0 

0.5       0.5        0.5        0.5        0.5        1.5        0.5        2.0        0.5        2.5 

0.5       0.5        0.5        1.5        0.8        1.5        0.5        3.5        0.5        4.0 

0.5       1.3        0.8        1.0        1.7        2.0        1.5        3.0        1.7        2.0 

1.2       0.8        0.9        1.1        1.7        3.5        2.1        4.5        2.3        4.3 

1.0       1.0        0.8        1.0        1.8        3.3        2.3        4.5        2.0        4.0 

0.8       0.8        0.6        0.8        1.6        3.2        1.8        4.5        2.0        4.2 

0.8       1.0        0.8        1.2        2.0        2.7        1.6        4.5        2.0        2.5 

0.6       0.6        0.6        1.0        2.0        3.5        2.6        4.0        2.2        4.0 

0.5       0.5        0.5        0.5        2.0        1.5        1.0        3.0        1.5        2.0];

采用双侧检验(尾数值取0),显著水平取0.1;

输入按上述算法编好的程序命令,同时将尾数值、显著水平的数值输入,回车执行。(请保证相应的程序已保存在矩阵实验室相应的工作路径上)

结果输出:

数据组不含溢出值!

数据组不含溢出值!

数据组不含溢出值!

数据组不含溢出值!

数据组不含溢出值!

数据组不含溢出值!

新矩阵为:

[20x1 double]    [18x1 double]    [18x1 double]    [19x1 double]    [20x1 double]    [20x1 double]    [20x1 double]    [19x1 double]    [20x1 double]    [20x1 double]

(注:[20x1 double]表示为20行 1列的双精度数据矩阵,余同。)

剔除值矩阵为:

[]   [2x1 double]   [2x1 double]   [2.6000]     []     []     []    [2]     []     []

剔除值的序号矩阵为:

[]    [2x1 double]    [2x1 double]    [11]     []     []     []    [12]     []     []

其中显示的6句“数据组不含溢出值!”,说明10组数据中有6组不含异常值。而第2、3、4、8组数据均存在异常值,在矩阵实验室中打开相应矩阵,即可得到相应的数据。

本发明在具体实施中,可在Windows运行环境中,基于矩阵实验室7.0版本及以上,将基于上述方法而编写的相应程序的M文件拷入矩阵实验室的工作路径。在选定显著水平以及确定是上侧、下侧还是双侧检验后,即可在矩阵实验室的命令窗口上输入原始待检验数据矩阵,然后运行相应命令即可,方便而可行,由上述可知,本发明对于一组或多组测试数据,可在指定的显著水平下,以及指定是上侧、下侧还是双侧检验的前提下,快速、准确、批量地进行异常值的多轮循环剔除,并一次性给出剔除后的新数据、剔除的数据以及剔除数据的序号,可免除手动逐级、逐个、逐组进行剔除以及反复查对临界值表的繁琐和易错,大大提高原始数据处理效率;可有效适用于药学科研领域之外的适宜数据组的异常值处理;可满足显著水平分别为0.01、0.05、0.1三种情况下的操作,可满足上侧检验、下侧检验、双侧检验三种情况下的操作,可满足单组平行数据100个及以内的异常值剔除操作。多组数据同样,但对组数一般情况下无限制,可对数据进行多轮循环异常值剔除,一轮最多剔除1个异常值,将剔除后的新数据进行第二轮剔除,以此类推,直到没有异常值为止。可一次性给出按原数据的顺序给出剔除异常值后的新数据、剔除的数据以及剔除数据的序号。对于单组数据的处理,对数据的横排或竖排无要求,处理后的结构与原结构一致。因此,在计算机技术高度发达的今天,该方法不但操作简便,而且可实现批量、快速、准确、整套的异常值剔除,为科学、准确地进行药学数据测试与分析提供了技术基础,是医药领域乃至数据处理与分析中的一大创新。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号