我如何使用Logistic回归Betas +原始数据来获取概率


17

我有一个拟合的模型(来自文献)。我也有预测变量的原始数据。

我应该使用什么等式来获得概率?基本上,我如何结合原始数据和系数来获得概率?

Answers:


15

这是应用研究人员的答案(使用统计软件包R)。

首先,让我们创建一些数据,即我正在为一个简单的双变量逻辑回归模型log(p1p)=β0+β1x

> set.seed(3124)
> 
> ## Formula for converting logit to probabilities 
> ## Source: http://www.statgun.com/tutorials/logistic-regression.html
> logit2prop <- function(l){exp(l)/(1+exp(l))}
> 
> ## Make up some data
> y <- rbinom(100, 1, 0.2)
> x <- rbinom(100, 1, 0.5)

预测变量x是二分变量:

> x
  [1] 0 1 1 1 1 1 0 1 0 1 0 1 0 0 1 1 1 0 1 1 1 1 1 1 0 0 1 1 1 1 0 0 1 0 0 1 0 0 0 1 1 1 0 1 1 1 1 
 [48] 1 1 0 1 0 0 0 0 1 0 0 1 1 0 0 0 0 1 0 0 1 1 1 0 0 1 0 0 0 0 1 1 0 1 0 1 0 1 1 1 1 1 0 1 0 0 0
 [95] 1 1 1 1 1 0

第二,估计截距()和斜率(β 1)。正如可以看到,截距β 0 = - 0.8690和斜率为β 1 = - 1.0769β0β1β0=0.8690β1=1.0769

> ## Run the model
> summary(glm.mod <- glm(y ~ x, family = "binomial"))

[...]

    Coefficients:
            Estimate Std. Error z value Pr(>|z|)   
(Intercept)  -0.8690     0.3304  -2.630  0.00854 **
x            -1.0769     0.5220  -2.063  0.03910 * 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

(Dispersion parameter for binomial family taken to be 1)

[...]

第三,像大多数统计数据包一样,R可以计算拟合值,即概率。我将使用这些值作为参考。

> ## Save the fitted values
> glm.fitted <- fitted(glm.mod)

第四,这一步直接指向你的问题:我们的原始数据(这里:),我们有系数(β 0β 1)。现在,让我们计算logit并将这些拟合值保存在中:xβ0β1glm.rcdm

> ## "Raw data + coefficients" method (RDCM)
## logit = -0.8690 + (-1.0769) * x
glm.rdcm <- -0.8690 + (-1.0769)*x

最后一步是比较基于R的fitted-函数(glm.fitted)和我的“手工”方法(logit2prop.glm.rdcm)的拟合值。我自己的函数logit2prop(请参阅第一步)将logit转换为概率:

> ## Compare fitted values and RDCM
> df <- data.frame(glm.fitted, logit2prop(glm.rdcm))
> df[10:25,]
> df[10:25,]
   glm.fitted logit2prop.glm.rdcm.
10  0.1250000            0.1250011
11  0.2954545            0.2954624
12  0.1250000            0.1250011
13  0.2954545            0.2954624
14  0.2954545            0.2954624
15  0.1250000            0.1250011
16  0.1250000            0.1250011
17  0.1250000            0.1250011
18  0.2954545            0.2954624
19  0.1250000            0.1250011
20  0.1250000            0.1250011
21  0.1250000            0.1250011
22  0.1250000            0.1250011
23  0.1250000            0.1250011
24  0.1250000            0.1250011
25  0.2954545            0.2954624

6
请注意,这glm(y ~ x)并不能为您提供逻辑回归,您必须设置family=binomial(link="logit")。注意输出显示Dispersion parameter for gaussian family不是binomial family。如果操作正确,则fitted(glm.mod)实际上返回估计的概率,而不是对数。您将获得logits predict(glm.mod, type="link")
卡拉卡尔

啊!我已经解决了。非常感谢@caracal纠正我!这真是令人尴尬(这更加令人尴尬,因为我已经在另一个SO线程中给出了正确答案)。
伯恩德·魏斯

1
程序包臂具有invlogit函数,即您的函数logit2prop。
Manoel Galdino

我们是否应该为glm.fitted和获得完全相同的数字logit2prop.glm.rdcm.?有一些非常小的差异。我不明白为什么我们的示例中没有完全相同的数字。当我检查;library(arm); data.frame(logit2prop(glm.rdcm), invlogit(glm.rdcm))产生与logit2prop和完全相同的结果invlogit。因此,同样的,我问为什么glm.fittedinvlogit回报不完全相同的数字?
Erdogan CEVHER's

20

f:xlogx1xg:xexpx1+expx

π

f(π)=β0+x1β1+x2β2+

πg

π=g(β0+x1β1+x2β2+)


序数逻辑回归如何?那么逻辑是什么?
user333 2011年

@ user333:嗯...我在序数逻辑回归中的作用还不多...但是我认为一个人使用相同的链接功能。在任何情况下,逻辑都是相同的:反转链接函数以获取响应变量...
ocram 2011年

是的...但是我怎么知道哪些概率映射到哪些目标类别?
user333 2011年

@ user333,您的问题是关于逻辑回归的,如果您也想获得关于序数回归的答案,请将其添加到问题中。
mpiktas 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.