r - 为 glm 使用 modelr::add_predictions

标签 r glm tidyverse modelr

我正在尝试使用 tidyverse 和 modelr 包计算一组数据的逻辑回归预测。显然我在 add_predictions 中做错了因为我没有收到逻辑函数的“响应”,就像我在 stats 中使用“预测”函数一样。这应该很简单,但我无法弄清楚,多次搜索几乎没有结果。

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.glmtype参数默认为 "link" , 其中 add_predictions默认情况下不会更改,也不会为您提供任何方式来更改为几乎肯定需要的 "response" . ( A GitHub issue exists ;如果您愿意,可以在其上添加您漂亮的 reprex。)也就是说,仅使用 predict 并不难。直接在 tidyverse 中通过 dplyr::mutate .

还要注意 ggplot 是强制的 default (a factor) to numeric 以绘制线条,这很好,除了“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))

关于r - 为 glm 使用 modelr::add_predictions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42216496/

相关文章:

r - 是否可以在 github 上放置 R 代码的自述文件,显示输出?

RMarkdown 从 bash block 访问参数

r - R中的glm()与Excel中逻辑回归的手动实现之间的结果不一致

r - 从 glm 中提取 pvalue

r - 旋转 dplyr 的 tibble 摘要的简单方法

r - 如何使用 tidyverse 中使用多个变量的传播函数?

r - 根据ggplot中的密度使geom更大

r - 在invalidatelat观察者内增加reactivevalue

r - 在 GLM 中,为什么即使给出数据,某些系数仍为 NA?

r - 将分区文件夹列转换为变量