临床预测模型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 等内容,皆进行了详细的操作演示,同时提供多种实现方法

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐