我们在用回归做医疗数据的分析时,往往需要知道病人的存活率,但这里的存活率往往指的是各种排列组合的存活率,但是直接输出所有分组又很浪费计算量,且在结果中找我们想要的组合也很费力。
而nomogram则提供了一种计分的方式,通过给不同分组的每种情况赋分,判断贡献,让我们可以直接观察我们关心数据的区间,从而直接知晓所要分类的病人的生存率。
以下是一个例子:
# 加载必要的包
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 预测模型")
输出:
[[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分,这里看起来相反,实际上是因为两者的系数正负不一样,所以才这样分析。