Я использую логистическую c регрессию, чтобы получить вероятность чего-либо при определенных входных данных. Я использую пример:
Я хочу спрогнозировать шансы кого-то поступить в аспирантуру на основе их GRE и GPA. Используя пакет visreg, он делает это очень легко и красиво с грядками.
v1 <- visreg::visreg(
model,
"GPA",
scale = "response",
rug = 2,
xlab = "GPA",
ylab = "Pr(Accepted)",
type = "conditional",
by = "GRE",
breaks = c(
input$gre_in2 - 1,
input$gre_in2,
input$gre_in2 + 1
),
gg = TRUE,
fill.par = list(col = "#008DFF33")
)
В этом примере он создаст график ggplot2 с 3 гранями в 3 сечениях, которые соответствуют вашему баллу GRE +/- 1. Затем он покажет вам кривую регрессии для этого балла GRE и вероятность того, что вы допущены, поскольку ось x изменяется для GPA.
Моя проблема заключается в том, как visreg обрабатывает поперечные сечения. Аргумент breaks указывает, какие сечения мне нужны. Если разрывы = одно число, то это число сечений (таким образом, 80 даст 80 сечений, а не сечение при GRE = 80). Если это вектор чисел, то он будет создавать поперечные сечения при этих значениях переменной «by». Таким образом, у меня может быть как минимум 2 сечения. Если для разрывов не указано никакого аргумента, он будет делать это на 10-м, 50-м, 90-м процентилях, а если ввести (1), он будет делать поперечное сечение на среднем или медиане, я не уверен *. 1008 *
Другая проблема в том, что я делаю эти графики интерактивными с помощью ggplotly. Мне удалось преобразовать этот объект ggobject в объект grob, удалить лишние столбцы, затем нарисовать единственный фасет, который я хотел, на новой grid.newpage (), но такой рисунок не может быть возвращен как объект, и я не могу сделать его интерактивным с plotly.
Есть ли способ получить поперечное сечение при заданном c значении с помощью visreg без использования вектора точек, где должно быть поперечное сечение? Или я могу удалить / разделить фасет из объекта ggplot?
Спасибо
Воспроизводимый пример : Примечание здесь: Я использую только 3 оценки GRE (давайте говоря, я ввожу свою оценку как 320), чтобы построить модель glm. Данные, из которых я строю модель, имеют весь диапазон возможных оценок. Также обратите внимание, что я выбираю 3 только потому, что мне нужен вектор оценок в аргументе breaks. Я мог бы выбрать 2, но показ 3 казалось более подходящим, чтобы вы могли увидеть, как ваш шанс изменится на +/- 1 балл GRE. Я добавил наблюдения до 326, чтобы среднее / медианное значение не было 320, которое я хотел использовать в качестве входных данных для примера .
nd2 <- data.frame(GRE = 319, GPA = seq(from = 2,to = 4.33,by = 0.01))
nd2 <- rbind(nd2, data.frame(GRE = 320,GPA = seq(from = 2,to = 4.33,by = 0.01)))
nd2 <- rbind(nd2, data.frame(GRE = 321,GPA = seq(from = 2,to = 4.33,by = 0.01)))
nd2 <- rbind(nd2, data.frame(GRE = 322,GPA = seq(from = 2,to = 4.33,by = 0.01)))
nd2 <- rbind(nd2, data.frame(GRE = 323,GPA = seq(from = 2,to = 4.33,by = 0.01)))
nd2 <- rbind(nd2, data.frame(GRE = 324,GPA = seq(from = 2,to = 4.33,by = 0.01)))
nd2 <- rbind(nd2, data.frame(GRE = 325,GPA = seq(from = 2,to = 4.33,by = 0.01)))
nd2 <- rbind(nd2, data.frame(GRE = 326,GPA = seq(from = 2,to = 4.33,by = 0.01)))
nd2$pr <- seq(0,1)
model <-
stats::glm(data = nd2,pr ~ GPA + GRE,family = stats::binomial(link = logit))
v1 <- visreg::visreg(
model,
"GPA",
scale = "response",
rug = 2,
xlab = "GPA",
ylab = "Pr(Accepted)",
type = "conditional",
by = "GRE",
breaks = c(
319,
320,
321
),
gg = TRUE
)
plotly::ggplotly(v1)