geom_abline для логистической регрессии (ggplot2)

Прошу прощения, если этот вопрос очень прост, однако я не смог найти решение своей проблемы. Я хочу построить линии логистической регрессии с помощью ggplot2. Проблема в том, что я не могу использовать geom_abline потому что у меня нет оригинальной модели, только наклон и перехват для каждой линии регрессии. Я использую этот подход для линейных регрессий, и это прекрасно работает с geom_ablineпотому что вы можете просто дать несколько уклонов и перехватов для функции.

geom_abline (данные = оценки, aes(intercept = inter, slope = slo)

где inter а также slo векторы с более чем одним значением.

Если я попробую тот же подход с коэффициентами из логистической регрессии, я получу неправильные линии регрессии (линейные). Я пытаюсь использовать geom_line, однако я не могу использовать функцию predict генерировать прогнозируемые значения, потому что у меня нет исходной модели objetc.

Любое предложение?

Заранее спасибо, Густаво

1 ответ

Решение

Если модель имеет логит-ссылку, вы можете построить прогноз, используя только перехват (coefs[1]) и уклон (coefs[2]) как:

library(ggplot2)

n <- 100L
x <- rnorm(n, 2.0, 0.5)
y <- factor(rbinom(n, 1L, plogis(-0.6 + 1.0 * x)))

mod <- glm(y ~ x, binomial("logit"))
coefs <- coef(mod)

x_plot <- seq(-5.0, 5.0, by = 0.1)
y_plot <- plogis(coefs[1] + coefs[2] * x_plot)

plot_data <- data.frame(x_plot, y_plot)

ggplot(plot_data) + geom_line(aes(x_plot, y_plot), col = "red") + 
        xlab("x") + ylab("p(y | x)") +
        scale_y_continuous(limits = c(0, 1)) + theme_bw()

участок 1

редактировать

Здесь один из способов построения k линии прогнозируемой вероятности на том же графике, следующие из предыдущего кода:

library(reshape2)

k <- 5L

intercepts <- rnorm(k, coefs[1], 0.5)
slopes <- rnorm(k, coefs[2], 0.5)

x_plot <- seq(-5.0, 5.0, by = 0.1)
model_predictions <- sapply(1:k, function(idx) {
            plogis(intercepts[idx] + slopes[idx] * x_plot)
        })

colnames(model_predictions) <- 1:k
plot_data <- as.data.frame(cbind(x_plot, model_predictions))
plot_data_melted <- melt(plot_data, id.vars = "x_plot", variable.name = "model", 
        value.name = "y_plot")

ggplot(plot_data_melted) + geom_line(aes(x_plot, y_plot, col = model)) + 
        xlab("x") + ylab("p(y | x)") +
        scale_y_continuous(limits = c(0, 1)) + theme_bw()

участок 2

Другие вопросы по тегам