¿Cómo puedo usar betas de regresión logística + datos en bruto para obtener probabilidades

17

Tengo un modelo ajustado (de la literatura). También tengo los datos en bruto para las variables predictivas.

¿Cuál es la ecuación que debería usar para obtener probabilidades? Básicamente, ¿cómo combino datos brutos y coeficientes para obtener probabilidades?

usuario333
fuente

Respuestas:

15

Aquí está la respuesta del investigador aplicado (usando el paquete de estadísticas R).

Primero, creemos algunos datos, es decir, estoy simulando datos para un modelo de regresión logística bivariado simple 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)

El predictor xes una variable 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

En segundo lugar, estimar la intersección ( β0 ) y la pendiente ( β1 ). Como puede ver, la intersección es β0=0.8690 y la pendiente es β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)

[...]

Tercero, R, como la mayoría de los paquetes estadísticos, puede calcular los valores ajustados, es decir, las probabilidades. Usaré estos valores como referencia.

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

Cuarto, este paso se refiere directamente a su pregunta: tenemos los datos en bruto (aquí: ) y tenemos los coeficientes ( β 0 y β 1 ). Ahora, calculemos los logits y guardemos estos valores ajustados en :xβ0β1glm.rcdm

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

El paso final es una comparación de los valores ajustados basados ​​en la función de R fitted( glm.fitted) y mi enfoque "hecho a mano" ( logit2prop.glm.rdcm). Mi propia función logit2prop(ver primer paso) convierte los logits en 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
fuente
66
Tenga en cuenta que glm(y ~ x)no le da una regresión logística, debe configurar family=binomial(link="logit"). Tenga en cuenta que la salida dice Dispersion parameter for gaussian family, no binomial family. Si lo hace bien, en fitted(glm.mod)realidad devuelve las probabilidades estimadas, no los logits. Obtienes los logits con predict(glm.mod, type="link").
caracal
Aua! He arreglado eso. Muchas gracias, @caracal, por corregirme. Esto es realmente vergonzoso (es aún más vergonzoso ya que ya he dado la respuesta correcta en otro hilo SO ).
Bernd Weiss
1
el brazo del paquete tiene la función invlogit, que es su función logit2prop.
Manoel Galdino
¿No deberíamos haber obtenido exactamente los mismos números para glm.fittedy logit2prop.glm.rdcm.? Hay algunas diferencias muy muy pequeñas. No pude entender por qué no tenemos exactamente los mismos números en su ejemplo. Cuando reviso; library(arm); data.frame(logit2prop(glm.rdcm), invlogit(glm.rdcm))produce exactamente los mismos resultados para logit2propy invlogit. Por lo tanto, igualmente, pregunto por qué glm.fittedy invlogitno devuelvo exactamente los mismos números.
Erdogan CEVHER
20

f:xlogx1xg:xexpx1+expx

π

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

πg

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

ocram
fuente
¿Qué tal la regresión logística ordinal? ¿Cuál sería la lógica entonces?
user333
@ user333: Bueno ... no he jugado mucho con la regresión logística ordinal ... pero creo que uno usa la misma función de enlace. En cualquier caso, la lógica es la misma: invertir la función de enlace para obtener la variable de respuesta ...
ocram
sí ... pero ¿cómo sé qué probabilidades se asignan a qué categorías objetivo?
user333
@ user333, su pregunta era sobre regresión logística, si también desea respuestas sobre regresión ordinal, agréguelo a la pregunta.
mpiktas