为glm

时间:2017-02-14 01:46:52

标签: r glm tidyverse modelr

我正在尝试使用tidyverse和modelr包计算一组数据的逻辑回归预测。显然我在add_predictions做错了,因为我没有收到后勤功能的“响应”,就像我在统计数据中使用'预测'功能一样。这应该很简单,但我无法弄明白,多次搜索产生的结果很少。

library(tidyverse)
library(modelr)
options(na.action = na.warn)
library(ISLR)

d <- as_tibble(ISLR::Default)
model <- glm(default ~ balance, data = d, family = binomial)
grid <- d %>% data_grid(balance) %>% add_predictions(model)

ggplot(d, aes(x=balance)) + 
    geom_point(aes(y = default)) + 
    geom_line(data = grid, aes(y = pred))

1 个答案:

答案 0 :(得分:5)

predict.glm的{​​{1}}参数默认为type"link"默认情况下不会更改,也不提供任何方式更改为几乎可以肯定的add_predictions。 (A GitHub issue exists;如果你愿意的话,可以在上面加上你的漂亮的代表。)也就是说,通过"response"直接在整齐的范围内使用predict并不难。

另请注意,ggplot正在将dplyr::mutate(一个因子)强制为数字以绘制线条,这很好,除了“否”和“是”被1和2替换,而概率default返回的值将介于0和1之间。显式强制数字并减去一个修复了该图,但需要额外的predict调用来修复标记。

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