吵吵   2013-11-06  阅读:3,609

根据ISO15189对室内质控的要求,实验室应根据自己的实际情况通过实验确立质控控制范围和标准。更换质控品新批号时,应重新确立靶值。也就算是说在更换新批号的质控品的时候,我们需要测量20天的新质控品的数据,然后通过计算来得到新质控的均值和标准差。

然而,检测之后的数据的收集和处理就成为一个比较麻烦的事情。一个是收集问题,手抄虽然能够解决,但是耗费精力太大。二是计算问题。计算虽然涉及到均值和标准差等参数一般的excel就可以解决,但是对于计算离群点却没有太好的办法。

我们先聊聊数据收集的问题,吵吵总结了两种可行的方式:

一、手动上机,如编号60001这种不占用其它检验数据的流水号,然后仪器自动将数据发送到LIS中,我们在LIS系统中去查找和导出数据。该模式适合可以自行编号上机的仪器,如罗氏C501生化仪。

二、固定录入LIS系统中一条检验单,姓名输入如”level1“的固定格式,在LIS系统中,我们通过将仪器传过来的数据合并到该姓名的检验单下,之后在LIS系统中,通过姓名来导出数据。这种方式适合手工上机无法修改样本号的仪器,如奥林巴斯的AU5421等机型。

数据收集之后是计算问题,计算均值等不在话下,我们今天聊聊判断离群点的问题:

如何对疑似离群点进行判断?

采用D/R比值观察(Reed suggests the value 1/3 as a cut-off value)即1/3 rule.

一、将疑似离群点与其相邻点的差值D和数据全距R相除,即D/R≥1/3判为离群点,剔除离群点后须补上数据。

二、如有2个或以上疑似离群点,可将最小值进行处理,若均大于1/3,全剔除;若均小于1/3,全保留。 

实际上我们再来看D/R比值的逻辑,演化为算法就是一个递归函数,逻辑如下

计算极差->最大值(最小值)-第二大(第二小)值是否》=1/3极差->是则剔除离群群点,进入下一个循环,否则终止循环。

那么,其中又涉及到了一个问题,就是求最大值和第二大值的问题,最大值不在话下,第二大值呢?有两种思路:

1、先求最大值,然后拿最大值一个个去比,找到第二大值。这种思路看似清晰,但是涉及到问题就复杂了,如有相同的两个最大值时候怎么判断,就多了N个if了。

2、冒泡排序,将一个链表排序后,第二大值就不难找出了,冒泡排序的算法如下,delphi:

procedure BubbleSort(AList:TList);
var
  i,j:integer;
  flag:Boolean;
  db1,db2:PDouble;
  p:Pointer;
begin
  for i := 0 to AList.Count-1 do
  begin
    flag:=False;
    for j := i to AList.Count-2 do
    begin
      db1:=AList.Items[j];
      db2:=AList.Items[j+1];
      if db1^>db2^ then
      begin
        p:=AList.Items[J];
        AList.Items[J]:=AList.Items[j+1];
        AList.Items[j+1]:=p;
        flag:=True;
      end;

    end;
    if flag=False then Exit;

  end;
end;

有了求到最大值和第二大值的函数,接下来就是实现一个剔除利群点的递归函数了,这个大家有兴趣自己想想怎么搞吧。

附上程序截图:

qc-caculate

原本对于生化仪来说,换一次质控批号,就要折腾死人,累积和处理数据要花费一两天的时间,尤其是项目众多,质控水平也多的时候,但是用程序来解决,一两分钟的事情,否则,吵吵可不想用眼睛去判断离群值呢,要看瞎的。

吵吵微信朋友圈,请付款实名加入:

吵吵 吵吵

发表评论

电子邮件地址不会被公开。 必填项已用*标注