首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R: logistic回归中的优势比的计算与解释

R: logistic回归中的优势比的计算与解释
EN

Stack Overflow用户
提问于 2016-12-29 17:01:56
回答 4查看 134.6K关注 0票数 31

我很难理解logistic回归的结果。我的结果变量是Decision,是二进制变量(分别为0或1,而不是接受或接受产品)。

我的预测变量是Thoughts,是连续的,可以是正的,也可以是负的,并且被舍入到小数点的第二位。

我想知道,当Thoughts发生变化时,接受产品的可能性是如何变化的。

logistic回归方程为:

代码语言:javascript
运行
复制
glm(Decision ~ Thoughts, family = binomial, data = data)

根据该模型,Thoughts对Decision概率有显著影响(b = .72,p= .02)。确定Decision作为Thoughts函数的比特率

代码语言:javascript
运行
复制
exp(coef(results))

赔率比= 2.07。

问题:

  1. 我如何解释赔率比?
代码语言:javascript
运行
复制
1. Does an odds ratio of 2.07 imply that a .01 increase (or decrease) in `Thoughts` affect the odds of taking (or not taking) the product by 0.07 **OR** 
2. Does it imply that as `Thoughts` increases (decreases) by .01, the odds of taking (not taking) the product increase (decrease) by approximately 2 units?

  1. 如何将Thoughts的比数比转换为Decision的估计概率? 或者,我只能在一定的Decision分数下估计Thoughts的概率(即,计算Thoughts == 1时获得产品的估计概率)?
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-01-03 18:08:46

R中的logistic回归返回的系数是logit,或者是赔率的对数。要将逻辑转换为比数比,您可以像上面所做的那样对其进行指数化。要将逻辑转换为概率,可以使用函数exp(logit)/(1+exp(logit))。然而,关于这个程序有一些需要注意的事情。

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

代码语言:javascript
运行
复制
library('MASS')
data("menarche")
m<-glm(cbind(Menarche, Total-Menarche) ~ Age, family=binomial, data=menarche)
summary(m)

这将返回:

代码语言:javascript
运行
复制
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

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

代码语言:javascript
运行
复制
#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;一个想法)时,高于这个截距值的赔率比。使用初潮数据:

代码语言:javascript
运行
复制
exp(coef(m))

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

我们可以将此解释为在年龄=0时发生月经初潮的概率是.00000000006。或者根本不可能。年龄系数指数告诉我们,每一个年龄单位的初潮概率都会增加。在这种情况下,它只是超过了五倍。比数比1表示没有变化,而比数比2表示加倍等。

您的赔率比2.07意味着每增加1个单位的“思想”,就会使获得产品的几率增加2.07倍。

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

对于选定的思想值,您需要这样做,因为正如您在上面的图中所看到的,x值范围内的变化不是常数。如果你想要一些想法的价值的概率,得到的答案如下:

代码语言:javascript
运行
复制
exp(intercept + coef*THOUGHT_Value)/(1+(exp(intercept+coef*THOUGHT_Value))
票数 75
EN

Stack Overflow用户

发布于 2017-01-08 21:16:31

概率和概率是两种不同的衡量标准,它们都涉及到衡量将要发生的事件的可能性的相同目标。他们不应该互相比较,只应该在他们之间!

当使用“优势比”(odds1 / odds2)比较两个预测值的概率(同时保持其他值不变)时,同样的概率过程称为“风险比”(probability1 / probability2)。

一般来说,当涉及到比率时,比概率更有利,因为概率限制在0到1之间,而几率从-inf定义为+inf。

若要轻松计算赔率比(包括它们的自信间隔),请参阅oddsratio包:

代码语言:javascript
运行
复制
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

在这里,您可以简单地指定连续变量的增量,并查看由此产生的赔率比。在本例中,当预测器admit5增加时,响应5发生的可能性是5的55倍。

如果您想用模型预测概率,那么在预测模型时只需使用type = response即可。这将自动将日志赔率转换为概率。然后,您可以从计算的概率中计算风险比率。有关更多详细信息,请参阅?predict.glm

票数 24
EN

Stack Overflow用户

发布于 2020-07-31 14:15:44

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

下面是一个示例代码:

代码语言:javascript
运行
复制
library(epiDisplay)
data(Wells, package="carData")
glm1 <- glm(switch~arsenic+distance+education+association, 
            family=binomial, data=Wells)
logistic.display(glm1)

Source website

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41384075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档