我们从SEER数据库或其他公共数据库下载到数据后,一个很重要的步骤就是把数据集随机分为训练集和验证集,一般来说70%用于数据建模,即训练集,30%的数据进行验证,即内部验证。因为我们想要找到类似的数据进行外部验证比较难,因此只能对数据进行拆分来验证。 本文案例:一篇基于logistic回归构建预测模型的文章,就采用了内部验证的方法,将数据按7:3进行拆分。今天我们分别用R语言和风暴统计免费在线平台对预测模型验证过程中经常用到的内部验证,将数据集拆分为训练集和验证集并进行基线差异性分析复现。
本文属于Logistic构建临床预测模型系列文章第三篇,系列文章详情请点击下方链接:
Logistic构建预测模型(1):复现SEER数据库文献解读
Logistic构建预测模型(2):如何用R语言整理数据?(附全套代码)
今日文章分为三部分 1.文章解读 2.R语言复现 3.简单方法拆分数据集(送基线差异分析)
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临床应用前景良好。
结论:列线图可用来预测患者死亡的具体概率,有助于治疗决策和重点护理,以及医患沟通。
今天我们对本文的数据集拆分及基线差异性分析展开复现。根据文章的纳排标准,我们从SEER数据库提取数据,并通过筛选、整理得到数据集lung.cancer,将数据按照7:3拆分为训练集train和验证集test,test用于内部验证。

拆分数据集
下表为文中训练集和验证集基线描述。

均衡性检验
2.R语言复现
2.1数据集拆分
导入整理好的lung.cancer数据集,共14个自变量,2个结局变量。按照7:3的比例将数据集拆分为训练集train和验证集test。
####设置随机种子####
set.seed(1111)#数字随机
index <- sort(sample(nrow(lung.cancer), nrow(lung.cancer)*.7))
train <- lung.cancer[index,]#70%数据集
test <- lung.cancer[-index,]#30%数据集
train$group <- "train"
test$group <- "test"
total <- rbind(train,test)#合并数据集 代码解读:sort函数对向量进行排序;sample函数进行随机抽样,表达式为sample(x=x,size);nrow(data)代表数据集的行。意味着从数据集lung.cancer的行中进行随机抽样,抽取的个数为数据集行数的0.7倍,以实现7:3的比例。
2.2基线差异性描述
2.2.1安装和加载R包
if(!require("compareGroups")) install.packages("compareGroups")
library("compareGroups") 2.2.2训练和验证队列的基线特征
base_tab <- descrTable(group ~ Age.years +Sex + Race + Marital + Grade + Tumor.size.mm +
Histology + T_stage + N_stage + Surgery + Radiation + Chemotherapy +
Bone.metastasis + Liver.metastasis,data = total)
print(base_tab)

基线表格

基线表格(续)
3.简单方法拆分数据集(送基线差异分析)
用它,逻辑清晰,结果可靠,拆分数据集不是难事!

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

临床预测模型:内部验证
3.2数据集拆分 导入数据并做整理转换(可参考本系列第一篇文章介绍)后,点击“数据集拆分”。

数据集拆分
和R语言步骤一样,先设置随机数字,再确定训练集与验证集的比例,数据就拆分完成啦。如果需要也可以下载拆分后的数据。

数据集拆分
接着就可以直接进入训练集与验证集基线差异性分析啦!
3.3训练集与验证集比较
点击“训练集与验证集比较”,再对应选择变量,结果随即出现在右侧。

训练集与验证集比较
还可以一键导出word三线表

均衡性检验三线表


大家可以对比一下本文R语言和风暴统计卡方检验的结果,可以发现,二分类变量卡方检验R语言和风暴统计对不上?
这是因为R语言compareGroups包做卡方检验,不论条件如何,二分类变量均采用校正卡方的结果,而风暴统计则是严格按照卡方检验的期望值频数等条件,判断选用卡方检验还是校正卡方还是fisher确切概率法。
R语言里的弯弯绕绕真的很难懂,不全面了解各个R包和里面的关系,很难准确的得到我们想要的结果。对于新手小白来说,还是更适合风暴统计这种简便的工具来辅助自己写文章,做统计,结果安全优可靠!快来尝试一下,亲自感受一下它的魅力吧!