Logistic构建预测模型:如何用R语言整理数据?(附全套代码)

Logistic构建临床预测模型系列主要以一篇基于logistic回归构建预测模型的文章为例,从整理数据到构建预测模型,再到内部验证模型,包括了整理数据、随机数据拆分、基线描述、差异性分析、绘制ROC曲线并计算AUC值、HL检验及绘制校准曲线、构建列线图模型并绘制DCA曲线,基本涵盖了Logistic构建预测模型的全过程,敬请期待!

本文为Logistic构建临床预测模型系列第二篇文章,为大家介绍如何用R语言筛选并整理数据,即1分钟构建预测模型 | 从“傻瓜式”整理数据开始!第一篇文献解读可参见以下这篇文章:

Logistic构建预测模型:SEER数据库文献解读

今日文章分为三部分

  1. 文章解读

  2. .R语言复现

  3. “傻瓜式”整理数据‍

本文介绍预测模型构建的第一步,数据整理!无论是手动录入的还是取自数据库的数据,在完成数据获取这一步之后,要花很大的精力和时间用在整理数据上,有了清晰准确的数据集,才能进入分析阶段,过不了这一关,后面的建模就无法实现。

77d0aab6256bf5b5305aa0a8a1afa31c.png

1.文章解读

c85a0e8ad8983193d9aa7527d336871e.png


案例文献是一篇基于SEER公共数据库的一项回顾性研究,旨在开发和验证列线图以预测脑转移的非小细胞肺癌患者早期死亡。

55bb9fff3bec074b81142d8be3487ea3.jpeg

背景:在非小细胞肺癌(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预测模型并做内部验证,思路框架清晰,案例十分典型。今天我们对本文的数据整理展开复现。本文所研究的影响因素均为定性数据,我们需要将下载的数据进行整理分组,下表可见本文所研究的影响因素基线分组情况

e4a50a2cb535c7034a87656ac0d2e1be.jpeg

651acd39366416ec490d8ad2ab7c3c48.png

2.R语言复现

2eaff8f5c3dec2b736802b64c9d13c78.png


根据文章的纳排标准,从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语言为基础的,只不过不用我们自己敲代码!

2309e5576273af387296a6ca1507e0ef.png

3.“傻瓜式”整理数据

48f1ad97cf80ba43667c974093e2e10b.png


用它,鼠标点点就能整理数据,相比于R语言算不算“傻瓜式”呢?

59b581348ef6e945a4872fab972648e7.jpeg

3.1电脑端打开风暴统计平台——“风暴智能统计”模块,点击“临床预测模型(最新)”,进入“临床预测模型:内部验证”页面

bd2d3e0c373f938fab60302cce8ade2f.jpeg

3.2导入数据

b242c9c6cefb87d8e1c895f88c3e1169.jpeg

3.3数据整理转换

3.3.1定量变量转分类数据


首先点击“数据整理转换”模块,选择定量变量(以年龄为例),选择“自定义分组”,输入分组临界值,点击开始分组,即可产生一个新变量“age_group”.(如遇显示不全,可下载新数据查看)

989973c2b59aee5549fa2477e18fb600.jpeg

注意:网站分组按照输入的分组临界值,分组区间为左闭右合,所以将年龄分为"<=65", "66-71", ">71"的临界值为66和72,即[0,66),[66,72),[72,∞)。

3.3.2分类变量值标签设置


以上一步分组的年龄为例,选择变量“age_group”,对应分组类别添加值标签,可以在原变量基础上修改,也可生成新的变量,切记一定要点“保存”!

f10c260aa29da45915ff5d8221b1145e.jpeg

3.3.3重新定义变量值顺序(哑变量设置)

只需要勾选“重新定义变量值顺序(哑变量设置)”,将变量值按自己的需要排序,同样排在第一位的为对照,切记“保存”。

d912016a8701ce5eb1f38461960cefd2.jpeg

注意:第二步和第三步最好分开进行,否则会混乱。

3.3.4产生新变量


可以通过计算产生新变量,但本文不需要此功能,可做了解。

0685803409a3c4640723fe7bccfe3d54.jpeg

3.3.5变量重命名

40497d2bc9468873f3c4cf11df26bef2.jpeg

整理好的数据集可以直接下载

2c3b906c6254cb8c6ca6776c43729ecf.jpeg

从头到尾鼠标点点,没有我们看不懂的代码,没有想破脑袋的逻辑关系,真正意义上的“傻瓜式”整理数据,快来试试吧!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值