临床预测模型R语言实战代码大揭秘

张开发
2026/4/17 12:33:15 15 分钟阅读

分享文章

临床预测模型R语言实战代码大揭秘
临床预测模型R语言实战代码 主要涉及模型建立、模型评价、模型比较3部分内容其中模型评价和比较内容占比较多 对于列线图、C-index、ROC 曲线、决策曲线、校准曲线、临床影响曲线、NRI、IDI 等内容皆进行了详细的操作演示同时提供多种实现方法临床预测模型在医学研究中可是相当重要的工具它能帮助医生预测疾病的发生、发展以及患者的预后情况。今天咱们就用R语言来实战一下主要涉及模型建立、模型评价和模型比较这三个部分其中模型评价和比较的内容会多一些。模型建立首先咱们得有数据才能建立模型。假设我们有一个关于疾病相关的数据集包含了患者的各种特征和结局变量。# 加载必要的包 library(tidyverse) library(caret) library(survival) # 模拟数据 set.seed(123) n - 200 data - data.frame( age rnorm(n, 50, 10), gender factor(sample(0:1, n, replace TRUE), labels c(Female, Male)), bmi rnorm(n, 25, 3), outcome factor(sample(0:1, n, replace TRUE), labels c(No, Yes)) ) # 划分训练集和测试集 train_index - createDataPartition(data$outcome, p 0.7, list FALSE) train_data - data[train_index, ] test_data - data[-train_index, ] # 建立逻辑回归模型 model - glm(outcome ~ age gender bmi, data train_data, family binomial())代码分析我们先加载了几个必要的包tidyverse用于数据处理和可视化caret用于数据划分和模型训练survival可以处理生存分析相关的数据。模拟了一个包含患者年龄、性别、BMI 和结局变量的数据集。使用createDataPartition函数将数据集划分为训练集和测试集比例为 7:3。最后用glm函数建立了一个逻辑回归模型用于预测患者的结局。模型评价模型建立好后就得对它进行评价看看它的性能如何。下面我们会用到多种评价指标和方法。C - index# 计算C - index library(Hmisc) c_index - rcorr.cens(predict(model, newdata test_data, type response), as.numeric(test_data$outcome) - 1) print(paste(C - index:, c_index[1]))代码分析加载Hmisc包使用rcorr.cens函数计算 C - index。C - index 是衡量模型区分能力的一个指标取值范围在 0.5 到 1 之间越接近 1 表示模型的区分能力越好。ROC 曲线# 绘制ROC曲线 library(pROC) roc_obj - roc(test_data$outcome, predict(model, newdata test_data, type response)) plot(roc_obj, main ROC Curve) auc - auc(roc_obj) print(paste(AUC:, auc))代码分析加载pROC包使用roc函数计算 ROC 曲线plot函数绘制 ROC 曲线。AUCArea Under the Curve是 ROC 曲线下的面积也是衡量模型性能的重要指标AUC 越接近 1 表示模型性能越好。校准曲线# 绘制校准曲线 library(rms) dd - datadist(train_data) options(datadist dd) f - lrm(outcome ~ age gender bmi, data train_data) cal - calibrate(f, method boot, B 100) plot(cal, main Calibration Curve)代码分析加载rms包使用lrm函数重新建立一个逻辑回归模型calibrate函数计算校准曲线plot函数绘制校准曲线。校准曲线用于评估模型预测概率与实际概率的一致性。决策曲线# 绘制决策曲线 library(rmda) dca - dca(model, data test_data, outcome outcome) plot(dca, main Decision Curve)代码分析加载rmda包使用dca函数计算决策曲线plot函数绘制决策曲线。决策曲线可以帮助我们评估模型在不同阈值下的临床净获益。模型比较有时候我们会建立多个模型需要比较它们的性能。这里我们再建立一个简单的模型然后和之前的模型进行比较。# 建立另一个简单模型 simple_model - glm(outcome ~ age, data train_data, family binomial()) # 比较模型的NRI和IDI library(pec) nri_idi - nri(simple_model, model, formula outcome ~ 1, data test_data) print(nri_idi)代码分析建立了一个只包含年龄变量的简单逻辑回归模型。使用pec包的nri函数计算 NRINet Reclassification Improvement和 IDIIntegrated Discrimination Improvement这两个指标可以用于比较两个模型的性能差异。列线图和临床影响曲线列线图# 绘制列线图 library(rms) dd - datadist(train_data) options(datadist dd) f - lrm(outcome ~ age gender bmi, data train_data) plot(nomogram(f, fun plogis, fun.at c(0.1, 0.2, 0.5, 0.8, 0.9), lp FALSE), xfrac 0.5, main Nomogram)代码分析还是使用rms包用lrm函数建立模型后使用nomogram函数创建列线图plot函数绘制列线图。列线图可以直观地展示各个变量对结局的影响程度。临床影响曲线# 绘制临床影响曲线 library(rmda) cic - cic(model, data test_data, outcome outcome) plot(cic, main Clinical Impact Curve)代码分析加载rmda包使用cic函数计算临床影响曲线plot函数绘制临床影响曲线。临床影响曲线可以帮助我们评估模型在不同阈值下的临床决策影响。通过以上的代码和分析我们完成了临床预测模型的建立、评价和比较还展示了列线图、C - index、ROC 曲线等多种工具的使用方法。希望这些内容能帮助大家更好地使用R语言进行临床预测模型的研究。临床预测模型R语言实战代码 主要涉及模型建立、模型评价、模型比较3部分内容其中模型评价和比较内容占比较多 对于列线图、C-index、ROC 曲线、决策曲线、校准曲线、临床影响曲线、NRI、IDI 等内容皆进行了详细的操作演示同时提供多种实现方法

更多文章