R:计算和解释逻辑回归中的比值比
R: Calculate and interpret odds ratio in logistic regression
我无法解释逻辑回归的结果。我的结果变量是 Decision
并且是二进制的(0 或 1,分别是不取或取产品)。
我的预测变量是 Thoughts
并且是连续的,可以是正数也可以是负数,并且四舍五入到小数点后第二位。
我想知道随着 Thoughts
的变化,乘积的概率如何变化。
逻辑回归方程为:
glm(Decision ~ Thoughts, family = binomial, data = data)
根据这个模型,Thought
s 对 Decision
的概率有显着影响 (b = .72, p = .02)。确定 Decision
的比值比作为 Thoughts
:
的函数
exp(coef(results))
优势比 = 2.07。
问题:
我如何解读比值比?
- 优势比 2.07 是否意味着
Thoughts
增加(或减少)0.01 会影响服用(或不服用)产品的几率 0.07 或
- 这是否意味着随着
Thoughts
增加(减少)0.01,服用(不服用)产品的几率增加(减少)大约 2 个单位?
如何将优势比 Thoughts
转换为估计概率 Decision
?
还是只能在某个Thoughts
的分数下估计Decision
的概率(即计算在Thoughts == 1
时拿下产品的估计概率)?
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)
这个returns:
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
显示的系数用于对数,就像您的示例中一样。如果我们绘制这些数据和这个模型,我们会看到 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(即零想法)时 "success"(在您的数据中,这是采取产品的优势)的优势。当您添加一个完整的 x 值(即 x=1;一个想法)时,您的系数的比值比是高于该截距值的比值增加。使用初潮数据:
exp(coef(m))
(Intercept) Age
6.046358e-10 5.113931e+00
我们可以将此解释为 0 岁初潮的几率为 .00000000006。或者,基本上不可能。对年龄系数取幂告诉我们每个年龄单位初潮几率的预期增加。在这种情况下,它刚刚超过五倍。优势比为 1 表示没有变化,而优势比为 2 表示翻倍,依此类推。
您的优势比为 2.07 意味着 'Thoughts' 每增加 1 个单位,服用该产品的几率就会增加 2.07 倍。
如何将想法的优势比转换为估计的决策概率?
您需要对选定的思想值执行此操作,因为正如您在上图中所见,x 值范围内的变化不是恒定的。如果你想要一些思想价值的概率,得到答案如下:
exp(intercept + coef*THOUGHT_Value)/(1+(exp(intercept+coef*THOUGHT_Value))
赔率和概率是两种不同的衡量标准,两者都针对衡量事件发生的可能性的相同目标。他们不应该相互比较,只能相互比较!
虽然使用 "odds ratio" (odds1 / odds2) 比较两个预测值的几率(同时保持其他值不变),但概率的相同过程称为 "risk ratio"(probability1 / probability2)。
一般来说,就比率而言,赔率优于概率,因为概率限制在 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
。
上面的logits概率公式,exp(logit)/(1+exp(logit)),可能没有任何意义。该公式通常用于将赔率转换为概率。然而,在逻辑回归中,优势比更像是两个优势值之间的比率(恰好已经是比率)。如何使用上述公式定义概率?相反,从优势比中减去 1 以找到一个百分比值,然后将该百分比解释为给定预测变量的结果 increase/decrease x 百分比的几率可能更正确。
我找到了这个 epiDisplay 软件包,效果很好!它可能对其他人有用,但请注意,您的置信区间或确切结果会因所使用的包而异,因此最好阅读包的详细信息并选择适合您的数据的包。
这是一个示例代码:
library(epiDisplay)
data(Wells, package="carData")
glm1 <- glm(switch~arsenic+distance+education+association,
family=binomial, data=Wells)
logistic.display(glm1)
我无法解释逻辑回归的结果。我的结果变量是 Decision
并且是二进制的(0 或 1,分别是不取或取产品)。
我的预测变量是 Thoughts
并且是连续的,可以是正数也可以是负数,并且四舍五入到小数点后第二位。
我想知道随着 Thoughts
的变化,乘积的概率如何变化。
逻辑回归方程为:
glm(Decision ~ Thoughts, family = binomial, data = data)
根据这个模型,Thought
s 对 Decision
的概率有显着影响 (b = .72, p = .02)。确定 Decision
的比值比作为 Thoughts
:
exp(coef(results))
优势比 = 2.07。
问题:
我如何解读比值比?
- 优势比 2.07 是否意味着
Thoughts
增加(或减少)0.01 会影响服用(或不服用)产品的几率 0.07 或 - 这是否意味着随着
Thoughts
增加(减少)0.01,服用(不服用)产品的几率增加(减少)大约 2 个单位?
- 优势比 2.07 是否意味着
如何将优势比
Thoughts
转换为估计概率Decision
?
还是只能在某个Thoughts
的分数下估计Decision
的概率(即计算在Thoughts == 1
时拿下产品的估计概率)?
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)
这个returns:
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
显示的系数用于对数,就像您的示例中一样。如果我们绘制这些数据和这个模型,我们会看到 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(即零想法)时 "success"(在您的数据中,这是采取产品的优势)的优势。当您添加一个完整的 x 值(即 x=1;一个想法)时,您的系数的比值比是高于该截距值的比值增加。使用初潮数据:
exp(coef(m))
(Intercept) Age
6.046358e-10 5.113931e+00
我们可以将此解释为 0 岁初潮的几率为 .00000000006。或者,基本上不可能。对年龄系数取幂告诉我们每个年龄单位初潮几率的预期增加。在这种情况下,它刚刚超过五倍。优势比为 1 表示没有变化,而优势比为 2 表示翻倍,依此类推。
您的优势比为 2.07 意味着 'Thoughts' 每增加 1 个单位,服用该产品的几率就会增加 2.07 倍。
如何将想法的优势比转换为估计的决策概率?
您需要对选定的思想值执行此操作,因为正如您在上图中所见,x 值范围内的变化不是恒定的。如果你想要一些思想价值的概率,得到答案如下:
exp(intercept + coef*THOUGHT_Value)/(1+(exp(intercept+coef*THOUGHT_Value))
赔率和概率是两种不同的衡量标准,两者都针对衡量事件发生的可能性的相同目标。他们不应该相互比较,只能相互比较!
虽然使用 "odds ratio" (odds1 / odds2) 比较两个预测值的几率(同时保持其他值不变),但概率的相同过程称为 "risk ratio"(probability1 / probability2)。
一般来说,就比率而言,赔率优于概率,因为概率限制在 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
。
上面的logits概率公式,exp(logit)/(1+exp(logit)),可能没有任何意义。该公式通常用于将赔率转换为概率。然而,在逻辑回归中,优势比更像是两个优势值之间的比率(恰好已经是比率)。如何使用上述公式定义概率?相反,从优势比中减去 1 以找到一个百分比值,然后将该百分比解释为给定预测变量的结果 increase/decrease x 百分比的几率可能更正确。
我找到了这个 epiDisplay 软件包,效果很好!它可能对其他人有用,但请注意,您的置信区间或确切结果会因所使用的包而异,因此最好阅读包的详细信息并选择适合您的数据的包。
这是一个示例代码:
library(epiDisplay)
data(Wells, package="carData")
glm1 <- glm(switch~arsenic+distance+education+association,
family=binomial, data=Wells)
logistic.display(glm1)