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

13

我已经拟合了一个逻辑回归模型,该模型从mtcars数据集中的mpg预测二进制结果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)

输入图像描述


x的预测值为y_hat=e^(xb+c)/(1+e^(xb+c))。解出x的值。 - MichaelChirico
如果你需要帮助解释逻辑回归的输出结果,UCLA提供了非常好的概述。 - Tchotchke
为什么这个问题被踩了? - Alex
从所写的内容来看,这似乎不是一个关于如何在R中实现已知理论的问题,而是关于该理论是什么的问题。 - Tchotchke
2个回答

10

使用 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只需要获取模型和特定的目标值,并返回一个函数,uniroot可以解决0以找到您的解。


这看起来不对。答案不应该更接近20.5吗? - eipi10
1
哦,我认为你只需要在predict中加入type="response",这样你就可以返回概率而不是对数几率。 - eipi10
非常感谢!我已经尝试手动解决,但是在R中找不到可以快速完成的函数。因此,我猜测您定义的findInt函数应该是解决x的最简单方法。 - hsl
这些很有帮助。我想知道是否有任何方法可以在不使用lmglm的情况下找到这样的值。换句话说,我们是否可以直接找到对应于在R中定义的数学函数的x值? - David C.
当你有多元回归时,如何应用解决方案?例如,当你有m <- glm(Y ~ X1 + X2,data = data,family = "binomial"),其中X1是因子,X2是连续变量,并且我们有兴趣找到X2的值。 - Malek Ik
显示剩余2条评论

7
您可以直接按照以下方式解决mpg问题:
mpg = (log(p/(1-p)) - coef(model)[1])/coef(model)[2]

详细说明:
当你拟合回归模型时,你正在拟合以下方程式:
log(p/(1-p)) = a + b*mpg

vs=1 时的概率为 p,截距为 ampg 的系数为 b。从模型拟合结果(只需键入 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]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接