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

时间:2015-08-16 22:19:47

标签: r regression linear-regression logistic-regression predict

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

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)

enter image description here

2 个答案:

答案 0 :(得分:7)

从模型计算预测值的最简单方法是使用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的函数,以找到您的解决方案。

答案 1 :(得分:3)

您可以直接解决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。我们希望在mpg = 0.5时找到p。因此,我们需要解决的等式是:

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

一般情况下,为mpg的任何值解析p

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

或者,为了使其更容易再现:

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