Algorithmes standard pour effectuer une régression linéaire hiérarchique?


9

Existe-t-il des algorithmes standard (par opposition aux programmes) pour effectuer une régression linéaire hiérarchique? Est-ce que les gens ne font généralement que du MCMC ou existe-t-il des algorithmes plus spécialisés, peut-être partiellement fermés?

Réponses:


9

Il y a l'algorithme itératif des moindres carrés généralisés (IGLS) de Harvey Goldstein, et sa modification mineure, les moindres carrés généralisés itératifs restreints (RIGLS), qui donne des estimations non biaisées des paramètres de variance.

Ces algorithmes sont toujours itératifs, donc pas de forme fermée, mais ils sont plus simples à calculer que MCMC ou la probabilité maximale. Vous venez d'itérer jusqu'à ce que les paramètres convergent.

Pour plus d'informations à ce sujet et sur les alternatives, voir par exemple:


Fabuleux! Exactement ce que je cherchais.
John Salvatier

4

Le package lme4 dans R utilise les moindres carrés itérativement repondérés (IRLS) et les moindres carrés itérativement repondérés (PIRLS). Voir les PDF ici:

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


1
Douglas Bates et Steven Walker ont créé un projet GitHub dont le but est d'utiliser du code R pur pour implémenter l'algorithme PIRLS ci-dessus. github.com/lme4/lme4pureR . Si vous considérez la lmer()fonction de base dans le lme4package de R, vous devriez normalement lire tout un tas de code C ++ pour comprendre l'implémentation de PIRLS dans lmer()(ce qui peut être difficile pour ceux d'entre nous qui ne sont pas si bien familiarisés avec la programmation C ++).
Chris

1

Une autre bonne source pour les "algorithmes de calcul" pour les HLM (à nouveau dans la mesure où vous les voyez comme des spécifications similaires à celles des LMM) serait:

  • McCulloch, C., Searle, S., Neuhaus, J. (2008). Modèles linéaires et mixtes généralisés. 2e édition. Wiley. Chapitre 14 - Informatique.

Les algorithmes qu'ils énumèrent pour calculer les LMM comprennent:

  • Algorithme EM
  • Algorithme de Newton Raphson

Les algorithmes qu'ils répertorient pour les GLMM comprennent:

  • Quadrature numérique (quadrature GH)
  • Algorithme EM
  • Algorithmes MCMC (comme vous le mentionnez)
  • Algorithmes d'approximation stochastique
  • Probabilité maximale simulée

Ils suggèrent d'autres algorithmes pour les GLMM:

  • Méthodes de quasi-vraisemblance pénalisées
  • Approximations de Laplace
  • PQL / Laplace avec correction de biais bootstrap

0

Si vous considérez le HLM comme un type de modèle mixte linéaire, vous pouvez considérer l'algorithme EM. Les pages 22-23 des notes de cours suivantes indiquent comment implémenter l'algorithme EM classique pour le modèle mixte:

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 )
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.