从0开始学习R语言--Day47--Nomogram

我们在用回归做医疗数据的分析时,往往需要知道病人的存活率,但这里的存活率往往指的是各种排列组合的存活率,但是直接输出所有分组又很浪费计算量,且在结果中找我们想要的组合也很费力。

而nomogram则提供了一种计分的方式,通过给不同分组的每种情况赋分,判断贡献,让我们可以直接观察我们关心数据的区间,从而直接知晓所要分类的病人的生存率。

以下是一个例子:

R 复制代码
# 加载必要的包
library(regplot)

# 生成模拟数据
set.seed(123)
n <- 200
data <- data.frame(
  年龄 = round(rnorm(n, mean = 60, sd = 10)),
  肿瘤大小 = round(runif(n, min = 1, max = 5), 1),
  吸烟 = factor(sample(c("是", "否"), n, replace = TRUE, prob = c(0.3, 0.7))),
  生存状态 = factor(sample(c("死亡", "存活"), n, replace = TRUE, prob = c(0.4, 0.6)))
)

# 拟合逻辑回归模型
model <- glm(生存状态 ~ 年龄 + 肿瘤大小 + 吸烟, 
             family = binomial(link = "logit"), 
             data = data)

# 绘制 Nomogram
regplot(model,
        points = TRUE,          # 显示点刻度
        odds = TRUE,            # 显示OR值
        failtime = c(1, 3, 5),  # 如果做生存分析可设置时间点
        title = "Nomogram 预测模型")

输出:

R 复制代码
[[1]]
      吸烟 Points
吸烟2   是     46
吸烟1   否     58

[[2]]
  肿瘤大小 Points
1        1     24
2        2     41
3        3     58
4        4     75
5        5     92

[[3]]
   年龄 Points
1    35    104
2    40     95
3    45     85
4    50     76
5    55     67
6    60     58
7    65     49
8    70     40
9    75     31
10   80     22
11   85     13
12   90      4
13   95     -5

[[4]]
   Total Points Pr( 生存状态 )
1            80         0.2577
2           100         0.2850
3           120         0.3139
4           140         0.3443
5           160         0.3761
6           180         0.4090
7           200         0.4427
8           220         0.4770
9           240         0.5114
10          260         0.5458
11          280         0.5797

在图中可以看到,年龄对死亡风险的影响最大,吸烟的影响相对较小。对于年龄来说,每增加5岁,分数减少约9分,即年龄越大,死亡风险越高;肿瘤则是每增加1cm,分数增加约17分,这里看起来相反,实际上是因为两者的系数正负不一样,所以才这样分析。

相关推荐
西岸行者7 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意7 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码7 天前
嵌入式学习路线
学习
毛小茛7 天前
计算机系统概论——校验码
学习
babe小鑫7 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms7 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下7 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。7 天前
2026.2.25监控学习
学习
im_AMBER7 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J7 天前
从“Hello World“ 开始 C++
c语言·c++·学习