Wie berechnet man die Hutmatrix für die logistische Regression in R?

8

Ich möchte die Hutmatrix direkt in R für ein Logit-Modell berechnen. Nach Long (1997) ist die Hutmatrix für Logit-Modelle definiert als:

H=VX(XVX)1XV

X ist der Vektor unabhängiger Variablen und V ist eine Diagonalmatrix mit auf der Diagonale.π(1π)

Ich benutze die optimFunktion, um die Wahrscheinlichkeit zu maximieren und den Hessischen abzuleiten. Meine Frage ist also: Wie berechne ich in R?V

Hinweis: Meine Wahrscheinlichkeitsfunktion sieht folgendermaßen aus:

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

Und ich füttere dies der Optimierungsfunktion wie folgt:

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

Wobei x eine Matrix unabhängiger Variablen ist und y ein Vektor mit der abhängigen Variablen ist.

Hinweis: Ich weiß, dass es dafür Dosenverfahren gibt, aber ich muss es von Grund auf neu machen

Thomas Jensen
quelle
3
Auf welche Weise verwenden Sie Optim (mit welchen Optionen, mit oder ohne Bereitstellung einer Verlaufsfunktion usw.)? Die logistische Regression ist ein glattes konvexes Problem. Es ist leicht mit Newtons Methode oder ähnlichem zu lösen. In der Tat, eine Schätzung der Kovarianzmatrix zu bekommen, Sie müssen tun (etwas in der Nähe) , um diese.
Kardinal
Ich habe die Info zum Beitrag hinzugefügt
Thomas Jensen

Antworten:

13

π

π=11+exp(Xβ)

V

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

Das Multiplizieren mit der Diagonalmatrix von links bedeutet nun, dass jede Zeile mit dem entsprechenden Element aus der Diagonale multipliziert wird. Was in R durch einfache Multiplikation erreicht werden kann:

VX <- X*v 

Dann Hkann folgendermaßen berechnet werden:

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

VH

H=VX(XV2X)1XV

Der Beispielcode funktioniert für diese Formel.

mpiktas
quelle
Danke mpiktas, aber ich bin etwas festgefahren, wie man V berechnet. Ist V einfach die Diagonale der Kovarianzmatrix?
Thomas Jensen
πiπ^ii
Ok, also berechne ich für jede Zeile in den Daten einfach die vorhergesagte Wahrscheinlichkeit und multipliziere die Quadratwurzel dieses Vektors mit der Matrix unabhängiger Variablen?
Thomas Jensen
@ Thomas, ja, so wird es in meinem Code gemacht. Sie können anhand eines Dummy-Beispiels überprüfen, ob es wirklich funktioniert.
mpiktas
1
V2XYβ