답변:
하비 골드 스타 인의 반복적 일반화 최소 제곱 (IGLS) 알고리즘이 있으며, 사소한 수정, 제한적 반복적 일반화 최소 제곱 (RIGLS)으로 편차 매개 변수의 편향 추정치를 제공합니다.
이 알고리즘은 여전히 반복적이므로 닫힌 형태는 아니지만 MCMC보다 계산적으로 간단하거나 최대 가능성입니다. 매개 변수가 수렴 될 때까지 반복합니다.
Goldstein H. 반복 일반화 된 최소 제곱 법을 이용한 다단계 혼합 선형 모형 분석. Biometrika 1986; 73 (1) : 43-56. 도 : 10.1093 / biomet / 73.1.43
Goldstein H. 제한적 편향 반복 일반화 된 최소 제곱 추정. 바이오 메트 리카 1989; 76 (3) : 622-623. 도 : 10.1093 / biomet / 76.3.622
이것과 대안에 대한 자세한 내용은 다음을 참조하십시오.
R의 lme4 패키지는 반복적으로 가중 된 최소 제곱 (IRLS) 및 불이익이 가해진 반복적으로 가중 된 최소 제곱 (PIRLS)을 사용합니다. 여기 PDF를 참조하십시오 :
lmer()
기능 을 고려 lme4
한다면 일반적으로 C ++ 코드 전체를 읽어야 lmer()
합니다.
HLM에 대한 "컴퓨팅 알고리즘"에 대한 또 다른 좋은 소스는 (LMM과 비슷한 사양으로 보는 정도) 다음과 같습니다.
LMM을 계산하기 위해 나열한 알고리즘은 다음과 같습니다.
GLMM에 대해 나열된 알고리즘은 다음과 같습니다.
GLMM이 제안하는 다른 알고리즘은 다음과 같습니다.
HLM을 선형 혼합 모델의 유형으로 간주하면 EM 알고리즘을 고려할 수 있습니다. 다음 코스 노트의 22-23 페이지는 혼합 모델에 대해 기존 EM 알고리즘을 구현하는 방법을 보여줍니다.
http://www.stat.ucla.edu/~yuille/courses/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 )
}