预测模型研究利器-列线图(Logistic回归)
在临床中,预测模型十分重要。正如第一节(医生必备技能,万字长文让你明白临床模型研究应该如何做)所阐明的,如果我们能提前预测病人的病情,很多时候我们可能会做出完全不同的临床决定。比如,对于肝癌患者,如果能提前预测是否有微血管浸润,可能有助于外科医生在标准切除和扩大切除之间做出选择。术前新辅助放疗和化疗是T1-4 N+中低位直肠癌的标准治疗方法。然而,在临床实践中发现,根据术前影像学检查判断淋巴结状态不够准确,假阳性或假阴性的比例很高。那么我们是否有可能在放疗和化疗前根据已知的特征准确地预测患者的淋巴结状况?如果我们能够建立这样的预测模型,我们就可以更准确地做出临床决策,避免因误判而导致的不正确决策。越来越多的人开始意识到这个问题的重要性。目前,很多人已经付出了巨大的努力来构建预测模型或改进现有的预测工具,在这其中,Nomogram的构造是当前最热门的研究方向之一。
下面,我们再来说说Logistic回归。什么时候选择Logistic回归来建立预测模型与建立的临床结果有关。如果结果是二分类变量、无序分类变量或有序变量(总而言之就是分类变量),我们可以选择Logistic回归来构建模型。无序Logistic回归和有序Logistic回归一般应用于无序、多分类或有序变量结果,其结果难以解释。因此,我们通常将无序多分类或有序的变量转换为二分类变量,并使用二分Logistic回归来构建模型。上述“肝癌是否有微血管浸润”和“直肠癌前淋巴结转移复发”均属于二分法结果。二分Logistic回归最常用于构建、评估和验证预测模型。
自变量的筛选原则与第2节(【临床研究】一个你无法逃避的问题:多元回归分析中的变量筛选)描述的原则是一致的,另外需要考虑两点:一方面要权衡模型包含的样本量和自变量个数;另一方面还要权衡模型的准确性和使用模型的便捷性,最终确定进入预测模型的自变量个数。
在此次教程中,我们将用两个具体的案例来介绍用R语言构建Logistic回归预测模型并绘制Nomogram的全过程。我们将尽量避免复杂的统计学原理(如有不懂的,可以自行翻阅书籍,想偷懒的可以看看作为研究生,你还事事都要别人帮忙吗?),并将重点放在该方法的R实现过程中。
我们可以将构建和验证临床预测模型的过程再次进行归纳,共包括以下八个步骤:
(1)识别临床问题并确定科学假设;
(2)根据已有文献确定预测模型的研究策略;
(3)确定预测模型的预测因子;
(4)确定预测模型的结果变量;
(5)构建预测模型并计算模型预测因子;
(6)评估模型识别能力;
(7)评估模型校准;
(8)评估模型的临床有效性。
预测模型构建的研究过程可参见下图。
以前的教程中,我们多是给出一个经典案例,此次,为了让大家看的更明白,学得更彻底,我们给出两个实例案例,好好学习哦。先看case1。
研究背景
1989年Hosmer和Lemeshow研究了低出生体重儿的影响因素。因变量为是否生低出生体重儿(变量名:“Low”;二分变量;1=低出生体重儿,即婴儿出生体重<2500g;0=非低出生体重儿)。
可能的影响因素(自变量)包括:孕妇孕前体重(lwt,单位:磅)、产妇年龄(年龄,单位:年);母亲孕期是否吸烟(smoke,0=否,1=是);孕前早产次数(ptl,单位:次数);高血压(ht,0=否,1=是);刺激、催产素等引起的子宫收缩应激(ui,0=否,1=是);怀孕前三个月去社区医生就诊(ftv,单位:次数);种族(种族,1=白人,2=黑人,3=其他)。
案例解读
在这种情况下,因变量是二分类变量(是否生出低出生体重儿)。本研究的目的是探讨低出生体重儿的独立影响因素,符合二元Logistic回归的应用条件。由于在这种情况下只有一个数据集,我们可以将这个数据集作为训练集进行建模,然后使用Bootstrap重采样方法在同一数据集中进行内部模型验证。这里需要注意的是,我们也可以按照7:3的比例将数据集随机分为训练集和内部验证集,但考虑到样本大小我们没有这么做(所以这里我们只演示如何构建模型,至于检验和评估的事情,后续章节会慢慢讲到)。下面我们将演示低出生体重儿预测模型的构建和用R语言绘制Nomogram。采集到的数据命名为“Lweight.sav”,保存在R语言的当前工作路径中。数据和代码可以联系客服领取。具体分析计算步骤为:
(1)筛选影响低出生体重儿的独立影响因素,构建Logistic回归模型;
(2)将Logistic回归模型可视化,绘制Nomogram;
(3)计算Logistic模型的区分度(C-Statistics);
(4)采用重抽样方法进行内部验证,绘制校准曲线。
实现过程
加载用于以.sav格式(IBM SPSS样式数据格式)导入外部数据的foreign包。加载RMS包以构建Logistic回归模型并绘制Nomogram。导入.sav格式的外部数据,并将其命名为“mydata”。然后将数据设置为数据框结构,并显示数据框的前6行。
数据预处理:将结果变量设置为二分变量,将“低出生体重”定义为“1”,将无序分类变量“RACE”设置为哑元变量。
将数据框“mydata”加载到当前工作环境中,并使用函数datadist()将数据“打包”。
利用lrm()函数对Logistic回归模型进行拟合,给出了模型拟合结果和模型参数。注:等级划分指标的参数C在模型中可以直接读取。这是模型“FIT1”的C-统计量。根据计算结果,本例中的C-统计量为0.738。C-统计量的含义和计算方法将在下面进一步解释。
使用函数nomogram()创建Nomogram对象“nom1”后输出Nomogram。结果见下图。
好了,到这里,我们的列线图就出来了。讲到这里,我们暂时做一个小的停顿。给大家讲讲列线图的定义和解读。
分割线内,选择性阅读
列线图定义
列线图(Alignment Diagram),又称诺莫图(Nomogram图),它是建立在多因素回归分析的基础上,将多个预测指标进行整合,然后采用带有刻度的线段,按照一定的比例绘制在同一平面上,从而用以表达预测模型中各个变量之间的相互关系。
列线图的基本原理,简单的说,就是通过构建多因素回归模型(常用的回归模型,例如Cox回归、Logistic回归等),根据模型中各个影响因素对结局变量的贡献程度(回归系数的大小),给每个影响因素的每个取值水平进行赋分,然后再将各个评分相加得到总评分,最后通过总评分与结局事件发生概率之间的函数转换关系,从而计算出该个体结局事件的预测值。
列线图将复杂的回归方程,转变为了可视化的图形,使预测模型的结果更具有可读性,方便对患者进行评估。正是由于列线图这种直观便于理解的特点,使它在医学研究和临床实践中也逐渐得到了越来越多的关注和应用。
列线图怎么看
列线图大量应用于模型构建的文章,在诸如NEJM、Lancet等顶级杂志中均有它的身影,该如何解读呢?我们就用刚才的这个例子来给大家说说看。
我们可以看到列线图主要由左边的名称以及右边对应的带有刻度的线段所组成。列线图的名称主要包括三类:
1. 预测模型中的变量名称:例如图中的年龄(Age)、ftv(孕前检查次数),ht(是否高血压),smoke(是否抽烟)等信息,每一个变量对应的线段上都标注了刻度,代表了该变量的可取值范围,而线段的长度则反映了该因素对结局事件的贡献大小。
2. 得分,包括单项得分,即图中的Point(第一行),表示每个变量在不同取值下所对应的单项分数,以及总得分,即Total Point(最后一行),表示所有变量取值后对应的单项分数加起来合计的总得分。
3. 预测概率:例如图中的Low weight rate,表示出生低体重儿的概率。
我们举个例子,如果产妇35岁,根据列线图,得分10分;无高血压,得分0分;抽烟,得分37分;再加上其他分数,如果总分100分,那么对应的生产低体重儿的概率就约为0.12,那么你就可以拿着这个图表给患者看,告诉她产出低体重儿的概率比较低。看懂了吗?那我们继续下面的实例分析。
分割线内,选择性阅读
下面,使用函数calibrate()构造校准曲线对象“cal1”并输出校准曲线。结果下图所示。
从上面Logistic回归模型的计算结果fit1和列线图的结果,可以看到该模型一些预测变量的贡献可以忽略不计,例如变量“ftv”。还有一些预测因素可能不适合纳入预测模型,如哑元变量“race”,还有一些复杂的临床操作变量。我们可以考虑把无序的分类变量适当地转换成二分变量,并把它们纳入回归模型。
首先,根据实际情况,我们进行转换将无序分类变量“race”转换为二分类变量。转换的标准主要基于专业知识,我们把“白人”归为一类,“黑人和其他”归为另一类。
从回归模型中排除对结果贡献较小的变量“ftv”(孕前检查次数,从列线图中看出,不管检查次数是0或者6,在Points积分这里都是无关紧要,影响不大),然后重建模型“fit2”并显示模型参数。可以看出,C-统计量=0.732。
使用函数nomogram()构造列线图对象“nom2”,并输出列线图。结果如图所示。
Nomogram图解释:假设孕妇具有以下特征:妊娠高血压、体重100磅、早产两次、吸烟和黑人。然后我们可以根据每个变量的值来计算孕妇的每个特征的得分:妊娠高血压(68分)+体重100磅(88分)+两次早产(48分)+吸烟(40分)+黑人(42分)=286分。总得分为286的低出生体重儿的发生概率大于80% 。请注意,本例中超过80%的部分不会显示在列线图上。读者可以尝试调整参数设置,以显示0-1范围内的所有预测概率。
使用calibrate()构建校准曲线对象“cal2”并输出校准曲线。结果如下 所示。
校准曲线的解释:事实上,校准曲线是实际发生概率与预测概率的散点图。校准曲线可视化了霍斯默-勒梅休(Hosmer-Lemeshow)拟合优度检验的结果,所以除了校准曲线之外,我们还应该检查霍斯默-勒梅休拟合优度检验的结果。预测率和实际发生率越接近Y = X,Hosmer-Lemeshow拟合优度检验的p值大于0.05,模型校准得越好。在这种情况下,校准曲线几乎Y = X线,表示模型校准良好。
研究背景
来自North Central Cancer Treatment Group的晚期肺癌患者的生存率。绩效评分对患者日常活动的表现进行评分。总共10个变量:
(I) inst: Institution code;
(II) time: Survival time in days;
(III) status: censoring status 1=censored, 2=dead;
(IV) age: Age in years;
(V) sex: Male=1 Female=2;
(VI) ph.ecog: ECOG performance score (0=good 5=dead);
(VII) ph.karno: Karnofsky performance score (bad=0-good=100) rated by physician;
(VIII) pat.karno: Karnofsky performance score as rated by patient;
(IX) meal.cal: Calories consumed at meals;
(X) wt.loss: Weight loss in last six months.
案例数据集实际上是生存数据。为了与本节的主题保持一致,我们只考虑结果的二项属性(status 1 = censored, 2 = dead)。我们选择Logistic regression模型来构建和可视化模型,绘制Nomogram,计算C-统计量,并绘制校准曲线。
实现过程
用survival中的“lung”数据集进行演示。我们可以使用以下命令枚举生存包中的所有数据集。
根据rms建立回归模型和绘制Nomogram,需要对数据进行预先“打包”,这是绘制Nomogram的关键步骤,使用命令“?datadist”查看其详细的帮助文档。以“status”为因变量,“age”和“sex”为自变量,构建Logisitc regression回归模型,并给出模型参数。可以看出,C-统计量=0.666。
使用函数nomogram()构造列线图对象“fit”,并输出列线图。结果如 所示。
使用calibrate()函数构造校准曲线的对象“cal”并打印校准曲线。结果如图所示。
综上所述,本部分介绍了Logistic回归预测模型的构建和Nomogram的绘制。应该注意的是,评估预测模型的实用价值,除了考虑其预测的准确性外,还应考虑其可操作性。除了内部验证之外,有时还需要外部验证。在这种情况下,由于没有获得外部验证数据,因此不演示外部验证过程,并且仅使用Bootstrap方法在原始数据集中执行验证。
参考文献:Zhi-Rui Zhou, Wei-Wei Wang, Yan Li, et al. In-depth mining of clinical data: the construction of clinical prediction model with R.Annals of Translational Medicine.
更多科研新鲜资讯、文献精读和生物信息技