7 votos

Soluciones de sobreajuste GLMM

en GLMM página de preguntas frecuentes http://glmm.wikidot.com/faq no es una declaración sobre el sobreajuste:

"Una de las alternativas (sugerido por Robert LaBudde) es "ajustar el modelo con el factor aleatorio como un efecto fijo, obtener el nivel de los coeficientes en la suma de cero formulario y, a continuación, calcular la desviación estándar de los coeficientes." Esto es apropiado para los usuarios que son (a) interesado principalmente en la medición de la variación (es decir, el de efectos aleatorios no son sólo molestias parámetros, y la variabilidad [en lugar de los valores estimados para cada nivel] es de interés científico)"

¿Qué exactamente significa esto en la práctica, se siente doe significa el uso de offset() para el de efectos aleatorios, que son ahora los efectos fijos?

También hay una manera de diagnosticar el sobreajuste otros de muy pequeño efecto aleatorio de componentes de varianza? Por ejemplo, ¿cómo obtener el df para un GLMM, que se reportan en los papeles?

7voto

Ben Bolker Puntos 8729

Calcular la desviación estándar (o la varianza de los coeficientes) básicamente significa que la fija estimaciones del efecto para cada nivel (de forma análoga a la BLUPs/condicional modos en un modelo mixto) de computación y su varianza. Usted puede hacer esto de manera apropiada la fijación de los contrastes a contr.sum (suma-cero contrastes) (en este caso, usted todavía tiene que reconstruir el valor de un solo nivel, ya que el modelo sólo caben n-1 los coeficientes en un modelo con una intercepción), y/o el uso apropiado de la -1 o +0 en el modelo de ajuste de un no-interceptar modelo donde los coeficientes se calculan para cada nivel. O, como se muestra a continuación, usted puede utilizar la fuerza bruta a través de predict (o, por ejemplo, a través de la lsmeans paquete) para calcular los valores de cada nivel ...

Hacer de la seguridad de los datos con sólo dos niveles de la RE agrupación de variables:

dd <- expand.grid(f1=factor(1:3),f2=factor(1:2),rep=1:10)
library(lme4)
simList <- 
   suppressMessages(simulate(~f1+(1|f2),
                 newdata=dd,
                 family="gaussian",
                 newparams=list(theta=1,beta=c(0,1,2),sigma=1),
                 seed=101,n=500))

Ajuste f2 como efecto aleatorio y recuperar estimado de la varianza:

sumfun1 <- function(y0) {
    m <- lmer(y~f1+(1|f2),data=transform(dd,y=y0))
    unlist(VarCorr(m))
}

library(plyr)
r1 <- laply(simList,sumfun1,.progress="text")

Esto realmente funciona sorprendentemente bien, dado el escaso número de niveles:

mean(r1)  ## 0.98
confint(lm(r1~1)) 
##                 2.5 %   97.5 %
## (Intercept) 0.9248779 1.189029

Pero a menudo nos cero estimaciones de la varianza:

sum(r1==0)  ## 60

(y un puñado de valores muy pequeños)

sum(log10(r1)<(-6))  ## 69

Ahora intenta a través de efectos fijos:

sumfun2 <- function(y0) {
    lm1 <- lm(y~f1+f2,data=transform(dd,y=y0))
    pframe <- data.frame(f1="1",f2=levels(dd$f2))
    var(predict(lm1,newdata=pframe))
}

r2 <- laply(simList,sumfun2,.progress="text")
mean(r2)  ## 1.01294
confint(lm(r2~1))
##             2.5 %   97.5 %
## (Intercept) 0.89081 1.135071

r1[log10(r1)< (-6)] <- 1e-6
p0 <- rbind(data.frame(m="f1=random",r=r1),
            data.frame(m="f1=fixed",r=r2))
library(ggplot2); theme_set(theme_bw())
ggplot(p0,aes(x=log10(r),fill=m))+
    geom_histogram(alpha=0.5,position="identity")+
        geom_vline(xintercept=0,lty=2)

enter image description here

La fija-efecto de enfoque funciona mejor de lo que esperaba ...

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X