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))