Esistono algoritmi standard (anziché programmi) per eseguire la regressione lineare gerarchica? Le persone di solito fanno semplicemente MCMC o ci sono algoritmi più specializzati, forse parzialmente chiusi?
Esistono algoritmi standard (anziché programmi) per eseguire la regressione lineare gerarchica? Le persone di solito fanno semplicemente MCMC o ci sono algoritmi più specializzati, forse parzialmente chiusi?
Risposte:
C'è l'algoritmo iterativo dei minimi quadrati generalizzati (IGLS) di Harvey Goldstein per uno, ed è anche una modifica minore, i minimi quadrati generalizzati iterativi limitati (RIGLS), che fornisce stime imparziali dei parametri di varianza.
Questi algoritmi sono ancora iterativi, quindi non in forma chiusa, ma sono più semplici dal punto di vista computazionale di MCMC o della massima probabilità. Basta iterare finché i parametri non convergono.
Goldstein H. Analisi multilivello mista a modello lineare utilizzando i minimi quadrati generalizzati iterativi. Biometrika 1986; 73 (1): 43-56. doi: 10.1093 / biomet / 73.1.43
Goldstein H. Stima dei minimi quadrati generalizzata iterativa senza restrizioni. Biometrika 1989; 76 (3): 622-623. doi: 10.1093 / biomet / 76.3.622
Per ulteriori informazioni su questo e le alternative, vedere ad esempio:
Il pacchetto lme4 in R usa i minimi quadrati iterativamente ripesati (IRLS) e i minimi quadrati iterativamente penalizzati (PIRLS). Vedi i PDF qui:
lmer()
funzione di base nel lme4
pacchetto di R, normalmente dovresti leggere un intero gruppo di codice C ++ per capire l'implementazione di PIRLS lmer()
(che potrebbe essere una sfida per quelli di noi non così esperti nella programmazione C ++).
Un'altra buona fonte di "algoritmi informatici" per HLM (sempre nella misura in cui li vedi come specifiche simili a quelle di LMM) sarebbe:
Gli algoritmi che elencano per il calcolo degli LMM includono:
Gli algoritmi che elencano per i GLMM includono:
Altri algoritmi per GLMM che suggeriscono includono:
Se consideri HLM come un tipo di modello misto lineare, potresti considerare l'algoritmo EM. Le pagine 22-23 delle seguenti note del corso indicano come implementare il classico algoritmo EM per il modello misto:
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 )
}