R中的回归(logistic):查找特定y值(结果)的x值(预测值)

hsl*_*hsl 8 regression r linear-regression predict logistic-regression

我装逻辑回归模型预测的二元结果vsmpg(mtcars数据集).情节如下所示.如何确定mpg任何特定vs值的值?例如,我有兴趣在mpg概率vs为0.50 时找出值是什么.感谢任何人都能提供的帮助!

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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

MrF*_*ick 8

从模型中计算预测值的最简单方法是使用该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
Run Code Online (Sandbox Code Playgroud)

这里findInt只取模型和特定目标值,并返回一个uniroot可以求解0 的函数来找到您的解决方案.


eip*_*i10 5

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

mpg = (log(p/(1-p)) - coef(model)[1])/coef(model)[2]
Run Code Online (Sandbox Code Playgroud)

详细说明:

当您拟合回归模型时,您要拟合的方程式如下:

log(p/(1-p)) = a + b*mpg
Run Code Online (Sandbox Code Playgroud)

,其中= 1 p的概率是截距,并且是的系数。从模型拟合结果(只是类型或)中,我们看到a = -8.8331和b = 0.4304。我们想找出何时= 0.5。因此,我们需要解决的方程是:vsabmpgmodelsummary(model)mpgp

log(0.5/(1-0.5)) = -8.331 + 0.4304*mpg
log(1) = 0 = -8.331 + 0.4303*mpg
Run Code Online (Sandbox Code Playgroud)

重新排列

mpg = 8.8331/0.4304 = 20.523
Run Code Online (Sandbox Code Playgroud)

通常,要解决mpg以下任何值p

mpg = (log(p/(1-p)) + 8.8331)/0.4304
Run Code Online (Sandbox Code Playgroud)

或者,使其更容易重现:

mpg = (log(p/(1-p)) - coef(model)[1])/coef(model)[2]
Run Code Online (Sandbox Code Playgroud)