Làm thế nào để tính ma trận mũ cho hồi quy logistic trong R?


8

Tôi muốn tính ma trận mũ trực tiếp trong R cho một mô hình logit. Theo Long (1997) ma trận mũ cho các mô hình logit được định nghĩa là:

H=VX(XVX)1XV

X là vector của các biến độc lập, và V là một đường chéo ma trận với trên đường chéo.π(1π)

Tôi sử dụng optimchức năng để tối đa hóa khả năng và lấy được hessian. Vì vậy, tôi đoán câu hỏi của tôi là: làm thế nào để tôi tính trong R?V

Lưu ý: Hàm khả năng của tôi trông như thế này:

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

Và tôi cung cấp cho chức năng tối ưu như sau:

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

Trong đó x là ma trận của các biến độc lập và y là một vectơ với biến phụ thuộc.

Lưu ý: Tôi biết rằng có các quy trình đóng hộp để làm điều này, nhưng tôi cần phải làm lại từ đầu


3
Bằng cách nào bạn đang sử dụng optim (với những tùy chọn, có hoặc không cung cấp một chức năng gradient, vv) ?? Hồi quy logistic là một vấn đề lồi trơn tru. Nó dễ dàng được giải quyết bằng phương pháp của Newton hoặc tương tự. Trong thực tế, để có được ước tính của ma trận hiệp phương sai, bạn cần phải làm (một cái gì đó gần với) này.
Đức Hồng Y

Tôi đã thêm thông tin vào bài đăng
Thomas Jensen

Câu trả lời:


13

π

π=11+exp(Xβ)

V

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

Bây giờ nhân với ma trận đường chéo từ trái có nghĩa là mỗi hàng được nhân với phần tử tương ứng từ đường chéo. Mà trong R có thể đạt được bằng cách nhân đơn giản:

VX <- X*v 

Sau đó Hcó thể được tính theo cách sau:

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

VH

H=VX(XV2X)1XV

Mã ví dụ hoạt động cho công thức này.


Cảm ơn mpiktas, nhưng tôi hơi bế tắc về cách tính V. Có phải V đơn giản là đường chéo của ma trận hiệp phương sai?
Thomas Jensen

πiπ^ii

Ok, vậy với mỗi hàng trong dữ liệu tôi chỉ cần tính xác suất dự đoán và nhân căn bậc hai của vectơ này với ma trận các biến độc lập?
Thomas Jensen

@Thomas, vâng, đó là cách nó được thực hiện trong mã của tôi. Bạn có thể kiểm tra với ví dụ giả rằng nó thực sự hoạt động.
mpiktas

1
V2XYβ
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.