Bagaimana menghitung matriks topi untuk regresi logistik di R?

8

Saya ingin menghitung matriks topi langsung di R untuk model logit. Menurut Long (1997) matriks topi untuk model logit didefinisikan sebagai:

H=VX(XVX)1XV

X adalah vektor variabel independen, dan V adalah matriks diagonal dengan pada diagonal.π(1π)

Saya menggunakan optimfungsi ini untuk memaksimalkan kemungkinan dan menurunkan hessian. Jadi saya kira pertanyaan saya adalah: bagaimana saya menghitung dalam R?V

Catatan: Fungsi kemungkinan saya terlihat seperti ini:

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

Dan saya memasukkan ini ke fungsi optimal sebagai berikut:

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

Di mana x adalah matriks variabel independen, dan y adalah vektor dengan variabel dependen.

Catatan: Saya tahu bahwa ada prosedur kalengan untuk melakukan ini, tetapi saya harus melakukannya dari awal

Thomas Jensen
sumber
3
Dengan cara apa Anda menggunakan optim (dengan opsi apa, dengan atau tanpa memasok fungsi gradien, dll) ?? Regresi logistik adalah masalah cembung yang lancar. Ini mudah diselesaikan dengan menggunakan metode Newton atau sejenisnya. Bahkan, untuk mendapatkan perkiraan matriks kovarians, Anda perlu melakukan (sesuatu yang dekat dengan) ini.
kardinal
Saya telah menambahkan info ke pos
Thomas Jensen

Jawaban:

13

Untuk regresi logistik dihitung menggunakan rumusπ

π=11+exp(Xβ)

Jadi nilai diagonal dapat dihitung dengan cara berikut:V

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

Sekarang mengalikan dengan matriks diagonal dari kiri berarti bahwa setiap baris dikalikan dengan elemen yang sesuai dari diagonal. Yang mana dalam R dapat dicapai menggunakan perkalian sederhana:

VX <- X*v 

Kemudian Hdapat dihitung dengan cara berikut:

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

Catatan Karena berisi standar deviasi saya menduga bahwa rumus yang tepat untuk adalahVH

H=VX(XV2X)1XV

Kode contoh berfungsi untuk rumus ini.

mpiktas
sumber
Terima kasih mpiktas, tapi saya agak terjebak pada bagaimana menghitung V. Apakah V hanyalah diagonal dari matriks kovarians?
Thomas Jensen
@Thomas, tidak, itu matriks diagonal yang Anda tentukan dalam posting awal Anda, tetapi di mana diganti dengan perkiraan , yaitu, perkiraan probabilitas bahwa respon th adalah 1 di bawah model. πiπ^ii
kardinal
Ok, jadi untuk setiap baris dalam data saya cukup menghitung probabilitas yang diprediksi, dan mengalikan akar kuadrat dari vektor ini dengan matriks variabel independen?
Thomas Jensen
@ Thomas, ya, itulah yang dilakukan dalam kode saya. Anda dapat memeriksa dengan contoh tiruan bahwa itu benar-benar berfungsi.
mpiktas
1
@mpiktas - Anda benar tentang . Secara efektif apa yang Anda lakukan adalah "menstandarisasi" matriks , dan vektor , kemudian melakukan kuadrat terkecil pada variabel terstandarisasi, kemudian melakukan backtransforming ke skala asli. Anda perlu mengulang karena standardisasi tergantung padaV2XYβ
probabilityislogic