predict.glm
的type
参数默认为"link"
,add_predictions
默认情况下不会更改,也不会为您提供任何更改为几乎肯定想要的"response"
. (存在一个 GitHub 问题;如果你愿意,可以在上面添加你的好表示。)也就是说,predict
直接在 tidyverse 中使用并不难dplyr::mutate
。
另请注意,为了绘制线条,ggplot 将default
(一个因素)强制为数字,这很好,除了“否”和“是”被 1 和 2 替换,而返回的概率predict
将在 0 和 1 之间. 显式强制转换为数字并减去一个可修复绘图,但需要额外scale_y_continuous
调用来修复标签。
library(tidyverse)
library(modelr)
d <- as_tibble(ISLR::Default)
model <- glm(default ~ balance, data = d, family = binomial)
grid <- d %>% data_grid(balance) %>%
mutate(pred = predict(model, newdata = ., type = 'response'))
ggplot(d, aes(x = balance)) +
geom_point(aes(y = as.numeric(default) - 1)) +
geom_line(data = grid, aes(y = pred)) +
scale_y_continuous('default', breaks = 0:1, labels = levels(d$default))
另请注意,如果您想要的只是一个情节,geom_smooth
可以直接为您计算预测:
ggplot(d, aes(balance, as.numeric(default) - 1)) +
geom_point() +
geom_smooth(method = 'glm', method.args = list(family = 'binomial')) +
scale_y_continuous('default', breaks = 0:1, labels = levels(d$default))