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 【问题描述】:

我已经拟合了一个逻辑回归模型,该模型从 mpgmtcars 数据集)预测二元结果 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 的最简单方法。 这些很有帮助。我想知道是否有任何方法可以在不使用lmglm 的情况下找到这样的值。换句话说,我们可以直接找到R中定义的数学函数对应的x值吗?【参考方案2】:

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。当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值(预测器)的主要内容,如果未能解决你的问题,请参考以下文章

R语言使用 LOWESS技术图分析逻辑回归中的函数形式

在R中,根据当前的统计值,如何知道原始数据并应用回归分析

R线性回归模型构建:残差值回归值预测域置信区间

R语言 逻辑回归

spss回归分析结果图,帮忙看一下,麻烦详细地解释解释

spss 做logistic回归 输出结果如何解读