自动变量筛选:从单因素中选择进入多因素模型的变量——集大成工具包

本工具包集合了从单因素到多因素分析的自动变量筛选解决方案,包括逐步回归、最优子集、Lasso、岭回归、弹性网络等;

分析流程为:设置结局变量 -> 设置影响因素变量 -> 自动拆分哑变量 -> 单因素分析 -> 多重共线性诊断 -> 离群值处理 -> 变量筛选,全自动一气呵成完成分析;

本工具属于”影响因素分析研究”,也就是因果推断分析,而不属于预测研究,因此本工具不纳入机器学习的变量筛选方法。机器学习不适合因果推断研究,故有关预测研究的变量筛选方法,会重新建设另一个APP解决。

主要特点:

功能示例:

基础知识

稍微懂点统计的同学可能常听说,做经典的影响因素研究,一般先做单因素分析,然后做多因素分析。单因素分析之后,并不是全部进入多因素,而是要筛选一部分变量放入多因素研究。到底放哪些变量进去呢,真是头疼,对于临床医生来说实在太棘手了。

经过调研得知,很多医生,上来就做个单因素分析,然后单因素 P<0.05 或者 P<0.1的变量,放进多因素模型里。好多人都是这么操作,要说错嘛,也没大错,但这种方法真的极其不科学,被批判了二十年了,过时了,不能再用了,放进论文里可以说太丢人了。尽管有些顶刊上的论文还在沿用这种方式,但属于个例,优秀的研究者或审稿人不意味着就是一个合格的统计师。

那么,为什么要做变量筛选?

其实,从科学上来讲,本来是不需要做变量筛选的,有多少因素都放进去,不管有没有统计学意义,都应该放进去。

之所以要减少掉一些变量进入多因素,是回归模型的弊端决定的,多因素回归,是一些古老和经典的数学模型,当变量多了,多重共线性出现了,过拟合出现了,复杂的交互作用出现了,往往模型就不可靠了,回归系数就不能反映客观事实了,这是其数学上的局限性。

现在机器学习就好多了,不管变量有多少,变量之间的关系多复杂,交互作用有多复杂,甚至因是果的一部分,果是因的一部分,都不用管,统统丢进去,机器学习都能处理,就是这么牛,这是回归模型望尘莫及的。但是,机器学习用于预测可以,用于因果推断,影响因素研究,并不合适,还是得用传统的回归模型。

因此,这种情况下,我们不得不用传统回归模型;我们不是想做变量筛选,是不得不做筛选。道理就这么简单。

多因素模型进行变量筛选的方法一般可以分为两类:

  • 基于统计学的方法:包括逐步回归,最优子集法,Lasso等。
  • 基于机器学习的方法:包括决策树,随机森林,支持向量机等。

这两类方法都可以评估变量的重要性,并筛选出对模型预测有显著贡献的变量。

在影响因素研究中,我们不用机器学习,用传统回归,因此本软件内置基于统计学的筛选方法:

  • 正向选择:从零模型开始,根据变量的统计学显著性添加变量。

  • 后向消除:从包含所有变量的完整模型开始,在每次迭代中删除最不显著的变量。

  • 逐步选择:正向选择和后向消除的结合,变量可在过程中添加和删除。

  • 岭回归 (Ridge):一种缩减方法,将惩罚项添加到线性回归模型中以防止过拟合。

  • Lasso 回归:一种缩减方法,将L1惩罚项添加到线性回归模型中,同时进行变量选择和缩减。

  • 弹性网 (Elastic net):一种混合方法,结合了岭回归和套索惩罚项,允许缩减和变量选择的结合。

  • 最优子集:一种暴力方法,穷举所有变量组合,并根据一些标准,如AIC或BIC,选择最佳组合。

在这里,为了减轻临床医生的负担,我们推荐:

  1. 放弃传统的 0.1 进 0.1 出, 或 0.1进 0.05 出的逐步回归理念,什么年代了,要改用AIC或BIC等来评价拟合优度以选择变量。

  2. 优选最佳子集法(Best Subsets)筛选变量。最佳子集法,简单粗暴而美丽。老一代统计学家想用但用不了,因为算力不够,随着变量数增多,变量组合种类指数上升。但现在计算机算力了得,因此不用想其他,就让计算机暴力穷举,算出最佳变量组合即可。可以选择所有变量组合中AIC最小的模型。

  3. Elastic net或Lasso。当多重共线性较大,通过最佳子集法也没解决共线性时,这里我们推荐用Elastic net 法,当然,Lasso也可以。

  4. 当变量太多,最佳子集法也搞不定时,退而求其次,采用逐步回归stepAIC法,这里的逐步回归不是指P值 0.1 进 0.1出那种,是逐步筛选AIC值最小的模型。

说了这么多,如果你还是蒙圈的,那么再简化一下,两个原则:

  1. 无脑选Elastic net法,大部分问题都能解决。但本工具提供的Elastic net法完全将筛选过程交给了电脑,电脑选出来哪些变量你只能用,且不能筛选交互作用。
  2. 如果需要根据临床约定成俗或根据科研经验指定一些变量,如性别年龄等,必须固定纳入模型,不允许剔除;然后剩下的变量让电脑筛选加进模型,那我们的工具中最佳子集法和逐步回归法都支持这个功能。

交互作用的筛选,我们将在下一个版本专门开设功能模块着重解决。

下面以Logistic回归为例,介绍一下如何使用:

准备数据

首先务必按照下面的格式准备数据(网站上可下载,下载后在此基础上修改):

下载csv样例数据(右击另存为)

打开如下图:

本样例数据的规则:

  1. 一个患者一行(这是准备数据最重要的前提)。

  2. 每个患者准备两大类数据,影响因素变量和结局变量,影响因素和结局分别都可以有多个变量。

    如图所示,hospital, treatment, age, age2, sex, obstruct, prfor, adhear, differ, extent 为影响因素(自变量),而blood, effect, status, time, occurrence在本例中是结局变量。

  3. 影响因素变量有两种,连续性变量(值是连续数据,它可以在变量值所属区间内任意进行取值,如年龄[岁]、血糖值、人的身高、智商等)以及分类变量(是说明事物类别的一个名称,其取值是分类数据。如”性别”就是一个分类变量,其变量值为”男”或”女”;“行业”也是一个分类变量,其变量值可以为”零售业”、“旅游业”、“汽车制造 业”等),在本例中 age是连续性变量(numeric), 其他的是分类变量(factor)。age单位为”岁”时为连续变量,而age2为年龄段分组,这时候为分类变量。

    以上概念很重要,后面有一个页面专门设置连续变量和分类变量。

  4. 结局变量在本工具中分为几类:

    • 连续型结局变量

      如本例中的blood(某血液检测指标)

    • 二分类结局变量

      如本例中的effect(疗效)为二分类变量(Good,Bad)

    • 生存型结局变量

      需要用两个变量组合来表示,如本例中的status和time。

      status代表患者在研究结束时的状态,在本工具中只能取0和1两个数字,不要用字符文本,否则会出错。0 代表没观察到事件发生(如没死或者失访),1 代表观察到了事件发生(如已经死亡且录入了死亡日期)。

      time代表从开始日期(开始日期的定义由你的研究目的决定,如随机对照研究往往取随机化入组的那一天为开始日期,而观察性研究可以取首次诊断日期或首次治疗日期等等根据研究目的而定)到结局日期的时间差。当status=1时,结局日期为发生事件(如死亡)的日期,当status=0时,结局日期为最后一次活着的日期(如研究结束日,或随后一次随访日)。

      总之,time是一个数值型变量,您需要填入患者从开始到死亡或者随后一次随访时,一共活着的天数。如time为56,status为1时代表患者从开始到死亡活了56天;当time为56,status为0时代表患者没观察到死亡,从开始到最后一次随访,活了56天。

      准备数据时,time填入一个非负的整数,status填入0或1,time和status都不能为空,每个患者都必须填入数字。time或status不确定(缺失)时,该患者最好不要放入本数据库。

    • 计数型结局变量

      计数型的结局变量为一个非负的整数,如本例中occurrence,是急性发作次数,无法取负数,也不可能取小数。

    • 分数型结局变量

      当结局变量为一个分数,如发病率、患病率、受精率等,结局包含一个分子和一个分母。如要研究全国各地疾病患病率的影响因素时,按照每个地区一行来准备数据,分子和分母设置成两个变量(列),如分子为患病人数,分母为地区人口数。

      准备数据的规则是:分子和分母都是非负整数,不允许填入负数,也不允许填入小数,分子的数值不能大于分母。

基础设置

选择结局变量

机器人根据结局变量的类型来选择分析方法。二分类变量,系统会选择logistic回归,如果是连续性变量,系统会选择一般线性回归。如果是生存变量Time和Status的组合,系统会采用Cox回归。如果是计次计数变量,系统会选择Poisson回归。

选择影响因素变量

根据提示选择结局变量和影响因素变量。这里要注意的是,如果上传的数据Excel文件里把连续性变量设置成了字符型,如年龄设置成了字符型,需要在前面”选择字段”功能里改回成numeric,如果按照分类变量放进影响因素分析,会因为分类巨多把服务器卡死。同理,如果把ID号也作为分类变量放进影响因素,服务器也容易卡顿死机。

另外,在分类变量里,有些亚组人数很少,最好把它和相邻亚组合并之后再传上来分析,亚组人数太少容易让可信区间特别宽,影响排版。当然,后续我们也会增加一个合并亚组的小工具。

进行单因素分析

先点击按钮做一下单因素分析看看。这一步能看出很多数据问题,出错概率还是比较大的,尤其是Logistic回归。Linear和Cox相对不容易出问题。

报错,或者出现OR/HR值极大或极小,小到变成0,大到变成∞,或长度超出屏幕范围,都是常见的。基本都是数据原因造成的。请参照网站上的提示做数据整改。

一定要在单因素分析阶段,就把数据问题解决掉,再代入下一步。

自变量相关性

自变量相关系数矩阵,看一下有个印象就行,不用带入论文中。

多重共线性诊断

本工具自动用kappa值和VIF值来判断多重共线性,选一种就行。

图像底部显示 Low, 代表共线性很弱。

如果多重共线性比较强,后面可以着重考虑用弹性网络来筛选变量以消除共线性。

剔除离群值

这里内置了一个剔除离群值功能,一般情况不需要,可以略过。

离群值,这里用Cook’s distance来诊断,Cook’s distance大于n/4(虚线上方)的那些点,考虑为异常的离群值,这时候正确的做法是考察一下这些点的数据,是否真实,是否出错了。如果有错就纠正。

不过事实上,医生没有时间和精力去追溯原始数据,再去考核数据的真实性。

这里可以考虑把离群值都删了。在本页的末尾,提供了删除离群值的功能。

一般情况下慎用。删除离群值后,往往模型拟合优度提升了,变量也变得更有统计学意义了。但往往可能带来偏倚。

哎,做科研的,花了几年时间,最终落得个阴性结果,毕不了业。想尽一切办法,找到两个稍微有点意义的,结果P=0.06,想死的心都有了。为了同情大家,给大家留了这个功能,实在不行就把离群值删了,就有统计学意义了。出去别提是鑫哥说的。

多因素变量筛选

逐步回归

逐步回归是一种筛选多因素变量的方法,其目的是从所有的因素变量中选择最重要的一些变量,并逐步地将其构建到回归模型中。

逐步回归过程中,通过不断地添加或删除因素变量来评估其对模型结果的影响。删除因素变量可以使模型更简单,添加因素变量可以提高模型的准确性。

逐步回归可以使用不同的筛选算法,例如,基于 p 值的算法、基于比例的算法和基于模型评估的算法。

本工具的逐步回归时基于模型AIC的算法,选出AIC最小时的变量组合。

逐步回归有一些优点,例如,它可以简化复杂的模型,并评估单个因素变量对模型的影响。但它也有一些缺点,例如,它可能会产生过拟合,并且需要在每次添加或删除因素变量时进行多次评估,因此可能比较时间复杂。因此,在使用逐步回归时,应该仔细考虑数据集的特征和应用环境。

这里提供Backward, forward, 和both法:

最优子集法

最优子集法是一种筛选多因素变量的方法,其目的是从所有的因素变量中选择最重要的一些变量,并将其作为模型的自变量。

最优子集法使用算法在所有可能的因素变量子集中评估模型的性能,选择最佳的子集。评估模型性能的方法通常包括 R 平方、误差平方和其他模型评估指标。

本工具提供的评价指标为:AIC、BIC和AICc, 这里不推荐用R平方。本工具的原理就是让计算机穷举出所有的变量组合,从中选出AIC或BIC最小的模型。

最优子集法的优点是可以自动识别最重要的因素变量,并可以在一次评估中选择多个因素变量。缺点是可能产生过拟合,因此对数据特征和应用环境的要求较高。

此外,最优子集法在搜索空间很大的情况下可能会非常耗时,因此对于大数据集可能不太适用。因此,在使用最优子集法时,应该仔细考虑数据集的特征和应用环境。

可以看到,软件列出了Top 50的模型,根据AIC从小到大排列(AIC越小模型越优),这里可以简单的下拉选择第1个模型进行后续的多因素分析,当然也可以在排名前列的几个模型中(AIC相差不大),自由选择一个变量组合符合实际情况的模型进行下一步分析。

Lasso、Ridge、Elastic net

Lasso和弹性网络可以自动筛选变量,Ridge不能自动,只能由你自行判断,剔除回归系数较小的变量。

在生成回归系数的过程中,有两个选项,Lambda.min和Lambda.1se, 这两个选项,筛选出来的变量数不同,一个多,一个少。可以根据自己的情况选择。也可以回过头去用筛选出来变量,再测试一下多重共线性,在多重共线性较弱的情况下,选变量多的模型也是可以接受的。

本模块中,Lasso只是用来筛选变量,并不是用来最终做影响因素建模。筛选出来的变量最终还是用回到多因素Lienar/Logistic/Cox/Poisson中。不要直接使用Lasso的回归系数来做影响因素分析。这里Lasso充当了一个工具人的角色。

变量筛选完成后,怎么办

筛选好之后,会自动完成单因素多因素分析的表格,直接下载放入论文即可。

也可以把筛选出来的变量记下来,在本软件的其他模块,例如”影响因素研究” 分析模块中使用,或者在其他回归分析模型中使用。