1

我正在运行逻辑回归以获得某些输入的概率。我将使用一个例子:

我想根据他们的 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 处理横截面的方式。Break 参数告诉它我想要哪些横截面。如果断点 = 一个数字,那么这就是横截面的数量(因此 80 将产生 80 个横截面,而不是 GRE=80 的横截面)。如果它是一个数字向量,那么它将在“by”变量的那些值处产生横截面。所以我只能有至少 2 个横截面。如果没有为中断输入参数,它将在第 10、50、90 个百分位数处进行,如果放入 (1),它将在平均值或中位数处进行横截面,我不确定。

另一个问题是我正在使这些图与 ggplotly 交互。我能够将此 ggobject 转换为 grob 对象,删除额外的列,然后将我想要的单个面绘制到新的 grid.newpage() 上,但是这样的绘图不能作为对象返回,我无法使其交互阴谋。

有没有一种方法可以使用 visreg 获得特定值的横截面,而无需使用横截面应该所在的点向量?或者我可以从 ggplot 对象中删除/子集一个方面吗?

谢谢

可重现的示例:请注意:我只使用 3 个 GRE 分数(假设我输入我的分数为 320)来构建 glm 模型。我构建模型的数据具有整个可能的分数范围。另请注意,我之所以选择 3 只是因为我需要在 break 参数中包含一个分数向量。我本可以选择 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)
4

0 回答 0