2 votos

Visualización de la regresión logística con simulaciones

Estoy tratando de simular una regresión logística y ver los diferentes parámetros que he modelado.

Aquí hay un ejemplo reproducible y el resultado.

set.seed(98765)
n = 20
x1 = rnorm(n = n, mean = 6, sd = 1)
# Rescale the data
x1z = scale(x1)
z = 0 + 2*x1z  # this is the equation that gives the LOG odds. Note $p = odds/(1+odds)$
pr = 1/(1+exp(-z)) # Transform to get the LOG(odds) # inverse-logit function; Note that 1/(1+exp(-x))== exp(x)/(1+exp(x)), same as pr2 = boot::inv.logit(z)
# pr2 = exp(z)/(1+exp(z)) #  z being the log odds. Using the exp (exponential with natural number), you get the odds. The use the $p = odds/(1+odds)$ formula to get teh probability
y = rbinom(n = n, size = 1, prob = pr) # Bernoulli response variable (which is a special case of the binomial with size =1 )

# Combine the data in a dataframe 
df = data.frame(y = y, x1 = x1)

#now feed it to glm:
glm.logist = glm( y~x1, data=df, family="binomial")
glm.sum = summary(glm.logist)

par(mfrow=c(1,2))
b.5 = scales::alpha("black",.5)
plot(z~x1, ylab = "Log Odds", pch = 19, col = b.5, xlim = c(0,10), ylim = c(-12,11))
abline(a = glm.sum$coefficients[1,1],
       b = glm.sum$coefficients[2,1])
abline(h=0, v=0,lty = 3)
points(x = 0, y=glm.sum$coefficients[1,1], pch = 19, col = "red")
text(x = 0, y=glm.sum$coefficients[1,1], labels = c("Intercept"), pos =4)

glm.sum$coefficients

plot(y~x1, data = df, col = scales::alpha("black",.5), pch = 19)
abline(h=0.5, v=mean(x1),lty = 3)
newdata <- data.frame(x1=seq(min(x1), max(x1),len=n))
newdata$y = predict(object = glm.logist, newdata = newdata, type = "response") 
lines(x = newdata$x1,
      y = newdata$y, col = "red",lwd = 2)

1/(1+exp(-glm.sum$coefficients[1,1]))
1/(1+exp(-glm.sum$coefficients[2,1]))

enter image description here

  • Así que la "intercepción" que se puso en el z = 0 + 2*x1z no se muestra en el primer gráfico porque espero que no tenga el mismo significado que el intercepto del modelo lineal. ¿Cuál es el papel del intercepto en el modelo de regresión? De la forma en que está codificado, el cambio del intercepto en el logaritmo de las probabilidades aquí z = intercept + 2*x1z , cambia la altura de la línea. Si este "intercepto" es lo suficientemente grande, todos los valores están por encima de 0 (logaritmo de probabilidades) y, por tanto, todos los valores de respuesta son 1. Entonces, ¿qué significa ese "intercepto"?
  • Además, sé que sólo hay 20 puntos en la simulación, pero ¿por qué la línea está tan por debajo de los datos en el gráfico de probabilidades logarítmicas?

1voto

alexs77 Puntos 36
  • El intercepto en un modelo de regresión logística representa la probabilidad logarítmica de respuesta cuando todas las demás covariables del modelo son iguales a 0. Una probabilidad logarítmica de 0 implica una probabilidad de 0,5. En teoría, la probabilidad logarítmica debe $\infty$ para que todas las respuestas sean 1. Su descripción de la relación entre las probabilidades logarítmicas y la probabilidad de respuesta es errónea en este caso y debe ser comprobada.

  • El primer gráfico es más bajo porque se ha trazado el esperado como los puntos y el actual las probabilidades de los logaritmos como la línea. Cambia la semilla y verás fácilmente el efecto de la variabilidad aleatoria en la muestra.

    par(mfrow=c(1,3))
    b.5 = scales::alpha("black",.5)
    plot(z~x1z, ylab = "Log Odds", pch = 19, col = b.5, xlim = c(-5,5), ylim = c(-12,11))
    abline(a = 0,
         b = 2, col = "red")
    abline(h=0, v=0,lty = 3)
    
    plot(z~x1, ylab = "Log Odds", pch = 19, col = b.5, xlim = c(0,10), ylim = c(-12,11))
    abline(a = glm.sum$coefficients[1,1],
           b = glm.sum$coefficients[2,1])
    abline(h=0, v=0,lty = 3)
    points(x = 0, y=glm.sum$coefficients[1,1], pch = 19, col = "red")
      text(x = 0, y=glm.sum$coefficients[1,1], labels = c("Intercept"), pos =4)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X