R 中的回归(逻辑):查找特定 y 值(结果)的 x 值(预测变量)

Regression (logistic) in R: Finding x value (predictor) for a particular y value (outcome)

我已经拟合了一个逻辑回归模型,该模型从 mpgmtcars 数据集)预测二元结果 vs。情节如下所示。如何确定任何特定 vs 值的 mpg 值?例如,当 vs 的概率为 0.50 时,我想知道 mpg 的值是多少。感谢任何人可以提供的任何帮助!

model <- glm(vs ~ mpg, data = mtcars, family = binomial)

ggplot(mtcars, aes(mpg, vs)) + 
    geom_point() + 
    stat_smooth(method = "glm", method.args = list(family = "binomial"), se = FALSE)

从模型计算预测值的最简单方法是使用 predict() 函数。然后您可以使用数值求解器来查找特定的截距。例如

findInt <- function(model, value) {
    function(x) {
        predict(model, data.frame(mpg=x), type="response") - value
     }
}

uniroot(findInt(model, .5), range(mtcars$mpg))$root
# [1] 20.52229

此处 findInt 仅采用模型和特定目标值以及 returns 一个 uniroot 可以求解 0 的函数来找到您的解决方案。

您可以直接求解mpg,如下所示:

mpg = (log(p/(1-p)) - coef(model)[1])/coef(model)[2]

详细解释:

当你拟合回归模型时,你拟合的方程如下:

log(p/(1-p)) = a + b*mpg

其中pvs=1的概率,a是截距,bmpg的系数。从模型拟合结果(只需键入 modelsummary(model))我们看到 a = -8.8331 和 b = 0.4304。我们想在 p=0.5 时找到 mpg。所以,我们需要求解的方程是:

log(0.5/(1-0.5)) = -8.331 + 0.4304*mpg
log(1) = 0 = -8.331 + 0.4303*mpg

重新排列,

mpg = 8.8331/0.4304 = 20.523

一般来说,对于 p 的任何值求解 mpg

mpg = (log(p/(1-p)) + 8.8331)/0.4304

或者,为了更容易重现:

mpg = (log(p/(1-p)) - coef(model)[1])/coef(model)[2]