R中的回归(逻辑):寻找特定y值(结果)的x值(预测器)
Posted
技术标签:
【中文标题】R中的回归(逻辑):寻找特定y值(结果)的x值(预测器)【英文标题】:Regression (logistic) in R: Finding x value (predictor) for a particular y value (outcome) 【发布时间】:2015-11-09 12:09:38 【问题描述】:我已经拟合了一个逻辑回归模型,该模型从 mpg
(mtcars
数据集)预测二元结果 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 解决这个问题。 如果您需要帮助解释逻辑回归的输出,UCLA 有一个很好的概述。 为什么这个问题被否决了? 正如所写,这似乎不是关于如何在 R 中实现理解理论的问题,而是理论是什么的问题。 【参考方案1】:从模型计算预测值的最简单方法是使用 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 吗? 哦,我认为您只需要在predict
中使用type="response"
,这样您就可以返回概率而不是日志(赔率)。
啊,我没有意识到stat_smooth
默认情况下正在绘制响应。我已经更新了。
非常感谢!我试图手动解决它,但我在 R 中找不到可以让我快速完成的函数。所以我猜你定义的 findInt
函数应该是解决 x 的最简单方法。
这些很有帮助。我想知道是否有任何方法可以在不使用lm
或glm
的情况下找到这样的值。换句话说,我们可以直接找到R
中定义的数学函数对应的x值吗?【参考方案2】:
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。当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]
【讨论】:
以上是关于R中的回归(逻辑):寻找特定y值(结果)的x值(预测器)的主要内容,如果未能解决你的问题,请参考以下文章