临床预测模型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 曲线。AUC(Area 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函数计算 NRI(Net Reclassification Improvement)和 IDI(Integrated 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 等内容,皆进行了详细的操作演示,同时提供多种实现方法
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)