Как смоделировать данные, чтобы продемонстрировать смешанные эффекты с R (lme4)?
10
Как аналог этого поста , я работал над моделированием данных с непрерывными переменными, подстраиваясь под коррелированные перехваты и уклоны.
Хотя на сайте и за его пределами есть отличные сообщения на эту тему , у меня возникли трудности с поиском от начала до конца примера с симулированными данными, параллельными простому реальному сценарию.
Поэтому вопрос состоит в том, как смоделировать эти данные и «протестировать» их lmer. Ничего нового для многих, но, возможно, полезного для многих других, стремящихся понять смешанные модели.
Если вы предпочитаете формат статьи в блоге, я написал статью об иерархических линейных моделях и lmer , в которой представлена симуляция со случайными наклонами и перехватами. Вот код симуляции, который я использовал:
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)
Бен, спасибо за ответ! Я сейчас очень занят, но я внимательно посмотрю, как только у меня появится шанс. + в кредит :-)
Антони Пареллада
1
Данные полностью вымышлены, и код, который я использовал для их генерации, можно найти здесь .
Идея состоит в том, что мы будем проводить измерения glucose concentrationsв группе 30athletesпо завершении 15racesв отношении концентрации искусственной amino acid A( AAA) в крови этих спортсменов.
Существует фиксированный наклон эффекта (концентрация глюкозы ~ аминокислоты A); Однако, склоны также различаются между различными спортсменами с mean = 0и sd = 0.5, в то время как перехватывает для различных спортсменов распространены случайные эффекты вокруг 0с sd = 0.2. Кроме того, существует корреляция между перехватами и уклонами 0,8 в пределах одного и того же спортсмена.
Эти случайные эффекты добавляются к выбранным intercept = 1для фиксированных эффектов, и slope = 2.
Значения концентрации глюкозы были рассчитаны как alpha + AAA * beta + 0.75 * rnorm(observations): значение перехвата для каждого спортсмена (то есть 1 + random effects changes in the intercept) концентрация аминокислоты, наклон для каждого спортсмена (то есть ) ( ), который мы установили, чтобы иметь a .+AAA*+ ϵ2 + random effect changes in slopes for each athlete+noiseεsd = 0.75
Данные полностью вымышлены, и код, который я использовал для их генерации, можно найти здесь .
Идея состоит в том, что мы будем проводить измерения
glucose concentrations
в группе30
athletes
по завершении15
races
в отношении концентрации искусственнойamino acid A
(AAA
) в крови этих спортсменов.Модель является:
lmer(glucose ~ AAA + (1 + AAA | athletes)
Существует фиксированный наклон эффекта (концентрация глюкозы ~ аминокислоты A); Однако, склоны также различаются между различными спортсменами с
mean = 0
иsd = 0.5
, в то время как перехватывает для различных спортсменов распространены случайные эффекты вокруг0
сsd = 0.2
. Кроме того, существует корреляция между перехватами и уклонами 0,8 в пределах одного и того же спортсмена.Эти случайные эффекты добавляются к выбранным
intercept = 1
для фиксированных эффектов, иslope = 2
.Значения концентрации глюкозы были рассчитаны как+ * + ϵ+ ε
alpha + AAA * beta + 0.75 * rnorm(observations)
: значение перехвата для каждого спортсмена (то есть1 + random effects changes in the intercept
) концентрация аминокислоты, наклон для каждого спортсмена (то есть ) ( ), который мы установили, чтобы иметь a .AAA
2 + random effect changes in slopes for each athlete
noise
sd = 0.75
Итак, данные выглядят так:
Нереалистичные уровни глюкозы, но все же ...
Резюме возвращается:
Корреляция случайных эффектов
1
вместо0.8
.sd = 2
Для случайной вариации перехватывает интерпретируется как0.07775
. Стандартное отклонение0.5
для случайных изменений уклонов среди спортсменов рассчитывается как0.45218
. Шум, установленный со стандартным отклонением,0.75
был возвращен как0.73868
.Перехват фиксированных эффектов должен был быть
1
, и мы получили1.31146
. Для склона это должно было быть2
, а оценка была1.93785
.Довольно близко!
источник