Como usar betas de regressão logística + dados brutos para obter probabilidades

17

Eu tenho um modelo montado (da literatura). Eu também tenho os dados brutos para as variáveis ​​preditivas.

Qual é a equação que devo usar para obter probabilidades? Basicamente, como combinar dados brutos e coeficientes para obter probabilidades?

user333
fonte

Respostas:

15

Aqui está a resposta do pesquisador aplicado (usando o pacote estatístico R).

Primeiro, vamos criar alguns dados, ou seja, estou simulando dados para um simples de modelo de regressão logística bivariada :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)

O preditor xé uma variável dicotômica:

> 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

Segundo, estime a interceptação ( ) e a inclinação ( ). Como você pode ver, a interceptação é e a inclinação é .β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)

[...]

Terceiro, R, como a maioria dos pacotes estatísticos, pode calcular os valores ajustados, ou seja, as probabilidades. Vou usar esses valores como referência.

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

Quarto, essa etapa se refere diretamente à sua pergunta: temos os dados brutos (aqui: ) e os coeficientes ( e ). Agora, vamos calcular os logits e salvar esses valores ajustados em :xβ0β1glm.rcdm

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

O passo final é uma comparação dos valores ajustados com base na fittedfunção de R ( glm.fitted) e na minha abordagem "artesanal" ( logit2prop.glm.rdcm). Minha própria função logit2prop(consulte a primeira etapa) converte logits em probabilidades:

> ## 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
Bernd Weiss
fonte
6
Observe que glm(y ~ x)não fornece uma regressão logística, você deve definir family=binomial(link="logit"). Observe que a saída diz que Dispersion parameter for gaussian familynão binomial family. Se você fizer certo, fitted(glm.mod)na verdade retornará as probabilidades estimadas, não os logits. Você obtém os logits com predict(glm.mod, type="link").
caracal 20/05
Aua! Eu consertei isso. Muito obrigado, @caracal, por me corrigir! Isso é realmente embaraçoso (é ainda mais embaraçoso, porque eu já dei a resposta correta em outro tópico da SO ).
Bernd Weiss
1
o braço do pacote possui a função invlogit, que é sua função logit2prop.
Manoel Galdino
Não deveríamos ter obtido exatamente os mesmos números para glm.fittede logit2prop.glm.rdcm.? Existem algumas diferenças muito, muito pequenas. Não consegui entender por que não temos exatamente os mesmos números no seu exemplo. Quando eu verifico; library(arm); data.frame(logit2prop(glm.rdcm), invlogit(glm.rdcm))produz exatamente os mesmos resultados para logit2prope invlogit. Daí, igualmente, pergunto por que glm.fittede invlogitnão retorno exatamente os mesmos números?
Erdogan CEVHER
20

f:xlogx1xg:xexpx1+expx

π

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

πg

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

ocram
fonte
E quanto à regressão logística ordinal? Qual seria a lógica então?
User333 20/05
@ user333: Bem ... eu não brinquei muito com a regressão logística ordinal ... mas acho que se usa a mesma função de link. Em qualquer caso, a lógica é a mesma: inversa da função de ligação para obter a variável resposta ...
Ocram
sim ... mas como sei quais probabilidades estão mapeadas para quais categorias de destino?
User333
@ user333, sua pergunta era sobre regressão logística. Se você também deseja respostas sobre regressão ordinal, adicione-o à pergunta.
mpiktas 27/05