Các thuật toán tiêu chuẩn để thực hiện hồi quy tuyến tính phân cấp?


9

Có các thuật toán tiêu chuẩn (trái ngược với các chương trình) để thực hiện hồi quy tuyến tính phân cấp không? Có phải mọi người thường chỉ làm MCMC hoặc có các thuật toán chuyên biệt hơn, có lẽ là đóng một phần?

Câu trả lời:


9

Có thuật toán lặp bình phương tổng quát (IGLS) của Harvey Goldstein cho một thuật toán, và đó cũng là sửa đổi nhỏ, hạn chế bình phương tổng quát lặp lại (RIGLS), đưa ra các ước tính không thiên vị về các tham số phương sai.

Các thuật toán này vẫn còn lặp lại, vì vậy không phải là dạng đóng, nhưng chúng đơn giản hơn về mặt tính toán so với MCMC hoặc khả năng tối đa. Bạn chỉ cần lặp đi lặp lại cho đến khi các tham số hội tụ.

  • Goldstein H. Phân tích mô hình tuyến tính hỗn hợp đa cấp bằng cách sử dụng phép lặp tổng quát nhỏ nhất. Sinh trắc học 1986; 73 (1): 43-56. doi: 10.1093 / biomet / 73.1.43

  • Goldstein H. Ước tính hạn chế tối thiểu lặp đi lặp lại không thiên vị Biometrika 1989; 76 (3): 622-623. doi: 10.1093 / biomet / 76.3.622

Để biết thêm thông tin về điều này và các lựa chọn thay thế, xem ví dụ:


Tuyệt vời! Chính xác những gì tôi đang tìm kiếm.
John Salvatier

4

Gói lme4 trong R sử dụng bình phương tối thiểu lặp lại (IRLS) và bị phạt lặp lại bình phương tối thiểu lặp lại (PIRLS). Xem bản PDF tại đây:

http://rss.acs.unt.edu/Rdoc/l Library / lme4 / doc / index.html


1
Douglas Bates và Steven Walker đã tạo ra một dự án GitHub với mục tiêu là sử dụng mã R thuần túy để thực hiện thuật toán PIRLS ở trên. github.com/lme4/lme4pureR . Nếu bạn xem xét lmer()hàm cơ sở trong lme4gói R, thông thường bạn sẽ phải đọc qua cả đống mã C ++ để hiểu việc triển khai PIRLS trong lmer()(có thể là thách thức đối với những người trong chúng ta không rành về lập trình C ++).
Chris

1

Một nguồn tốt khác cho "thuật toán điện toán" cho HLM's (một lần nữa đến mức bạn xem chúng là các thông số kỹ thuật tương tự như LMM) sẽ là:

  • McCulloch, C., Searle, S., Neuhaus, J. (2008). Mô hình tuyến tính và hỗn hợp tổng quát. Ấn bản lần 2. Wiley. Chương 14 - Máy tính.

Các thuật toán họ liệt kê để tính toán LMM bao gồm:

  • Thuật toán EM
  • Thuật toán Newton Raphson

Các thuật toán họ liệt kê cho GLMM bao gồm:

  • Số cầu phương số (phương trình GH)
  • Thuật toán EM
  • Các thuật toán MCMC (như bạn đề cập)
  • Các thuật toán xấp xỉ ngẫu nhiên
  • Khả năng mô phỏng tối đa

Các thuật toán khác cho GLMM mà họ đề xuất bao gồm:

  • Hình phạt gần đúng
  • Laplace xấp xỉ
  • PQL / Laplace với hiệu chỉnh sai lệch bootstrap

0

Nếu bạn coi HLM là một loại mô hình hỗn hợp tuyến tính, bạn có thể xem xét thuật toán EM. Trang 22-23 của các ghi chú khóa học sau đây cho biết cách triển khai thuật toán EM cổ điển cho mô hình hỗn hợp:

http://www.stat.ucla.edu/~yuille/cifts/stat153/emtutorial.pdf

###########################################################
#     Classical EM algorithm for Linear  Mixed Model      #
###########################################################
em.mixed <- function(y, x, z, beta, var0, var1,maxiter=2000,tolerance = 1e-0010)
    {
    time <-proc.time()
    n <- nrow(y)
    q1 <- nrow(z)
    conv <- 1
    L0 <- loglike(y, x, z, beta, var0, var1)
    i<-0
    cat("  Iter.       sigma0                 sigma1        Likelihood",fill=T)
    repeat {
            if(i>maxiter) {conv<-0
                    break}
    V <- c(var1) * z %*% t(z) + c(var0) * diag(n)
    Vinv <- solve(V)
    xb <- x %*% beta
    resid <- (y-xb)
    temp1 <- Vinv %*% resid
    s0 <- c(var0)^2 * t(temp1)%*%temp1 + c(var0) * n - c(var0)^2 * tr(Vinv)
    s1 <- c(var1)^2 * t(temp1)%*%z%*%t(z)%*%temp1+ c(var1)*q1 -
                                                c(var1)^2 *tr(t(z)%*%Vinv%*%z)
    w <- xb + c(var0) * temp1
    var0 <- s0/n
    var1 <- s1/q1
    beta <- ginverse( t(x) %*% x) %*% t(x)%*% w
    L1 <- loglike(y, x, z, beta, var0, var1)
    if(L1 < L0) { print("log-likelihood must increase, llikel <llikeO, break.")
                             conv <- 0
break
}
    i <- i + 1
    cat("  ", i,"  ",var0,"  ",var1,"  ",L1,fill=T)
    if(abs(L1 - L0) < tolerance) {break}  #check for convergence
    L0 <- L1
    }
list(beta=beta, var0=var0,var1=var1,Loglikelihood=L0)
}

#########################################################
#  loglike calculates the LogLikelihood for Mixed Model #
#########################################################
loglike<- function(y, x, z, beta, var0, var1)
}
{
n<- nrow(y)
V <- c(var1) * z %*% t(z) + c(var0) * diag(n)
Vinv <- ginverse(V)
xb <- x %*% beta
resid <- (y-xb)
temp1 <- Vinv %*% resid
(-.5)*( log(det(V)) + t(resid) %*% temp1 )
}
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.