R-手动绘制校准图

时间:2018-09-03 22:07:12

标签: r logistic-regression

根据Ewout W. Steyerberg的临床预测模型,我们得出以下结论:

  

校准图在x轴上有预测,而结果在   y轴。身份认同有助于定位:完美   预测应该在45°线上。对于线性回归,   校准图会生成一个简单的散点图。对于二进制   结果,该图仅包含y轴的0和1值。   没有直接观察到概率。但是,平滑技术   可以用来估计观察到的结果概率(p   (y = 1))与预测概率的关系。观察到0/1   通过合并结果将结果替换为0到1之间的值   具有相似预测概率的受试者的值,例如使用   黄土算法。

我正在为具有二进制结果的逻辑回归模型拟合。以下是示例代码。校准曲线看起来很奇怪,因为样品很小。我主要想知道方法是否正确。

library(tidyverse)

tibble_ex <- tibble(
  event = c(1, 0, 1, 0, 0, 1),
  weight = c(100, 200, 110, 210, 220, 105)
)

model <- glm(event ~ weight, family = 'binomial', data = tibble_ex) 

tibble_ex <- tibble_ex %>%
  mutate(pred = predict(model, type = 'response'))

tibble_ex %>%
  arrange(pred) %>%
  ggplot(aes(x = pred, y = event)) +
  stat_smooth(method = 'glm', method.args = list(family = binomial), se = F) +
  geom_abline()

enter image description here

1 个答案:

答案 0 :(得分:0)

如果情节,您只是缺少平滑部分。如果要使用glm绘制曲线,则必须将其用于样条曲线。

EXC_BAD_ACCESS (code=EXC_I386_GPFLT)

但是,我注意到Steyerberg和Harrell更喜欢使用黄土平滑处理。

tibble_ex %>%
arrange(pred) %>%
ggplot(aes(x = pred, y = event)) +
scale_y_continuous(limits = c(0, 1), breaks = seq(0, 1, by = 0.2)) +
scale_x_continuous(limits = c(0, 1), breaks = seq(0, 1, by = 0.2)) +
stat_smooth(method = "glm", formula = y ~ ns(x,1), size = 1) +
geom_abline()

我还想参考Frank Harrell的rms软件包。有许多有用的功能可以拟合和验证模型,包括校准图。下面的代码绘制了校准曲线并提供了其他统计信息。

tibble_ex %>%
arrange(pred) %>%
ggplot(aes(x = pred, y = event)) +
scale_y_continuous(limits = c(0, 1), breaks = seq(0, 1, by = 0.2)) +
scale_x_continuous(limits = c(0, 1), breaks = seq(0, 1, by = 0.2)) +
geom_smooth(aes(x = pred, y = event), color = "red", se = F, method = "loess") + 
# you can use stat_smooth in place of geom_smooth
geom_abline()