Khả năng và ước tính cho các hiệu ứng hỗn hợp Hồi quy logistic


8

Trước tiên, hãy mô phỏng một số dữ liệu cho hồi quy logistic với các phần cố định và ngẫu nhiên:

set.seed(1)
n    <- 100
x    <- runif(n)
z    <- sample(c(0,1), n, replace=TRUE)
b    <- rnorm(2)
beta <- c(0.4, 0.8)
X    <- model.matrix(~x)
Z    <- cbind(z, 1-z)
eta  <- X%*%beta + Z%*%b
pr   <- 1/(1+exp(-eta))
y    <- rbinom(n, 1, pr)

Nếu chúng ta chỉ muốn điều chỉnh hồi quy Logistic không có phần ngẫu nhiên, chúng ta có thể sử dụng glmhàm:

glm(y~x, family="binomial")

glm(y~x, family="binomial")$coefficients
# (Intercept)           x 
#  -0.2992785   2.1429825 

Hoặc xây dựng chức năng riêng của chúng tôi về khả năng đăng nhập

logL(β)=i=1nyilogΛ(ηi)+(1yi)log(1Λ(ηi))

trong đó và và sử dụng để ước tính các tham số tối đa hóa nó, như sau mã ví dụ:Λ(ηi)=11+exp(ηi)ηi=Xiβoptim()

ll.no.random <- function(theta,X,y){
  beta <- theta[1:ncol(X)]
  eta  <- X%*%beta
  p    <- 1/(1+exp(-eta))
  ll   <- sum( y*log(p) + (1-y)*log(1-p) )
  -ll
}

optim(c(0,1), ll.no.random, X=X, y=y)

optim(c(0,1), ll.no.random, X=X, y=y)$par
# -0.2992456  2.1427484

tất nhiên đưa ra các ước tính tương tự và tối đa hóa khả năng đăng nhập cho cùng một giá trị. Đối với các hiệu ứng hỗn hợp, chúng tôi sẽ muốn một cái gì đó như

library(lme4)
glmer(y~x + (1|z), family="binomial")

Nhưng làm thế nào chúng ta có thể làm tương tự với chức năng của chúng ta? Vì khả năng là

L=j=1JPr(y1j,...,ynjj|x,bj)f(bj)dbj

và tích phân không có biểu thức dạng đóng, chúng ta cần sử dụng tích hợp số như Gaussian Quadrature. Chúng ta có thể sử dụng gói statmodđể có được một số ô tiêu chuẩn, giả sử 10

library(statmod)    
gq <- gauss.quad(10)
w  <- gq$weights
g  <- gq$nodes

CẬP NHẬT: Sử dụng các vị trí cầu phương này và trọng số cho ( ở đây), chúng ta có thể tính gần đúng tích phân trên bằng một tổng các số hạng bằng thay thế cho và toàn bộ thuật ngữ nhân với trọng số tương ứng . Vì vậy, chức năng khả năng của chúng ta nên có ngay bây giờgrwrr=1,...,RR=10bjRgrbjwr

L=j=1Jr=1RPr(y1j,...,ynjj|x,bj=gr)wr

Ngoài ra, chúng ta cần tính đến phương sai của phần ngẫu nhiên, tôi đọc rằng điều này có thể đạt được bằng cách thay thế trong hàm của chúng ta bằng trong đó , do đó, trong chức năng khả năng ở trên, chúng tôi thực sự thay thế bằng 'chứ không phải '.bjN(0,σb2)ησjθjθjN(0,1)θgβ

Một vấn đề tính toán mà tôi không nhận được là làm thế nào để thay thế các thuật ngữ vì các vectơ sẽ không có cùng độ dài. Nhưng có lẽ tôi không hiểu điều đó, vì tôi đang thiếu một cái gì đó rất quan trọng ở đây, hoặc hiểu sai về cách thức hoạt động của phương pháp này.


Bây giờ tôi không có thời gian để xem xét kỹ nhưng điều này có vẻ như là một cách sử dụng tốt cho MCMC.
Shadowtalker

@ssdecontrol cảm ơn, MCMC là sự thay thế tốt. Nhưng tôi muốn áp dụng phương pháp cổ điển.
Steve

Điều gì phi cổ điển về MCMC để đánh giá một tích phân?
Shadowtalker

@ssdecontrol tốt, tôi không chắc ... Nhưng tất cả những cuốn sách tôi đã kiểm tra và các gói lme4, R thông thường, không sử dụng MCMC. Vì vậy, tôi muốn gắn bó với điều đó. Ít nhất là vào lúc bắt đầu.
Steve

1
Bạn đã hỏi điều này trong danh sách R-sig-ME (r-sig-mixed-models@r-project.org)? Một số người có thể giúp bạn ở đó hơn nữa. Ngoài ra: Tôi rất khuyến khích bạn nghiên cứu bài viết Thuật toán bậc hai Gaussian thích ứng và hiệu quả cho các mô hình hỗn hợp tuyến tính tổng quát đa cấp của Pinheiro và Chao. Nó chứa các kết quả liên quan đến hiệu suất AGQ cũng như đại số tuyến tính đằng sau chúng. Nếu bạn muốn mã hóa chúng .... tốt, hãy sẵn sàng cho một số phân tách ma trận thưa thớt nghiêm trọng. : D
usεr11852

Câu trả lời:


2

Tôi không thấy "các vectơ sẽ không có cùng độ dài", vui lòng làm rõ câu hỏi của bạn.

Trước hết, đối với tích phân có kích thước nhỏ hơn 4, các phương pháp số trực tiếp như phương trình bậc hai có hiệu quả hơn MCMC. Tôi đã nghiên cứu những câu hỏi này trong một thời gian, và tôi sẽ rất vui khi thảo luận vấn đề này với bạn.

Đối với hồi quy logistic hiệu ứng hỗn hợp, Rmã rõ ràng duy nhất tôi tìm thấy là từ cuốn sách của Giáo sư Demidenko, Mô hình hỗn hợp: Lý thuyết và Ứng dụng , bạn có thể tải xuống mã qua cột "PHẦN MỀM VÀ DỮ LIỆU" trên trang web. Có logMLEgh()thể được tìm thấy trong \mixed_models_data.zip\MixedModels\Chapter07. Ông không sử dụng statmodgói để có được các ô tiêu chuẩn, nhưng đã viết chức năng của riêng mình gauher(). Có một số lỗi nhỏ trong mã và tôi đã thảo luận chúng với tác giả, nhưng vẫn rất hữu ích để bắt đầu từ mã và sách của anh ấy. Tôi có thể cung cấp phiên bản sửa nếu cần.

Một vấn đề khác là, nếu bạn muốn có được ước tính chính xác, optim()là không đủ, bạn có thể cần phải sử dụng các phương pháp như tính điểm của Fisher, như trong glm().


cuốn sách dường như có thông tin phong phú về những gì tôi đang làm. Bản thân mã không nói nhiều - chỉ cần đặt mua cuốn sách nên tôi phải chờ nó. Vấn đề của các vectơ là nếu chúng ta thay thế các thuật ngữ, 2 b'bằng 10 nút, làm thế nào chúng ta có thể nhân các ma trận Zg? Hoặc tôi có nó hoàn toàn sai?
Steve

Tôi biết rằng tôi nên đi xa hơn để có được ước tính chính xác, nhưng tôi đã hy vọng hiểu được GQ đầu tiên là bước đầu tiên.
Steve

Bạn có thể xem trước hai phiên bản trên Google Sách trước. Trong mã của bạn, là ma trận ? Nhưng chỉ là vô hướng? Bạn có thể bắt đầu từ mô hình đánh chặn ngẫu nhiên đầu tiên. Nếu thứ nguyên của các hiệu ứng ngẫu nhiên là hai, thì bạn cần hoàn toàn 100 nút hai chiều sau đó, 10 nút trên mỗi thứ nguyên. n × 2 bZn×2bZ = rep(1,n)
Randel

xin lỗi nhưng tôi càng nghĩ nó càng làm tôi bối rối. Nếu tôi làm Z=rep(1,n)thì tôi sẽ nhận được một lần chặn ngẫu nhiên cho mỗi hàng, nghĩa là mỗi cá nhân là một nhóm? Trong ví dụ của tôi, tôi có hai nhóm, do đó chúng tôi có và để cung cấp cho chúng tôi cần. Không? Z%*%b 2 × 1 n × 1n×22×1n×1
Steve

Ồ, tôi chỉ nhận thấy rằng Zđược sử dụng để phân tách đánh chặn ngẫu nhiên cho mỗi cụm, không phải là ma trận thiết kế cho hiệu ứng ngẫu nhiên. Sau đó, bạn đã đúng, nhưng bạn nên đánh giá tích phân và sử dụng riêng phương trình cho từng cụm. Bạn không cần Znữa, chỉ cần đánh giá tích phân cho từng cụm và sau đó tổng hợp chúng lại với nhau. Ma trận thiết kế cho đánh chặn ngẫu nhiên chỉ là vectơ của 1s.
Randel
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.