R:计算和解释逻辑回归中的优势比

Posted

技术标签:

【中文标题】R:计算和解释逻辑回归中的优势比【英文标题】:R: Calculate and interpret odds ratio in logistic regression 【发布时间】:2017-05-14 00:53:10 【问题描述】:

我无法解释逻辑回归的结果。我的结果变量是 Decision 并且是二进制的(0 或 1,分别不取或取乘积)。 我的预测变量是 Thoughts 并且是连续的,可以是正数或负数,并且四舍五入到小数点后第二位。 我想知道随着Thoughts 的变化,产品发生变化的概率如何。

逻辑回归方程为:

glm(Decision ~ Thoughts, family = binomial, data = data)

根据该模型,Thoughts 对Decision 的概率有显着影响(b = .72,p = .02)。将Decision 的优势比确定为Thoughts 的函数:

exp(coef(results))

优势比 = 2.07。

问题:

    我如何解释优势比?

      2.07 的优势比是否意味着 Thoughts 的 0.01 增加(或减少)会影响服用(或不服用)该产品的几率 0.07OR 这是否意味着随着Thoughts 增加(减少)0.01,服用(不服用)产品的几率会增加(减少)大约 2 个单位?

    如何将Thoughts 的优势比转换为Decision 的估计概率? 还是只能估计Decision在某个Thoughts分数的概率(即计算Thoughts == 1时的估计拿货概率)?

【问题讨论】:

【参考方案1】:

我找到了这个 epiDisplay 包,工作正常!它可能对其他人有用,但请注意,您的置信区间或确切结果会因使用的包而异,因此最好阅读包详细信息并选择适合您数据的那个。

这是一个示例代码:

library(epiDisplay)
data(Wells, package="carData")
glm1 <- glm(switch~arsenic+distance+education+association, 
            family=binomial, data=Wells)
logistic.display(glm1)

Source website

【讨论】:

【参考方案2】:

上面的logits概率公式exp(logit)/(1+exp(logit))可能没有任何意义。该公式通常用于将赔率转换为概率。然而,在逻辑回归中,优势比更像是两个优势值之间的比率(恰好已经是比率)。使用上述公式如何定义概率?相反,从优势比中减去 1 以找到一个百分比值,然后将该百分比解释为在给定预测变量的情况下结果增加/减少 x% 的几率,这可能更正确。

【讨论】:

exp(x)/(1+exp(x)) 是逆 logit 函数。该公式用于将对数几率转换为概率,如果使用得当,您可以获得逻辑回归中不同协变量值的概率估计【参考方案3】:

赔率和概率是两种不同的衡量标准,它们的目的都是为了衡量事件发生的可能性。他们不应该相互比较,只能相互比较! 虽然使用“优势比”(优势 1 / 优势 2)比较两个预测变量值的优势(同时保持其他指标不变),但概率的相同程序称为“风险比率”(概率 1 / 概率 2)。

一般而言,在比率方面,赔率比概率更受青睐,因为概率限制在 0 和 1 之间,而赔率定义为 -inf 到 +inf。

要轻松计算优势比(包括置信区间),请参阅 oddsratio 包:

library(oddsratio)
fit_glm <- glm(admit ~ gre + gpa + rank, data = data_glm, family = "binomial") 

# Calculate OR for specific increment step of continuous variable
or_glm(data = data_glm, model = fit_glm, 
       incr = list(gre = 380, gpa = 5))

  predictor oddsratio CI.low (2.5 %) CI.high (97.5 %)          increment
1       gre     2.364          1.054            5.396                380
2       gpa    55.712          2.229         1511.282                  5
3     rank2     0.509          0.272            0.945 Indicator variable
4     rank3     0.262          0.132            0.512 Indicator variable
5     rank4     0.212          0.091            0.471 Indicator variable

您可以在此处简单地指定连续变量的增量并查看生成的优势比。在此示例中,当预测变量 gpa 增加 5 时,出现响应 admit 的可能性会增加 55 倍。

如果您想预测模型的概率,只需在预测模型时使用 type = response。这将自动将对数赔率转换为概率。然后,您可以根据计算出的概率计算风险比率。有关详细信息,请参阅?predict.glm

【讨论】:

我发现这个包非常有用,在current documentation 中我认为你必须使用or_glm 而不是calc.oddsratio.glm 谢谢,我更新了代码。很高兴你发现这个包很有用! 没想到你是作者!非常感谢您提供! 您说'赔率是从-inf 到+inf 定义的',但它们不是限制在0 和inf 之间吗?负优势比意味着什么? 谢谢!这里的增量是什么意思?我尝试运行此代码,但我不知道如何选择增量值。是否有自动化的方法来做到这一点?【参考方案4】:

r 中的逻辑回归返回的系数是 logit,或赔率的对数。要将 logits 转换为优势比,您可以将其取幂,就像您在上面所做的那样。要将 logits 转换为概率,可以使用函数 exp(logit)/(1+exp(logit))。但是,关于此过程有一些需要注意的事项。

首先,我将使用一些可重现的数据来说明

library('MASS')
data("menarche")
m<-glm(cbind(Menarche, Total-Menarche) ~ Age, family=binomial, data=menarche)
summary(m)

这会返回:

Call:
glm(formula = cbind(Menarche, Total - Menarche) ~ Age, family = binomial, 
    data = menarche)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.0363  -0.9953  -0.4900   0.7780   1.3675  

Coefficients:
             Estimate Std. Error z value Pr(>|z|)    
(Intercept) -21.22639    0.77068  -27.54   <2e-16 ***
Age           1.63197    0.05895   27.68   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 3693.884  on 24  degrees of freedom
Residual deviance:   26.703  on 23  degrees of freedom
AIC: 114.76

Number of Fisher Scoring iterations: 4

显示的系数适用于 logits,就像在您的示例中一样。如果我们绘制这些数据和这个模型,我们会看到拟合二项式数据的逻辑模型特征的 sigmoidal 函数

#predict gives the predicted value in terms of logits
plot.dat <- data.frame(prob = menarche$Menarche/menarche$Total,
                       age = menarche$Age,
                       fit = predict(m, menarche))
#convert those logit values to probabilities
plot.dat$fit_prob <- exp(plot.dat$fit)/(1+exp(plot.dat$fit))

library(ggplot2)
ggplot(plot.dat, aes(x=age, y=prob)) + 
  geom_point() +
  geom_line(aes(x=age, y=fit_prob))

请注意,概率的变化不是恒定的 - 曲线首先缓慢上升,然后在中间更快,然后在最后趋于平稳。 10和12的概率差远小于12和14的概率差。也就是说,如果不转换概率,不可能用一个数字概括年龄和概率的关系。

回答您的具体问题:

您如何解释优势比?

截距值的优势比是当 x = 0(即零想法)时“成功”的几率(在您的数据中,这是获得产品的几率)。您的系数的优势比是当您添加一个完整的 x 值(即 x=1;一个想法)时,高于该截距值的优势增加。使用初潮数据:

exp(coef(m))

 (Intercept)          Age 
6.046358e-10 5.113931e+00 

我们可以将此解释为年龄 = 0 时发生初潮的几率是 0.00000000006。或者,基本上不可能。将年龄系数取幂告诉我们每个年龄单位的初潮几率的预期增加。在这种情况下,它刚刚超过五倍。优势比为 1 表示没有变化,而优势比为 2 表示翻倍,等等。

您的优势比为 2.07 意味着“想法”每增加 1 个单位,使用该产品的几率就会增加 2.07 倍。

如何将想法的优势比转换为估计的决策概率?

您需要对选定的想法值执行此操作,因为如上图所示,在 x 值的范围内变化不是恒定的。如果你想要某个想法值的概率,得到如下答案:

exp(intercept + coef*THOUGHT_Value)/(1+(exp(intercept+coef*THOUGHT_Value))

【讨论】:

非常感谢!您的其他示例确实有助于将您的解释置于上下文中。 @SudyMajd 欢迎来到 SO!如果您接受 tridle 的回答,请点击答案旁边的绿色标记。这样做,您尊重回答问题的人并将问题标记为已解决。 这是一个非常彻底的答案。如果您在建模之前对协变量进行了缩放,对解释有何影响?您是否应该在检查优势比之前“取消缩放”它们,这是否可行? @Emily 如果您已经缩放了预测变量,那么解释是相同的,除了“一个单位变化”意味着 1 个标准差。如果您想要缩放和未缩放的预测变量的值,最简单的方法可能是拟合两个单独的模型:一个是缩放的,一个是未缩放的。 截距和年龄系数的指数不是优势比。只有与因子变量项相关的系数的指数才能被视为优势比。这个答案具有误导性

以上是关于R:计算和解释逻辑回归中的优势比的主要内容,如果未能解决你的问题,请参考以下文章

TensorFlow逻辑回归原理与实现(超详细)

R中逻辑回归的confusionMatrix

算法之逻辑回归

详解逻辑回归与评分卡-逻辑回归中的特征工程菜菜的sklearn课堂笔记

R语言广义线性模型函数GLMR中有几种logistic回归扩展和变异robust包中的glmRob函数鲁棒logistic回归ms包中的lrm函数拟合序数逻辑回归

解释多类逻辑回归中的预测概率