¿Cómo calcular la matriz del sombrero para la regresión logística en R?


8

Quiero calcular la matriz de sombreros directamente en R para un modelo logit. Según Long (1997), la matriz de sombreros para los modelos logit se define como:

H=VX(XVX)1XV

X es el vector de variables independientes, y V es una matriz diagonal con en la diagonal.π(1π)

Utilizo la optimfunción para maximizar la probabilidad y derivar la arpillera. Así que supongo que mi pregunta es: ¿cómo calculo en R?V

Nota: Mi función de probabilidad se ve así:

loglik <-  function(theta,x,y){
y <- y
x <- as.matrix(x)
beta <- theta[1:ncol(x)]
loglik <- sum(-y*log(1 + exp(-(x%*%beta))) - (1-y)*log(1 + exp(x%*%beta)))
return(-loglik)
}

Y paso esto a la función de optimización de la siguiente manera:

logit <- optim(c(1,1),loglik, y = y, x = x, hessian = T)

Donde x es una matriz de variables independientes, e y es un vector con la variable dependiente.

Nota: Sé que existen procedimientos fijos para hacer esto, pero necesito hacerlo desde cero


3
¿De qué manera está utilizando optim (con qué opciones, con o sin proporcionar una función de gradiente, etc.)? La regresión logística es un problema convexo suave. Se resuelve fácilmente utilizando el método de Newton o similar. De hecho, para obtener una estimación de la matriz de covarianza, debe hacer (algo parecido) a esto.
cardenal

He agregado la información a la publicación
Thomas Jensen,

Respuestas:


13

Para regresión logística se calcula usando la fórmulaπ

π=11+exp(Xβ)

Por lo tanto, los valores diagonales de se pueden calcular de la siguiente manera:V

pi <- 1/(1+exp(-X%*%beta))
v <- sqrt(pi*(1-pi))

Ahora, multiplicar por la matriz diagonal desde la izquierda significa que cada fila se multiplica por el elemento correspondiente desde la diagonal. Lo cual en R se puede lograr usando la multiplicación simple:

VX <- X*v 

Luego Hse puede calcular de la siguiente manera:

H <- VX%*%solve(crossprod(VX,VX),t(VX))

Nota Dado que contiene desviaciones estándar, sospecho que la fórmula correcta para esHVH

H=VX(XV2X)1XV

El código de ejemplo funciona para esta fórmula.


Gracias mpiktas, pero estoy algo atrapado en cómo calcular V. ¿Es V simplemente la diagonal de la matriz de covarianza?
Thomas Jensen

@Thomas, no, es la matriz diagonal como la especificó en su publicación inicial, pero donde se reemplazan por las estimaciones , es decir, la probabilidad estimada de que la ésima respuesta sea 1 bajo el modelo π i iπiπ^ii
cardenal

De acuerdo, ¿para cada fila de los datos simplemente calculo la probabilidad pronosticada y multiplico la raíz cuadrada de este vector con la matriz de variables independientes?
Thomas Jensen

@Thomas, sí, así es como se hace en mi código. Puede verificar con un ejemplo ficticio que realmente funciona.
mpiktas

1
@mpiktas: tienes razón sobre . Efectivamente, lo que está haciendo es "estandarizar" la matriz y el vector , luego hacer los mínimos cuadrados ponderados en las variables estandarizadas y luego volver a transformar a la escala original. Es necesario para recorrer debido a la normalización depende de X Y βV2XYβ
probabilityislogic
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.