发明内容
本发明提供一种统计分析报表快速生成方法,快速准确的生成TFL。
为解决上述技术问题,本发明的技术方案如下:
一种统计分析报表快速生成方法,包括以下步骤:
S1:获取ADaM数据集以及预定义文件;
S2:根据所述ADaM数据集的数据特点以及预定义文件的要求,分别搭建上表头树状图以及左侧表头树状图;
S3:解析所述上表头树状图以及左侧表头树状图,生成SAS代码;
S4:根据所述SAS代码生成统计分析报表。
优选地,步骤S2中搭建上表头树状图以及左侧表头树状图,具体为:
树状图中由n个有限节点组成一个具有层次关系的集合,每个节点有零个或者多个子节点,每个子节点可以分为多个不相交的子树,每一个节点代表一个变量,而且每个节点具有自己的属性表,根据预定义文件,为每个节点设置对应的属性,同时在树状图中还设置有数据集节点,表示该统计分析报表关联的数据集。
优选地,步骤S3中解析所述上表头树状图以及左侧表头树状图,生成SAS代码,具体为:
S3.1:根据对树状图结构进行分析,找出该统计分析报表关联的数据集,并对该数据集进行预处理;
S3.2:基于多叉树的前序遍历算法,得到左侧表头树状图的全部路径,所述左侧表头树状图的全部路径包含所述上表头树状图中的节点;
S3.3:根据每条路径中各节点属性表中设置的节点属性,转化为对应的SAS代码。
优选地,步骤S3.1中对该数据集进行预处理,具体为:
对数据集进行过滤:设置过滤条件在数据集节点的属性表中,当检测到数据集节点的属性表中的过滤条件时,将该过滤条件转化为对应的SAS代码,并置于对应的DATA步中;
根据树状图结构以及对应的属性表,分析得到该统计分析报表中涉及到的所有变量,并把这些变量在SAS的DATA步中保存下来。
优选地,步骤S4中根据所述SAS代码生成统计分析报表,具体为:
S4.1:根据SAS代码得到每条路径的数据结果;
S4.2:将所有路径输出的数据进行合并;
S4.3:在路径末端节点的属性表中设置统计量属性,根据设置的统计量属性计算具体的统计量;
S4.4:输出目标统计分析报表的SAS数据集,并根据节点在路径中的位置确定对应取值在表格中的缩进。
优选地,还包括步骤S5:
收集大量统计分析报表进行分析聚类,将相似类型的统计分析报表聚类在一起;
根据聚类在一起的统计分析报表涉及到的变量,以及这些变量可能的命名,归纳构建规则簇,并将树状图中的属性设置为规则簇中设置的占位符;
运行步骤S2至S4时,当检测到节点属性表中存在占位符时,通过占位符关联的规则簇,自动从ADaM数据集中分析出对应的变量并替换该占位符,当全部节点替换完成之后,得到自适应ADaM数据的统计分析报表。
优选地,所述规则簇支持name_regex、label_regex和label_inv_regex,其中,name_regex表示该条规则是针对数据集变量的name做匹配,label_regex表示该条规则是针对数据集变量的label做匹配,label_inv_regex表示该条规则是针对数据集中不符合规则的变量的label做匹配。
优选地,当占位符关联的规则簇无法在ADaM数据集找到对应的变量时,有以下三种处理方式:
1)该变量必须出现在该统计分析报表中,且该统计分析报表是需要完成的,此时,令节点属性表中的占位符不做任何更改,当检测到有占位符未被替换时,在对应的节点上给出错误提示,根据实际情况人工替换掉对应的节点;
2)当该变量不存在时,且该统计分析报表不需要生成,当发现有该类型的节点时,则会自动停止该统计分析报表的构建,并跳到下一个统计分析报表的自动构建中;
3)当有些变量不存在时,且该统计分析报表只是不需要当前分支,而其他分支则需要保留,此时需要去掉其所在的分支。
优选地,所述去掉其所在的分支,具体为:
确定节点所在的路径p,并找出该路径上位于该节点之前的不包含数据集节点的节点;
反转该路径,遍历该反转路径,找到第一个节点使其父节点包含有多个子节点,并将找到的节点从树状图结构中删除。
优选地,还包括步骤S6:当树状图的结构需要根据变量的取值进行调整时,具体调整方式为:
定义插入节点,所述插入节点用来标记需要动态构建树状图,所述插入节点存在对应的属性表,属性表里记录变量寻找过程中需要用到的先验信息,包括占位符以及对应的规则簇;
在自动构建统计分析报表时,当检测到插入节点后,取出其占位符以及对应的规则簇,利用步骤S5寻找ADaM数据集中对应的变量,当该变量不存在时,在树状图中直接删除该插入节点;当找到对应的变量时,加载ADaM数据集中该变量的全部取值并去重后,根据所述全部取值构建一颗子树,子树的每个节点由该变量的取值衍生而来;
将构建的子树插入到插入节点所在的位置。
与现有技术相比,本发明技术方案的有益效果是:
根据不同的ADaM以及Shell文件,本发明可以快速高效的生成TFL。首先本发明通过把TFL生成过程抽象成树状图的构建,可以让临床统计程序员非常方便直观的感知TFL的生成过程,同时当自动生成算法生成的TFL与实际情况有偏差时,程序员通过看图可以快速定位到错误的位置,降低了程序员调试程序的时间,提高了工作效率。同时通过简单的树状图构建就可以生成TFL,这极大的降低了对临床统计程序员编程经验的要求,而且也减少了因为冗余编程带来的人力成本开销。其次本发明通过构建通用化的TFL模板,提高了TFL在不同项目间被复用的能力,加快了项目的开发进度。最后本发明通过设计的自动裁剪算法以及自动加枝算法,可以做到对不同的ADaM以及Shell文件的自适应,减少了统计程序员熟悉数据的时间,加快了开发效率。因此本发明在TFL的生成场景中具有非常良好的应用前景与商业价值。
具体实施方式
附图仅用于示例性说明,不能理解为对本专利的限制;
为了更好说明本实施例,附图某些部件会有省略、放大或缩小,并不代表实际产品的尺寸;
对于本领域技术人员来说,附图中某些公知结构及其说明可能省略是可以理解的。
下面结合附图和实施例对本发明的技术方案做进一步的说明。
实施例1
本实施例提供一种统计分析报表快速生成方法,如图1所示,包括以下步骤:
S1:获取ADaM数据集以及预定义文件;
S2:根据所述ADaM数据集的数据特点以及预定义文件的要求,分别搭建上表头树状图以及左侧表头树状图;
S3:解析所述上表头树状图以及左侧表头树状图,生成SAS代码;
S4:根据所述SAS代码生成统计分析报表。
在TFL中的绝大多数Table和Listing类型的表格,都具有明显的分层级列出变量及统计量的特点,如图2和图3所示。
本实施例中称呼位于表格顶部的表头为“上表头”,位于表格左侧的表格侧边栏为“左表头”,上表头与左表头通常由TFL的预定义文件来定义,统计程序员在拿到预定义文件后,需要通过编程,将ADaM数据处理成预定义文件描述的格式,并输出成rtf格式的报告文件。
本实施例通过使用树状结构来描述表格的这种分层级统计的结构,使得表格的数据结构能够更为直观的呈现出来。
实施例2
本实施例在实施例1的基础上,继续公开以下内容:
步骤S2中搭建上表头树状图以及左侧表头树状图,具体为:
树状图是一种数据结构,在本实施例中,树状图中由n(n>= 1)个有限节点组成一个具有层次关系的集合,每个节点有零个或者多个子节点,每个子节点可以分为多个不相交的子树,TFL的生成过程可以抽象成对两颗树状图的构建,其中每一个节点代表一个变量,而且每个节点具有自己的属性表,根据预定义文件,为每个节点设置对应的属性,同时在树状图中还设置有数据集节点,表示该统计分析报表关联的数据集,其中上表头选择的变量是对左侧表头所选变量的进一步分类,因此解析算法需要同时考虑两个表头设置的变量及其属性。临床统计程序员根据Shell的要求和ADaM数据的特点,选择正确的变量放在树状图中合适的位置,并设置好相应的属性。
上表头可以用一颗树状图表示,用于对上表头数据的定义,比如需要计算考虑在治疗组别(TRTAN)的影响下,标准毒性等级(AETOXGR)的统计信息,那上表头的节点就可以设置为治疗组别,本算法会根据治疗组别的取值,自动生成上表头的数据信息。左侧表头也可以用一颗树状图表示,用于对左侧表头数据的定义,比如需要计算标准毒性等级的统计信息,但是需要分别先按照SOC和AETERM进行分类,那么就可以构建一颗树,分别从SOC和AETERM出发,子节点都是标准毒性等级的树状图,示意图如图4所示,其中ADAE节点表示该TFL关联的是ADAE这个数据集,数据集节点是所有TFL中必须提前指定的节点。用户将相应的节点摆在树状图中对应的位置,即可以快速的生成一个初始的TFL TABLE,然后用户根据Shell文件的要求,比如需要计算标准毒性等级的均值和方差,那么在标准毒性等级这个变量的属性表里,设置对应的统计量即可,设置完成之后,用户就可以得到一个符合Shell规定的TFL TABLE。
步骤S3中解析所述上表头树状图以及左侧表头树状图,生成SAS代码,具体为:
S3.1:根据对树状图结构进行分析,找出该统计分析报表关联的数据集,并对该数据集进行预处理;
S3.2:基于多叉树的前序遍历算法,得到左侧表头树状图的全部路径,因为上表头选择的变量是对左侧表头所选变量的进一步分类,因此所述左侧表头树状图的全部路径包含所述上表头树状图中的节点;
如图4所示,得到的全部路径为:a. [ADAE, TRTAN, SOC, AETOXGR], b. [ADAE,TRTAN, AETERM, AETOXGR],其中,TRTAN表示图4中的治疗组别,SOC表示图4中的系统器官分类,AETOXGR表示图4中的标准毒性等级,AETERM表示图4中的不良事件报告词,同时图4中的治疗为Treatment,无效对照剂为Placebo,感染和侵扰为Infections andinfestations,调查为Investigations,体重增加为WEIGHT GAIN,发烧为FEVER,此时算法会根据每条路径中各节点属性表中设置的节点属性(如连续变量还是分类变量、统计量、最大值、最小值等),转化为对应的SAS代码。其转换核心SAS代码如图6所示(以路径a举例);
S3.3:根据每条路径中各节点属性表中设置的节点属性,转化为对应的SAS代码。
步骤S3.1中对该数据集进行预处理,具体为:
对数据集进行过滤:设置过滤条件在数据集节点的属性表中,当检测到数据集节点的属性表中的过滤条件时,将该过滤条件转化为对应的SAS代码,并置于对应的DATA步中;
根据树状图结构以及对应的属性表,分析得到该统计分析报表中涉及到的所有变量,并把这些变量在SAS的DATA步中保存下来。
在本实施例中,如当前TFL只考虑安全数据集,那么就可以将过滤条件SAFFL =‘Y’设置在数据集的属性表中,算法检测到该属性时,会将该规则转化为对应的SAS代码,并置于对应的DATA步中。其次算法会根据树状图结构以及对应的属性,分析出在该TFL中涉及到的所有变量,并把这些变量在SAS的DATA步中keep下来,这样可以去掉数据集中不相关的变量,提高SAS运行效率。根据图4,其核心SAS代码生成示意图如图5所示。
步骤S4中根据所述SAS代码生成统计分析报表,具体为:
S4.1:根据SAS代码得到每条路径的数据结果;
S4.2:将所有路径输出的数据进行合并;
S4.3:在路径末端节点的属性表中设置统计量属性,根据设置的统计量属性计算具体的统计量;
S4.4:输出目标统计分析报表的SAS数据集,并根据节点在路径中的位置确定对应取值在表格中的缩进。
在图3中,统计量属性设置在AETOXGR的属性表中,计算完统计量之后,就可以输出目标TFL SAS数据集了,这一步主要是根据节点在路径中的位置确定对应取值在表格中的缩进,比如路径b中,AETERM变量属于第二行第一个节点,那么其缩进为0,而AETOXGR属于第二行第二个节点,那么其缩进为1,以此类推。其转换核心SAS代码如图7所示。
经过上述步骤,用户可以构建出一个完整的TFL,当发现TFL结果不对,或者需要调整上表头或者左侧表头时,只需要替换或者添加对应的变量节点以及设置正确的属性,再次运行算法即可。
实施例3
本实施例在实施例1和实施例2的基础上,继续公开以下内容:
虽然通过对树状图的操作,可以极大减少临床统计程序员的代码量,但也还是需要程序员对TFL表格理解比较深入,而且对于相似的项目,TFL的复用成本比较高,程序员需要复制之前的TFL,并手动修改对应的节点与属性。因此本发明在以上操作的基础上进行了进一步的改进。
首先虽然申办方提供的Shell文件不同,但是对于大部分TFL如AE、LB、DM等数据集构建的TFL在结构上是大体类似的, 这就为构建通用化模板提供了可能。其次针对不同的ADaM数据集,其不同点主要体现在以下三点:
不同点1:变量名字不同,但是存在某一个变量和该变量的取值是一样的。比如SOC这个变量,有些项目中被命名为AESOC,有些是AEBODSYS,再比如ARELFL这个变量,有些项目会用RELGR1表示,有些会用AREL表示;
不同点2:变量完全不存在。当出现这种情况时,那就说明当前项目生成的TFL中不需要考虑这种变量。
不同点3:树状图的结构需要根据某个变量的取值调整,比如A变量有三种取值,那么树状图就应该有三个分支,如果A有五种取值,那么对应的树状图就应该有五个分支。
综合以上规律,本实施例可以构建一系列通用的TFL模板,通过设计自适应算法,自动分析出ADaM数据集的结构和特点,从而生成适用于该项目的TFL。本实施例优化包含以下三点:1、通用化模板构建;2、自动裁剪算法;3、自动加枝算法。
通用化模板构建包括步骤S5:
收集大量统计分析报表进行分析聚类,将相似类型的统计分析报表聚类在一起;
根据聚类在一起的统计分析报表涉及到的变量,以及这些变量可能的命名,归纳构建规则簇,并将树状图中的属性设置为规则簇中设置的占位符;
运行步骤S2至S4时,当检测到节点属性表中存在占位符时,通过占位符关联的规则簇,自动从ADaM数据集中分析出对应的变量并替换该占位符,当全部节点替换完成之后,得到自适应ADaM数据的统计分析报表。
通用化模板构建主要是解决不同点1,也就是变量名不同的情况。在此阶段不需要考虑不同点2和3,因为此时无法确定哪些变量需要舍弃或者增加树状图分支。
在本实施例中,按照规则簇从前往后在ADaM的数据集中寻找符合条件的变量。比如SOC这个变量,它出现的名字可能是AESOC和AEBODSYS,那么对应的规则簇如图8所示,aesoc_var是占位符,用于在模板中占位。集合中的name_regex表示该条规则是针对数据集变量的name做匹配,除了支持name_regex,同时还支持label_regex(针对数据集变量的label做匹配)以及label_inv_regex(针对数据集中不符合规则的变量的label做匹配)。type_filter是对变量类型做过滤。
构建好规则簇之后,就可以搭建TFL树状图,TFL树状图采用规则簇中的占位符作为节点。
在上述改进中,无法解决不同点2遇到的问题。当占位符关联的规则簇无法在ADaM数据中找到对应的变量时,一般有三种处理方式:
1)该变量必须出现在该统计分析报表中,且该统计分析报表是需要完成的,此时,令节点属性表中的占位符不做任何更改,当检测到有占位符未被替换时,在对应的节点上给出错误提示,根据实际情况人工替换掉对应的节点;
2)当该变量不存在时,且该统计分析报表不需要生成,当发现有该类型的节点时,则会自动停止该统计分析报表的构建,并跳到下一个统计分析报表的自动构建中;
3)当有些变量不存在时,且该统计分析报表只是不需要当前分支,而其他分支则需要保留,此时需要去掉其所在的分支。
如图9所示,当aeterm_var不存在时,此时需要去掉其所在的分支。
针对处理方式3),提出了自动裁剪算法,算法逻辑如下:
确定节点所在的路径p,并找出该路径上位于该节点之前的不包含数据集节点的节点,如图9所示,该路径为p = [phase_var, aeacn_var, aeterm_var];
反转该路径得到p_inv = [aeterm_var, aeacn_var, phase_var],遍历该反转路径p_inv,找到第一个节点使其父节点包含有多个子节点,并将找到的节点从树状图结构中删除,如图9中,该节点是aeacn_var,该节点的父节点phase_var包含两个子节点,因此将phase_var的子结点aeacn_var从树状图结构中删掉即可。
不同点3需要根据ADaM数据中某变量的具体取值动态构建树状图,因此上述改进都无法解决不同点3的问题。针对不同点3,设计了自动加枝算法,算法逻辑如下:
还包括步骤S6:当树状图的结构需要根据变量的取值进行调整时,具体调整方式为:
定义插入节点,所述插入节点用来标记需要动态构建树状图,方便算法去寻找对应的变量;所述插入节点存在对应的属性表,属性表里记录变量寻找过程中需要用到的先验信息,包括占位符以及对应的规则簇,比如该插入节点需要去寻找aeacn及其近似变量,那么在属性表中,就可以设置对应的aeacn_var占位符,以及对应的规则簇;
在自动构建统计分析报表时,当检测到插入节点后,取出其占位符以及对应的规则簇,利用步骤S5寻找ADaM数据集中对应的变量,当该变量不存在时,在树状图中直接删除该插入节点;当找到对应的变量时,加载ADaM数据集中该变量的全部取值并去重后,根据所述全部取值构建一颗子树,子树的每个节点由该变量的取值衍生而来;
将构建的子树插入到插入节点所在的位置,此时就完成了TFL生成过程中的自动加枝。
改进后的TFL生成流程如图10所示。
相同或相似的标号对应相同或相似的部件;
附图中描述位置关系的用语仅用于示例性说明,不能理解为对本专利的限制;
显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明权利要求的保护范围之内。