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(p1−p)=β0+β1⋅x:
> 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 x
es 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
glm(y ~ x)
no le da una regresión logística, debe configurarfamily=binomial(link="logit")
. Tenga en cuenta que la salida diceDispersion parameter for gaussian family
, nobinomial family
. Si lo hace bien, enfitted(glm.mod)
realidad devuelve las probabilidades estimadas, no los logits. Obtienes los logits conpredict(glm.mod, type="link")
.glm.fitted
ylogit2prop.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 paralogit2prop
yinvlogit
. Por lo tanto, igualmente, pregunto por quéglm.fitted
yinvlogit
no devuelvo exactamente los mismos números.fuente