Hiyerarşik doğrusal regresyon yapmak için standart algoritmalar (programların aksine) var mı? İnsanlar genellikle sadece MCMC yapıyor mu yoksa daha özel, belki de kısmen kapalı form algoritmaları var mı?
Hiyerarşik doğrusal regresyon yapmak için standart algoritmalar (programların aksine) var mı? İnsanlar genellikle sadece MCMC yapıyor mu yoksa daha özel, belki de kısmen kapalı form algoritmaları var mı?
Yanıtlar:
Biri için Harvey Goldstein'ın yinelemeli genelleştirilmiş en küçük kareler (IGLS) algoritması var ve ayrıca küçük değişiklikler, varyans parametrelerinin tarafsız tahminlerini veren iteratif genelleştirilmiş en küçük kareler (RIGLS) kısıtlandı .
Bu algoritmalar hala yinelemelidir, bu nedenle kapalı form değildir, ancak MCMC veya maksimum olasılıktan hesaplamalı olarak daha basittir. Parametreler yakınlaşana kadar tekrarlıyorsunuz.
Goldstein H. Yinelemeli Genelleştirilmiş En Küçük Kareler Kullanılarak Çok Düzeyli Karışık Doğrusal Model Analizi. Biometrika 1986; 73 (1): 43-56. doi: 10.1093 / biyometri / 73.1.43
Goldstein H. Sınırsız Tarafsız İteratif Genelleştirilmiş En Küçük Kareler Tahmini. Biometrika 1989; 76 (3): 622-623. doi: 10.1093 / biyometri / 76.3.622
Bu ve alternatifler hakkında daha fazla bilgi için bkz.
R'deki lme4 paketi yinelemeli olarak yeniden ağırlıklandırılmış en küçük kareleri (IRLS) kullanır ve yinelemeli olarak yeniden ağırlıklandırılmış en küçük kareleri (PIRLS) cezalandırır. PDF'lere buradan bakın:
lmer()
işlevi göz önünde bulundurursanız, lme4
normalde C ++ kodunun bir demetini okumak zorundasınız (PIRLS'in uygulanmasını anlayın lmer()
(bu, C ++ programlamasında çok iyi tecrübeli olmayanlarımız için zor olabilir).
HLM'ler için "hesaplama algoritmaları" için bir başka iyi kaynak (yine LMM'lerle benzer özellikler olarak gördüğünüz ölçüde):
LMM'leri hesaplamak için listeledikleri algoritmalar şunları içerir:
GLMM'ler için listeledikleri algoritmalar şunları içerir:
GLMM'ler için önerdikleri diğer algoritmalar şunları içerir:
HLM'nin bir tür doğrusal karışık model olduğunu düşünüyorsanız, EM algoritmasını düşünebilirsiniz. Aşağıdaki ders notlarının 22-23. Sayfalarında, karma model için klasik EM algoritmasının nasıl uygulanacağı gösterilmektedir:
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 )
}