Logistic构建临床预测模型系列主要以一篇基于logistic回归构建预测模型的文章为例,从整理数据到构建预测模型,再到内部验证模型,包括了整理数据、随机数据拆分、基线描述、差异性分析、绘制ROC曲线并计算AUC值、HL检验及绘制校准曲线、构建列线图模型并绘制DCA曲线,基本涵盖了Logistic构建预测模型的全过程,敬请期待!
本文为Logistic构建临床预测模型系列第二篇文章,为大家介绍如何用R语言筛选并整理数据,即1分钟构建预测模型 | 从“傻瓜式”整理数据开始!第一篇文献解读可参见以下这篇文章:
今日文章分为三部分
文章解读
.R语言复现
“傻瓜式”整理数据
本文介绍预测模型构建的第一步,数据整理!无论是手动录入的还是取自数据库的数据,在完成数据获取这一步之后,要花很大的精力和时间用在整理数据上,有了清晰准确的数据集,才能进入分析阶段,过不了这一关,后面的建模就无法实现。
1.文章解读
案例文献是一篇基于SEER公共数据库的一项回顾性研究,旨在开发和验证列线图以预测脑转移的非小细胞肺癌患者早期死亡。
背景:在非小细胞肺癌(NSCLC)的整个病程中,很多患者会出现预后差、死亡率高的脑转移(BM)。然而,很少有模型能预测有脑转移的NSCLC患者的早期死亡(ED)。我们旨在开发列线图来预测NSCLC脑转移患者ED。
方法:从监测、流行病学和最终结果(SEER)数据库中选取了2010年至2015年间患有BM的NSCLC患者。纳入标准如下:(I)患者经病理诊断为NSCLC;(II)患者患有BM。患者按7:3的比例随机分为两组,分别为训练组和验证组。采用单因素和多因素Logistic回归方法来确定伴有BM的NSCLC患者发生ED的危险因素。建立了两个列线图,并通过校准曲线、ROC曲线和决策曲线分析(DCA)进行了验证。随访数据包括生存月数、死因和生命状态。初次诊断后3个月内的死亡定义为ED,终点为全因ED和癌症特异性ED。
结果:共纳入了4,920名患有BM的NSCLC患者,并随机分为两个队列(7:3),包括训练队列(n=3,444)和验证队列(n=1,476)。全因ED和癌症特异性ED的独立预后因素包括年龄、性别、种族、肿瘤大小、组织学、T分期、N分期、分级、手术、放疗、化疗、骨转移和肝转移。所有这些变量都用于建立列线图。在全因ED和癌症特异性ED的列线图中,训练数据集的ROC曲线下面积分别为0.813(95% CI:0.799-0.837)和0.808(95% CI:0.791-0.830),验证数据集的ROC曲线下面积分别为0.835(95% CI:0.805-0.862)和0.824(95% CI:0.790-0.849)。此外,校准曲线证明预测的ED与实际值一致。DCA临床应用前景良好。
结论:列线图可用来预测患者死亡的具体概率,有助于治疗决策和重点护理,以及医患沟通。
本文构建logistic预测模型并做内部验证,思路框架清晰,案例十分典型。今天我们对本文的数据整理展开复现。本文所研究的影响因素均为定性数据,我们需要将下载的数据进行整理分组,下表可见本文所研究的影响因素基线分组情况。
2.R语言复现
根据文章的纳排标准,从SEER数据库提取数据,并通过筛选得到数据集
lung,本文重点复现文章的数据整理过程。
观察表格可以看到影响因素包括"Age.years" , "Sex" , "Race" , "Marital" , "Grade" , "Tumor.size.mm" , "Histology" , "T_stage" , "N_stage" , "Surgery" , "Radiation" , "Chemotherapy" , "Bone.metastasis" , "Liver.metastasis",均为定性数据,有二分类数据也有多分类数据,并且多分类数据需要设置哑变量。
下面我们不一一列举,针对整理数据所用到的不同代码函数,举例说明!
2.1定量数据按一定标准分组
#例:将年龄进行分组
lung$Age.years <- ifelse(lung$age<=65,"1",
ifelse(lung$age>=66 & lung$age<=71, "2","3"))
#嵌套两个ifelse函数,函数表达式ifelse(条件,yes,no)
2.2定量数据因子化
#例:将年龄因子化
lung$Age.years <- factor(lung$Age.years,levels=c(1,2,3) ,
labels = c("<=65", "66-71", ">71"))
# factor函数将年龄因子化,levels可对里面的因子重新排序,排在第1位的为对照组;labels打标签,要与levels对应。
2.3将字符串数据数值化
绘制曲线时,如绘制校准曲线时,会要求结局变量需为数值类型;做HL检验时,结局变量必需是数值型,且变量值只能是二分类0,1。
#例:将结局变量All.cause.early.death分组为0和1,并转换为数值型
lung$All.cause.early.death <- ifelse(lung$Vital.status.recode..study.cutoff.used.=="Alive",0,
ifelse(lung$Vital.status.recode..study.cutoff.used.=="Dead" & lung$Survival.months>3,0,1))
lung$All.cause.early.death <- as.numeric(lung$All.cause.early.death)
如上,数据整理用到的代码大概就这几个!但是R语言的操作属实还是比较麻烦的,变量少一点还好,变量多了很容易混,下面为大家展示一下另一种傻瓜式整理数据的操作,不过它也是以R语言为基础的,只不过不用我们自己敲代码!
3.“傻瓜式”整理数据
用它,鼠标点点就能整理数据,相比于R语言算不算“傻瓜式”呢?
3.1电脑端打开风暴统计平台——“风暴智能统计”模块,点击“临床预测模型(最新)”,进入“临床预测模型:内部验证”页面
3.2导入数据
3.3数据整理转换
3.3.1定量变量转分类数据
首先点击“数据整理转换”模块,选择定量变量(以年龄为例),选择“自定义分组”,输入分组临界值,点击开始分组,即可产生一个新变量“age_group”.(如遇显示不全,可下载新数据查看)
注意:网站分组按照输入的分组临界值,分组区间为左闭右合,所以将年龄分为"<=65", "66-71", ">71"的临界值为66和72,即[0,66),[66,72),[72,∞)。
3.3.2分类变量值标签设置
以上一步分组的年龄为例,选择变量“age_group”,对应分组类别添加值标签,可以在原变量基础上修改,也可生成新的变量,切记一定要点“保存”!
3.3.3重新定义变量值顺序(哑变量设置)
只需要勾选“重新定义变量值顺序(哑变量设置)”,将变量值按自己的需要排序,同样排在第一位的为对照,切记“保存”。
注意:第二步和第三步最好分开进行,否则会混乱。
3.3.4产生新变量
可以通过计算产生新变量,但本文不需要此功能,可做了解。
3.3.5变量重命名
整理好的数据集可以直接下载
从头到尾鼠标点点,没有我们看不懂的代码,没有想破脑袋的逻辑关系,真正意义上的“傻瓜式”整理数据,快来试试吧!!