Comment calculer la matrice chapeau pour la régression logistique dans R?

8

Je veux calculer la matrice de chapeau directement dans R pour un modèle logit. Selon Long (1997), la matrice chapeau pour les modèles logit est définie comme suit:

H=VX(XVX)1XV

X est le vecteur de variables indépendantes et V est une matrice diagonale avec sur la diagonale.π(1π)

J'utilise la optimfonction pour maximiser la probabilité et dériver la toile de jute. Donc je suppose que ma question est: comment puis-je calculer dans R?V

Remarque: Ma fonction de vraisemblance ressemble à ceci:

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)
}

Et je nourris ceci à la fonction optim comme suit:

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

Où x est une matrice de variables indépendantes et y est un vecteur avec la variable dépendante.

Remarque: je sais qu'il existe des procédures prédéfinies pour ce faire, mais je dois le faire à partir de zéro

Thomas Jensen
la source
3
De quelle manière utilisez-vous optim (avec quelles options, avec ou sans fournir une fonction de gradient, etc.) ?? La régression logistique est un problème convexe lisse. Il est facilement résolu en utilisant la méthode de Newton ou similaire. En fait, pour obtenir une estimation de la matrice de covariance, vous devez faire (quelque chose de proche) ceci.
Cardinal
J'ai ajouté l'info au post
Thomas Jensen

Réponses:

13

Pour la régression logistique est calculé à l'aide de la formuleπ

π=11+exp(Xβ)

Les valeurs diagonales de peuvent donc être calculées de la manière suivante:V

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

Maintenant, multiplier par la matrice diagonale de gauche signifie que chaque ligne est multipliée par l'élément correspondant de la diagonale. Ce qui dans R peut être réalisé en utilisant une simple multiplication:

VX <- X*v 

Ensuite, Hpeut être calculé de la manière suivante:

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

Remarque Étant donné que contient des écarts-types, je soupçonne que la bonne formule pour estVH

H=VX(XV2X)1XV

L'exemple de code fonctionne pour cette formule.

mpiktas
la source
Merci mpiktas, mais je suis un peu coincé sur la façon de calculer V. Est-ce que V est simplement la diagonale de la matrice de covariance?
Thomas Jensen
@Thomas, non, c'est la matrice diagonale comme vous l'avez spécifié dans votre message initial, mais où les sont remplacés par les estimations , c'est-à-dire la probabilité estimée que la ème réponse est 1 sous le modèle. πiπ^ii
Cardinal
Ok, donc pour chaque ligne des données, je calcule simplement la probabilité prédite et multiplie la racine carrée de ce vecteur par la matrice de variables indépendantes?
Thomas Jensen
@Thomas, oui, c'est ainsi que cela se fait dans mon code. Vous pouvez vérifier avec un exemple factice que cela fonctionne vraiment.
mpiktas
1
@mpiktas - vous avez raison sur . En fait, ce que vous faites est de «standardiser» la matrice et le vecteur , puis de faire les moindres carrés pondérés sur les variables normalisées, puis de retransformer à l'échelle d'origine. Vous devez effectuer une itération car la normalisation dépend deV2XYβ
probabilislogic