我已经安装了一个逻辑回归模型,可以预测来自vs
(mpg
数据集)的二元结果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)
答案 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
p
是vs
= 1的概率,a
是截距,b
是mpg
的系数。从模型拟合结果(只需键入model
或summary(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]