Как получить только 1 конкретное c поперечное сечение графика Visreg или как выбрать / подобрать только 1 фасетный график в объекте gg? - PullRequest
1 голос
/ 08 мая 2020

Я использую логистическую 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...