对 glm 使用 modelr::add_predictions
Using modelr::add_predictions for glm
我正在尝试使用 tidyverse 和 modelr 包计算一组数据的逻辑回归预测。显然我在 add_predictions
中做错了,因为我没有收到逻辑函数的 "response",就像我在统计中使用 'predict' 函数时那样。这应该很简单,但我想不通,多次搜索收效甚微。
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))
predict.glm
的type
参数默认为"link"
,默认情况下add_predictions
不会更改,也不提供任何方式更改为almost-certainly 想要 "response"
。 (A GitHub issue exists;如果你愿意,可以在上面添加你的代表。)也就是说,通过 dplyr::mutate
.
在 tidyverse 中直接使用 predict
并不难
另请注意,ggplot 将 default
(一个因子)强制转换为数字以绘制直线,这很好,除了 "No" 和 "Yes" 被 1 替换和 2,而 predict
返回的概率将在 0 和 1 之间。显式强制转换为数字并减去 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))
我正在尝试使用 tidyverse 和 modelr 包计算一组数据的逻辑回归预测。显然我在 add_predictions
中做错了,因为我没有收到逻辑函数的 "response",就像我在统计中使用 'predict' 函数时那样。这应该很简单,但我想不通,多次搜索收效甚微。
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))
predict.glm
的type
参数默认为"link"
,默认情况下add_predictions
不会更改,也不提供任何方式更改为almost-certainly 想要 "response"
。 (A GitHub issue exists;如果你愿意,可以在上面添加你的代表。)也就是说,通过 dplyr::mutate
.
predict
并不难
另请注意,ggplot 将 default
(一个因子)强制转换为数字以绘制直线,这很好,除了 "No" 和 "Yes" 被 1 替换和 2,而 predict
返回的概率将在 0 和 1 之间。显式强制转换为数字并减去 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))