47 votos

¿Cómo puedo comprobar si un efecto aleatorio es significativo?

Estoy tratando de entender cuándo utilizar un efecto aleatorio y cuándo es innecesario. Me han dicho que una regla general es que si tienes 4 o más grupos/individuos, como es mi caso (15 alces individuales). Algunos de esos alces fueron experimentados 2 o 3 veces para un total de 29 ensayos. Quiero saber si se comportan de forma diferente cuando están en paisajes de mayor riesgo que cuando no lo están. Así que pensé en establecer el individuo como un efecto aleatorio. Sin embargo, ahora me dicen que no es necesario incluir al individuo como efecto aleatorio porque no hay mucha variación en su respuesta. Lo que no puedo averiguar es cómo probar si realmente se tiene en cuenta algo al establecer el individuo como efecto aleatorio. Tal vez una pregunta inicial es: ¿Qué prueba/diagnóstico puedo hacer para averiguar si Individual es una buena variable explicativa y debería ser un efecto fijo - gráficos qq? histogramas? gráficos de dispersión? Y qué buscaría en esos patrones.

Corrí el modelo con el individuo como efecto aleatorio y sin él, pero luego leí http://glmm.wikidot.com/faq donde afirman:

no comparan los modelos lmer con los correspondientes ajustes lm, o glmer/glm; las log-likelihoods no son conmensurables (es decir, incluyen incluyen diferentes términos aditivos)

Y aquí supongo que esto significa que no se puede comparar entre un modelo con efecto aleatorio o sin él. Pero, de todas formas, no sabría qué comparar entre ellos.

En mi modelo con el efecto aleatorio también estaba tratando de mirar la salida para ver qué tipo de evidencia o significado tiene el RE

lmer(Velocity ~ D.CPC.min + FD.CPC + (1|ID), REML = FALSE, family = gaussian, data = tv)

Linear mixed model fit by maximum likelihood 
Formula: Velocity ~ D.CPC.min + FD.CPC + (1 | ID) 
   Data: tv 
    AIC    BIC logLik deviance REMLdev
 -13.92 -7.087  11.96   -23.92   15.39
Random effects:
 Groups   Name        Variance Std.Dev.
 ID       (Intercept) 0.00000  0.00000 
 Residual             0.02566  0.16019 
Number of obs: 29, groups: ID, 15

Fixed effects:
              Estimate Std. Error t value
(Intercept)  3.287e-01  5.070e-02   6.483
D.CPC.min   -1.539e-03  3.546e-04  -4.341
FD.CPC       1.153e-04  1.789e-05   6.446

Correlation of Fixed Effects:
          (Intr) D.CPC.
D.CPC.min -0.010       
FD.CPC    -0.724 -0.437

Se ve que mi varianza y SD del ID individual como efecto aleatorio = 0. ¿Cómo es posible? ¿Qué significa 0? ¿Es eso cierto? Entonces mi amigo que dijo "como no hay variación usar el ID como efecto aleatorio es innecesario" ¿es correcto? Entonces, ¿lo utilizaría como efecto fijo? ¿Pero el hecho de que haya tan poca variación no significaría que no nos va a decir mucho de todos modos?

1 votos

En cuanto a la obtención de una varianza 0 exacta de un efecto aleatorio, véase stats.stackexchange.com/questions/115090 .

32voto

usεr11852 Puntos 5514

La estimación, ID = 0, indica que el nivel de variabilidad entre grupos no es suficiente para justificar la incorporación de efectos aleatorios efectos aleatorios en el modelo; es decir, su modelo es degenerado.

Como usted se identifica correctamente: lo más probable es que sí; ID como efecto aleatorio es innecesario. Se me ocurren pocas cosas para probar esta suposición:

  1. Se podría comparar (utilizando REML = F siempre) el AIC (o su CI favorito en general) entre un modelo con y sin efectos aleatorios y ver cómo va esto.
  2. Usted miraría el anova() de los dos modelos.
  3. Podría hacer un bootstrap paramétrico utilizando la distribución posterior definida por su modelo original.

Las opciones 1 y 2 tienen un problema: estás comprobando algo que está en los límites del espacio de los parámetros, por lo que no son técnicamente correctas. Dicho esto, no creo que se obtenga una visión equivocada de ellas y mucha gente las utiliza (por ejemplo, Douglas Bates, uno de los desarrolladores de lme4, las utiliza en su libro pero establece claramente esta advertencia sobre los valores de los parámetros que se prueban en el límite del conjunto de valores posibles). La opción 3 es la más tediosa de las 3, pero en realidad es la que da una mejor idea de lo que está pasando. Algunas personas tienen la tentación de utilizar también el bootstrap no paramétrico, pero creo que, dado el hecho de que estás haciendo suposiciones paramétricas para empezar, también podrías utilizarlas.

10 votos

El paquete RLRsim es una forma muy conveniente de probar los efectos aleatorios mediante pruebas de razón de verosimilitud basadas en la simulación.

2 votos

@atrichornis: +1. Interesante paquete; no lo conocía. Acabo de echar un vistazo a su código, bastante sencillo debo decir. Ojalá lo incorporen (o algo así) a lme4 especialmente ahora que mcmcsamp() está roto y la gente se queda sólo con sus propias implementaciones ad-hoc de bootstrap para obtener algunos valores p decentes, etc.

0 votos

Es cierto que los modelos mixtos no son sencillos en R. Hay muchas aproximaciones y soluciones... Aunque deduzco que SAS, etc., pasa por alto algunas de las mismas incertidumbres. Ben Bolker es coautor de ambos paquetes, puede tener sus razones para no incorporarlos. Probablemente el tiempo.

5voto

greg Puntos 11

No estoy seguro de que el planteamiento que voy a sugerir sea razonable, así que los que saben más de este tema que me corrijan si me equivoco.

Mi propuesta es crear una columna adicional en sus datos que tenga un valor constante de 1:

IDconst <- factor(rep(1, each = length(tv$Velocity)))

A continuación, puede crear un modelo que utilice esta columna como efecto aleatorio:

fm1 <- lmer(Velocity ~ D.CPC.min + FD.CPC + (1|IDconst), 
  REML = FALSE, family = gaussian, data = tv)

En este punto, podría comparar (AIC) su modelo original con el de efecto aleatorio ID (llamémoslo fm0 ) con el nuevo modelo que no tiene en cuenta ID desde IDconst es el mismo para todos sus datos.

anova(fm0,fm1)

Actualización

El usuario11852 pedía un ejemplo, porque en su opinión el planteamiento anterior ni siquiera se ejecuta. Por el contrario, puedo demostrar que el enfoque funciona (al menos con lme4_0.999999-0 que estoy utilizando actualmente).

set.seed(101)
dataset <- expand.grid(id = factor(seq_len(10)), fac1 = factor(c("A", "B"),
  levels = c("A", "B")), trial = seq_len(10))
dataset$value <- rnorm(nrow(dataset), sd = 0.5) +
      with(dataset, rnorm(length(levels(id)), sd = 0.5)[id] +
      ifelse(fac1 == "B", 1.0, 0)) + rnorm(1,.5)
    dataset$idconst <- factor(rep(1, each = length(dataset$value)))

library(lme4)
fm0 <- lmer(value~fac1+(1|id), data = dataset)
fm1 <- lmer(value~fac1+(1|idconst), data = dataset)

anova(fm1,fm0)

La salida:

  Data: dataset
  Models:
  fm1: value ~ fac1 + (1 | idconst)
  fm0: value ~ fac1 + (1 | id)

      Df    AIC    BIC  logLik  Chisq Chi Df Pr(>Chisq)
  fm1  4 370.72 383.92 -181.36                      
  fm0  4 309.79 322.98 -150.89 60.936      0  < 2.2e-16 ***

Según esta última prueba, debemos mantener el efecto aleatorio ya que el fm0 tiene el AIC más bajo, así como el BIC.

Actualización 2

Por cierto, este mismo enfoque lo propone N. W. Galwey en 'Introduction to Mixed Modelling: Beyond Regression and Analysis of Variance' en las páginas 213-214.

1 votos

¿Ha probado su idea? Por favor, demuéstrame que me equivoco, pero creo que tu idea ni siquiera se ejecutará. Si el IDconst es el mismo para todos sus datos, entonces no tiene ninguna agrupación. Necesitas un factor de agrupación para tener al menos un nivel muestreado y de la forma en que configuraste el modelo no tiene ninguno. Podría creer en la lógica de utilizar una "agrupación aleatoria", pero eso es un juego de pelota diferente. Pruebe su enfoque con algunos datos ficticios. Creo firmemente que con la configuración que propones lmer() no se ejecuta. (Yo uso lme4_0.99999911-1 )

0 votos

@user11852 Por favor, vea mi actualización y háganos saber si este enfoque funciona también con lme4_0.99999911-1 .

1 votos

No, no funcionará. Y yo dije: " no debería " porque conceptualmente no se tiene un modelo mixto para empezar. (Lo siento, puede que haya sonado demasiado agresivo en mi comentario anterior). Supongo que lo que se quiere conseguir es establecer el $Z$ para que sea un vector unitario, pero a menos que encuentres una forma de hacerlo explícitamente en R (es decir, escribir tu propia función de desviación) no tendrás suerte.

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