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ó 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:
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ụ:
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
lmer()
hàm cơ sở trong lme4
gó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 ++).
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à:
Các thuật toán họ liệt kê để tính toán LMM bao gồm:
Các thuật toán họ liệt kê cho GLMM bao gồm:
Các thuật toán khác cho GLMM mà họ đề xuất bao gồm:
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 )
}