¿Cómo simular datos para demostrar efectos mixtos con R (lme4)?
10
Como contraparte de esta publicación , trabajé en la simulación de datos con variables continuas, prestándome a intercepciones y pendientes correlacionadas.
Aunque hay excelentes publicaciones sobre este tema en el sitio y fuera del sitio , tuve dificultades para encontrar un ejemplo de principio a fin con datos simulados que fueran paralelos a un escenario simple de la vida real.
Entonces, la pregunta es cómo simular estos datos y "probarlos" con ellos lmer. Nada nuevo para muchos, pero posiblemente útil para muchos otros que buscan comprender modelos mixtos.
Si prefiere un formato de artículo de blog, Modelos lineales jerárquicos e Imer es un artículo que escribí que presenta una simulación con pendientes e intercepciones aleatorias. Aquí está el código de simulación que utilicé:
rm(list = ls())
set.seed(2345)
N <-30
unit.df <- data.frame(unit = c(1:N), a = rnorm(N))
head(unit.df,3)
unit.df <- within(unit.df,{
E.alpha.given.a <-1-0.15* a
E.beta.given.a <-3+0.3* a})
head(unit.df,3)
library(mvtnorm)
q =0.2
r =0.9
s =0.5
cov.matrix <- matrix(c(q^2, r * q * s, r * q * s, s^2), nrow =2,
byrow =TRUE)
random.effects <- rmvnorm(N, mean = c(0,0), sigma = cov.matrix)
unit.df$alpha <- unit.df$E.alpha.given.a + random.effects[,1]
unit.df$beta <- unit.df$E.beta.given.a + random.effects[,2]
head(unit.df,3)
J <-30
M = J * N #Total number of observations
x.grid = seq(-4,4, by =8/J)[0:30]
within.unit.df <- data.frame(unit = sort(rep(c(1:N), J)), j = rep(c(1:J),
N), x =rep(x.grid, N))
flat.df = merge(unit.df, within.unit.df)
flat.df <- within(flat.df, y <- alpha + x * beta +0.75* rnorm(n = M))
simple.df <- flat.df[, c("unit","a","x","y")]
head(simple.df,3)
library(lme4)
my.lmer <- lmer(y ~ x +(1+ x | unit), data = simple.df)
cat("AIC =", AIC(my.lmer))
my.lmer <- lmer(y ~ x + a + x * a +(1+ x | unit), data = simple.df)
summary(my.lmer)
Ben, gracias por tu respuesta! Estoy realmente ocupado en este momento, pero lo examinaré cuidadosamente tan pronto como tenga la oportunidad. + a crédito :-)
Antoni Parellada
1
Los datos son completamente ficticios y el código que usé para generarlos se puede encontrar aquí .
La idea es que tomaríamos medidas en glucose concentrationsun grupo de 30athletesal finalizar 15racesen relación con la concentración del maquillaje amino acid A( AAA) en la sangre de estos atletas.
Hay una pendiente de efecto fijo (concentración de glucosa ~ aminoácido A); Sin embargo, las pendientes también varían entre los diferentes atletas con una mean = 0y sd = 0.5, mientras que las intersecciones de los diferentes atletas se extienden unos efectos aleatorios alrededor 0con sd = 0.2. Además, existe una correlación entre las intersecciones y las pendientes de 0.8 dentro del mismo atleta.
Estos efectos aleatorios se agregan a un elegido intercept = 1para efectos fijos, y slope = 2.
Los valores de la concentración de glucosa se calcularon como alpha + AAA * beta + 0.75 * rnorm(observations), lo que significa la intercepción para cada atleta (es decir 1 + random effects changes in the intercept) la concentración de aminoácidos, la pendiente para cada atleta (es decir ) ( ), que configuramos para tener a .+AAA∗+ ϵ2 + random effect changes in slopes for each athlete+noiseϵsd = 0.75
Niveles poco realistas de glucosa, pero aún así ...
El resumen devuelve:
Random effects:
Groups Name Variance Std.Dev. Corr
athletes (Intercept)0.0060450.07775
AAA 0.2044710.452181.00
Residual 0.5456510.73868
Number of obs:450, groups: athletes,30
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)(Intercept)1.311460.35845401.900003.6590.000287***
AAA 1.937850.0828629.0000023.386<2e-16***---
Signif. codes:0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
La correlación de efectos aleatorios es en 1lugar de 0.8. La sd = 2variación aleatoria en las intersecciones se interpreta como 0.07775. La desviación estándar de 0.5los cambios aleatorios en las pendientes entre los atletas se calcula como 0.45218. El ruido creado con una desviación estándar 0.75se devolvió como 0.73868.
Se suponía que la intercepción de efectos fijos era 1, y lo conseguimos 1.31146. Para la pendiente se suponía que era 2, y la estimación era 1.93785.
El modelo simulado es paralelo al ejemplo aquí dándole un hormigón, escenario de la vida real y la eliminación de la variable (que en el caso simulo sería simplemente una única, al azar de observación para cada atleta) que era utilizado tanto como regresor por derecho propio, como para generar intercepciones aleatorias y pendientes, como un paso intermedio. N ( 0 , 1 )aN(0,1)
Los datos son completamente ficticios y el código que usé para generarlos se puede encontrar aquí .
La idea es que tomaríamos medidas en
glucose concentrations
un grupo de30
athletes
al finalizar15
races
en relación con la concentración del maquillajeamino acid A
(AAA
) en la sangre de estos atletas.El modelo es:
lmer(glucose ~ AAA + (1 + AAA | athletes)
Hay una pendiente de efecto fijo (concentración de glucosa ~ aminoácido A); Sin embargo, las pendientes también varían entre los diferentes atletas con una
mean = 0
ysd = 0.5
, mientras que las intersecciones de los diferentes atletas se extienden unos efectos aleatorios alrededor0
consd = 0.2
. Además, existe una correlación entre las intersecciones y las pendientes de 0.8 dentro del mismo atleta.Estos efectos aleatorios se agregan a un elegido
intercept = 1
para efectos fijos, yslope = 2
.Los valores de la concentración de glucosa se calcularon como+ ∗ + ϵ+ ϵ
alpha + AAA * beta + 0.75 * rnorm(observations)
, lo que significa la intercepción para cada atleta (es decir1 + random effects changes in the intercept
) la concentración de aminoácidos, la pendiente para cada atleta (es decir ) ( ), que configuramos para tener a .AAA
2 + random effect changes in slopes for each athlete
noise
sd = 0.75
Entonces los datos se ven así:
Niveles poco realistas de glucosa, pero aún así ...
El resumen devuelve:
La correlación de efectos aleatorios es en
1
lugar de0.8
. Lasd = 2
variación aleatoria en las intersecciones se interpreta como0.07775
. La desviación estándar de0.5
los cambios aleatorios en las pendientes entre los atletas se calcula como0.45218
. El ruido creado con una desviación estándar0.75
se devolvió como0.73868
.Se suponía que la intercepción de efectos fijos era
1
, y lo conseguimos1.31146
. Para la pendiente se suponía que era2
, y la estimación era1.93785
.¡Bastante cerca!
fuente