专栏/cox构建预测模型(2):如何用R语言拆分数据集并作均衡性检验

cox构建预测模型(2):如何用R语言拆分数据集并作均衡性检验

2023年08月15日 06:48--浏览 · --点赞 · --评论
粉丝:248文章:180

Cox回归预测模型的基础统计策略大致可以概括为“一表四图”,即均衡性表列线图校准图ROC图DCA图


今天主要讲解均衡性表的制作,在构建预测模型时必须要有训练集与验证集,而验证集又分为内部验证与外部验证,内部验证是必须的。内部验证集与训练集是由同一份数据拆分而成,训练集用于构建模型验证集用来后续测试模型的泛化能力。而均衡性表是用来比较训练集与验证集差异性的重要表格,也是预测模型文章中的基线表,通常需要两个数据集无统计学差异。


本文将以复现一篇seer公共数据库文章(Q1 IF=5.2)为例,说明预测模型中均衡性表格的绘制过程,除了R语言,本文还会介绍一种更为快捷便利的统计分析方法——风暴统计,可以一站式提供众多统计分析方法,比SPSS智能,比R语言简洁!


主要内容包括:

一、文献解读

二、利用R语言复现

三、利用在线网站复现

四、小结


一、文献解读


案例文献是沈阳医学院公共卫生学院学者基于SEER数据库的一项回顾性研究,旨在建立一个列线图来预测老年恶性骨肿瘤(MBT)患者的总生存期(OS)。


案例文献


背景:恶性骨肿瘤(MBT)是老年患者死亡的原因之一。我们研究的目的是建立一个列线图来预测老年MBT患者的总生存期(OS)。


方法:从SEER数据库下载了2004年至2018年所有老年MBT患者的临床病理数据。他们被随机分配到训练集(70%)和验证集(30%)。采用单因素和多因素Cox回归分析确定老年MBT患者的独立危险因素。基于这些危险因素构建列线图,以预测老年MBT患者的1年,3年和5年OS。然后,利用一致性指数(C指数)、校准曲线和受试者工作曲线下面积(AUC)来评价预测模型的准确性和判别力。决策曲线分析(DCA)用于评估列线图的临床潜在应用价值。根据列线图上的分数,将患者分为高风险组和低风险组。Kaplan-Meier(K-M)曲线用于测试两名患者之间的生存差异。


结果:从SEER数据库下载了2004年至2018年所有老年MBT患者的临床病理数据。他们被随机分配到训练集(70%)和验证集(30%)。采用单因素和多因素Cox回归分析确定老年MBT患者的独立危险因素。基于这些危险因素构建列线图,以预测老年MBT患者的1年,3年和5年OS。然后,利用一致性指数(C指数)、校准曲线和受试者工作曲线下面积(AUC)来评价预测模型的准确性和判别力。决策曲线分析(DCA)用于评估列线图的临床潜在应用价值。根据列线图上的分数,将患者分为高风险组和低风险组。Kaplan-Meier(K-M)曲线用于测试两名患者之间的生存差异。


结论:我们建立了一个新的列线图来预测老年MBT患者的1年,3年,5年的OS。该预测模型可以帮助医生和患者制定治疗计划和后续策略。


2. 数据介绍


文献共纳入1641名2004-2018诊断的老年MBT患者的临床病理数据。暴露因素包括年龄、种族、性别、诊断年份、组织学类型、分级、分期、原发位置、TNM分期、肿瘤大小、是否化疗、是否放疗及手术方式。

变量说明

3. 研究结果


这篇文献构建Cox回归预测模型的统计思路十分清晰。首先按照7:3将数据集进行拆分获得训练集与验证集,然后做均衡性检验,比较训练集和验证集的差异性,再做单因素和多因素Cox回归,筛选变量构建列线图预测模型,最后通过校准图、ROC曲线、DCA曲线对模型的校准度、区分度以及临床决策的实际需要进行评价。


文章涉及到的均衡性差异表如下图:

均衡性检验


二、利用R语言复现


下面我们利用从SEERStat中提取的相关数据进行复现。根据文献中的纳入排除标准,提取涉及的相关数据,最终共纳入1,574名患者(原文献1,641)。介于SEERStat数据库会有更新,因此提取的样本量与原文会有所出入,这里请大家多关注统计方法的运用!本次用到的是R版本是4.3.1。


1. 安装加载R包并导入数据


这里绘制均衡性表格,主要用到"compareGroups"R包

#下载加载R包
if(!require("compareGroups")) install.packages("compareGroups")
library("compareGroups")

#导入数据集
raw <- read.csv("seer.csv")


2.数据随机拆分


通过设置随机数种子,将数据集按照7:3的比例拆分为训练集与验证集。

set.seed(666666)
index <-  sort(sample(nrow(dat), nrow(dat)*.7))
train <- dat[index,]
test <-  dat[-index,]


3.均衡性检验


对训练集与验证集提取group变量,并对两个数据集进行合并生成total数据集,total数据集与原数据集相比多了一列分组变量,分组依据是训练集或验证集,以便于通过total数据集进行两个数据集间的均衡性检验。

train$group <- "train"
test$group <- "test"
total <- rbind(train,test)

#进行均衡性检验,并绘制三线表
base_tab <- descrTable(group ~ age + Race + Sex + Year.of.diagnosis +Histologic.type
                 + Grade + Stage + Primary.Site + t_stage + n_stage
                 + m_stage +Tumor_size + Chemotherapy + Radiation + Surgery,
                       data = total,method = c(Tumor_size=2))
print(base_tab)


代码解读:descrTable(y~x1 + x2 + x3......,data =   ,method = c(x=2)),y为分组变量,x为暴露因素,method设置为2对指定的定量变量使用秩和检验。


R语言均衡性检验结果如下:


三、利用在线网站复现


如果没有代码基础,或者希望通过更便捷的方式完成统计分析,推荐使用这个智能在线统计分析平台——风暴统计。一站式完成Cox预测模型基础统计分析,便捷又快速。


网址:www.medsta.cn(在电脑端浏览器打开)
medsta.cnmedical statistics缩写)


1.进入网站分析模块


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

临床预测模型:cox预测模型

2. 导入数据集


这里同样导入我们从SEERStat中提取的文献相关数据,目前网站支持10M以下的csv格式数据。

导入数据集


3. 数据集的拆分


点击“数据集拆分”,可以设置随机种子与拆分比例,简简单单就完成了拆分工作,如果需要下载拆分好的数据集,也可以点击最右侧“下载新的数据集”。

拆分数据集


4. 选择变量,绘制均衡表


点击“训练集与验证集比较”,分别选入正态变量、偏态变量、分类变量,在右侧直接生成三线表格。

绘制均衡表

5. 导出三线表

制作好的三线表还可以直接下载使用,有excel版和word版可以选择。

导出三线表



word版结果如下:


四、小结


有细心的朋友可能注意到网站分析结果与R语言结果不一致,是不是网站计算有误?这里为大家解释一下!R语言的"compareGroups"包在使用卡方检验时,只会得出校正卡方的结果,这是不准确的,相信学过郑老师“30天学会医学统计与SPSS”免费公益课的同学都知道卡方检验结果的取舍应根据数据结构来。


下面我们通过SPSS软件进行验证,抽取其中3个变量可以看出,在线平台的分析结果与SPSS是完全一致的,对于2×2的卡方检验,R语言只给出校正卡方结果,并且没有显示统计量。


因此,大家在使用网站进行分析时,可以放心!网站不仅操作过程简单便捷,分析结果也十分的全面可靠!


风暴统计网站分析结果:



SPSS分析结果:


R语言分析结果:


投诉或建议