Algoritmi standard per la regressione lineare gerarchica?


Risposte:


9

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:


Favoloso! Esattamente quello che stavo cercando.
John Salvatier,

4

Il pacchetto lme4 in R usa i minimi quadrati iterativamente ripesati (IRLS) e i minimi quadrati iterativamente penalizzati (PIRLS). Vedi i PDF qui:

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


1
Douglas Bates e Steven Walker hanno creato un progetto GitHub il cui obiettivo è utilizzare il codice R puro per implementare l'algoritmo PIRLS sopra. github.com/lme4/lme4pureR . Se consideri la lmer()funzione di base nel lme4pacchetto 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 ++).
Chris,

1

Un'altra buona fonte di "algoritmi informatici" per HLM (sempre nella misura in cui li vedi come specifiche simili a quelle di LMM) sarebbe:

  • McCulloch, C., Searle, S., Neuhaus, J. (2008). Modelli lineari e misti generalizzati. 2a edizione. Wiley. Capitolo 14 - Informatica.

Gli algoritmi che elencano per il calcolo degli LMM includono:

  • Algoritmo EM
  • Algoritmo di Newton Raphson

Gli algoritmi che elencano per i GLMM includono:

  • Quadratura numerica (quadratura GH)
  • Algoritmo EM
  • Algoritmi MCMC (come dici tu)
  • Algoritmi di approssimazione stocastica
  • Simulazione della massima verosimiglianza

Altri algoritmi per GLMM che suggeriscono includono:

  • Metodi penali di quasi-verosimiglianza
  • Approssimazioni di Laplace
  • PQL / Laplace con correzione del bias bootstrap

0

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 )
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.