predict.glm
„s type
parametrów domyślnie "link"
, które add_predictions
nie zmieniają domyślnie nie zapewni Ci żaden sposób, aby przejść do niemal z pewnością pożądane "response"
. (A GitHub issue exists; dodaj do tego swojego miłego reprezentanta, jeśli chcesz.) To powiedziawszy, nie jest trudno po prostu użyć predict
bezpośrednio w tidyverse przez dplyr::mutate
.
Należy również zauważyć, że ggplot wymusza na wartości numeryczne default
(współczynnik) w celu wykreślenia linii, co jest w porządku, z wyjątkiem tego, że "Nie" i "Tak" są zastąpione przez 1 i 2, a prawdopodobieństwo zwrócone przez predict
będzie zawierać się w przedziale od 0 do 1. Jawne wymuszanie na numeryczne i odejmowanie jednego powoduje naprawienie wykresu, jednak wymagane jest dodatkowe wywołanie, aby naprawić etykiety.
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))
Należy również pamiętać, że jeśli chcesz to działka, geom_smooth
można obliczyć bezpośrednio prognozy dla Ciebie:
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))