列线图/诺莫图 含概率轴

r 复制代码
## =========================
## regplot 文字替换版
## =========================

pkgs <- c("readxl", "survival", "regplot")
for (p in pkgs) {
  if (!requireNamespace(p, quietly = TRUE)) install.packages(p)
  library(p, character.only = TRUE)
}

## 读入数据
file_path <- "C:/Users/P16v/Desktop/2025-12/MATLAB2026112.xlsx"
stopifnot(file.exists(file_path))
dat0 <- readxl::read_excel(file_path)

## 数据整理
train3 <- data.frame(
  RecurT        = as.numeric(dat0$RecurT),
  Recurrence    = as.integer(dat0$Recurrence),
  CombinedScore = as.numeric(dat0$CombinedScore),
  Size          = as.integer(dat0$Size)
)
train3 <- train3[complete.cases(train3), ]

## -------------------------------------------------------
## 把变量名改成你想显示的名字
## 注意:为了公式兼容,保留合法列名,绘图后再覆盖显示文字
## -------------------------------------------------------
train3_plot <- train3
names(train3_plot)[names(train3_plot) == "CombinedScore"] <- "Combined.Score"
names(train3_plot)[names(train3_plot) == "Size"]          <- "Lesion.Size"

cat("修改后列名:", names(train3_plot), "\n")

## 建模
fit_plot <- coxph(
  Surv(RecurT, Recurrence) ~ Combined.Score + Lesion.Size,
  data = train3_plot,
  x    = TRUE,
  ties = "efron"
)

print(summary(fit_plot))

## 绘图
graphics.off()
dev.new(width = 12, height = 8)

regplot::regplot(
  reg         = fit_plot,
  observation = train3_plot[1, ],
  interval    = "confidence",
  failtime    = c(6, 12, 24),
  title       = "",
  points      = TRUE,
  center      = FALSE,
  rank        = "sd",
  clickable   = FALSE,
  showP       = TRUE,
  odds        = FALSE
)

## -------------------------------------------------------
## 覆盖左侧标签文字
## 思路:用白色矩形盖住原标签,再写入新标签
## -------------------------------------------------------

## 获取当前绘图区坐标
usr <- par("usr")

## 左侧覆盖区域(根据图形效果可微调)
x_left  <- usr[1]
x_right <- usr[1] + 0.22 * (usr[2] - usr[1])

## 先盖住左侧原标签
rect(
  xleft   = x_left,
  ybottom = usr[3],
  xright  = x_right,
  ytop    = usr[4],
  col     = "white",
  border  = NA,
  xpd     = NA
)

## 重新写左侧标签
## 这些 y 位置是按当前 regplot 常见布局手工设置的
## 如有轻微上下偏差,可把数字微调
text(x = usr[1] + 0.02 * (usr[2] - usr[1]), y = usr[4] - 0.06 * (usr[4] - usr[3]),
     labels = "Points", adj = 0, cex = 1.2, font = 3, xpd = NA)

text(x = usr[1] + 0.02 * (usr[2] - usr[1]), y = usr[4] - 0.18 * (usr[4] - usr[3]),
     labels = "Combined Score", adj = 0, cex = 1.2, xpd = NA)

text(x = usr[1] + 0.02 * (usr[2] - usr[1]), y = usr[4] - 0.33 * (usr[4] - usr[3]),
     labels = "Lesion Size", adj = 0, cex = 1.2, xpd = NA)

text(x = usr[1] + 0.02 * (usr[2] - usr[1]), y = usr[4] - 0.47 * (usr[4] - usr[3]),
     labels = "Total points", adj = 0, cex = 1.2, font = 3, xpd = NA)

text(x = usr[1] + 0.14 * (usr[2] - usr[1]), y = usr[4] - 0.73 * (usr[4] - usr[3]),
     labels = "24-month Recurrence Risk", adj = 0, cex = 1.1, xpd = NA)

text(x = usr[1] + 0.14 * (usr[2] - usr[1]), y = usr[4] - 0.86 * (usr[4] - usr[3]),
     labels = "12-month Recurrence Risk", adj = 0, cex = 1.1, xpd = NA)

text(x = usr[1] + 0.14 * (usr[2] - usr[1]), y = usr[4] - 0.99 * (usr[4] - usr[3]),
     labels = "6-month Recurrence Risk", adj = 0, cex = 1.1, xpd = NA)

cat("\n========== 完成,请查看 Plots 窗口 ==========\n")

包含修改成分,输出Plots需要修改

一个典型的列线图通常包含以下几个关键部分:

(1)变量轴:每个预测变量(如年龄、性别、睡眠质量等)都有一个独立的轴,清晰地展示各自的影响。

(2)点数轴:用于将变量值转换为相应的点数,便于后续计算。

(3)总分轴:汇总所有变量的点数,提供一个整体评分,帮助快速评估风险。

(4)概率轴:根据总分预测事件发生的概率,使得临床决策更加科学、直观。

相关推荐
小小测试开发3 小时前
安装 Python 3.10+
开发语言·人工智能·python
KaMeidebaby4 小时前
卡梅德生物技术快报|PD1 单克隆抗体定制配套 N 糖全谱质控开发
前端·人工智能·算法·数据挖掘·数据分析
我叫唧唧波5 小时前
Python+AI 全栈学习笔记
人工智能·python·学习
哈哈,柳暗花明5 小时前
人工智能专业术语详解(E)
人工智能·专业术语
AI极客菌5 小时前
AI绘画工具中,为什么专业玩家爱用Stable Diffusion,普通玩家却喜欢Midjourney?
大数据·人工智能·ai·ai作画·stable diffusion·aigc·midjourney
人工智能AI技术5 小时前
FLUX.2[klein]开源!小香蕉平替,本地部署AI绘画的极简方案
人工智能·ai作画·aigc
腾视科技AI5 小时前
腾视科技大模型一体机解决方案:低成本私有化落地,重塑行业智能应用新格局
大数据·人工智能·科技·ai·边缘计算·算力·ai算力
pusheng20255 小时前
IFSJ全英文专访:中国创新力量重塑先进气体感知技术,赋能全球关键基础设施安全
前端·网络·人工智能·物联网·安全
魔点科技5 小时前
魔点门禁门常开计划解决早高峰排队、忘落锁、多门手动调模式痛点
人工智能·智能硬件·智能门禁·考勤门禁·魔点科技
程序员大辉5 小时前
ComfyUI整合包V8中文版 | 2026年3月最新版,开箱即用,零门槛跑AI绘画和AI视频,新手进阶都能上手,附整合包
人工智能·ai作画