Як імітувати дані для демонстрації змішаних ефектів з R (lme4)?


10

Як аналог цієї посади , я працював над імітацією даних безперервними змінними, піддаючи себе кореляційним перехопленням і нахилам.

Хоча є великі повідомлення на цю тему на сайті , а також за межами сайту , у мене були труднощі зустрівши , наприклад початок в кінець з змодельованих даних, паралельно простий, реальний сценарій.

Тож питання полягає в тому, як імітувати ці дані та "перевірити" їх lmer. Нічого нового для багатьох, але можливо корисного для багатьох інших, які шукають зрозуміти змішані моделі.

Відповіді:


8

Якщо ви віддаєте перевагу формат статті блогу, лінійні ієрархічні моделі та 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
Бен, дякую за відповідь! Я дійсно зараз зайнятий, але я уважно перегляну це, як тільки отримаю можливість. + в кредит :-)
Антоні Пареллада

1

Дані повністю вигадані, і код, який я використовував для їх створення, можна знайти тут .

Ідея полягає в тому, що ми б проводили вимірювання на glucose concentrationsгрупі 30 athletesпісля завершення 15 racesвідносно концентрації складу amino acid A( AAA) в крові цих спортсменів.

Модель: lmer(glucose ~ AAA + (1 + AAA | athletes)

Існує нахил з фіксованим ефектом (концентрація глюкози - амінокислоти А); Однак, схили також різняться між різними спортсменами з 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) концентрацію амінокислоти, нахил для кожного спортсмена (тобто ) ( ), який ми встановили .+AAA + ϵ2 + random effect changes in slopes for each athlete+ noiseϵsd = 0.75

Отже, дані виглядають так:

      athletes races      AAA   glucose
    1        1     1  51.79364 104.26708
    2        1     2  49.94477 101.72392
    3        1     3  45.29675  92.49860
    4        1     4  49.42087 100.53029
    5        1     5  45.92516  92.54637
    6        1     6  51.21132 103.97573
    ...

Нереалістичний рівень глюкози, але все ж ...

Підсумок повертає:

Random effects:
 Groups   Name        Variance Std.Dev. Corr
 athletes (Intercept) 0.006045 0.07775      
          AAA         0.204471 0.45218  1.00
 Residual             0.545651 0.73868      
Number of obs: 450, groups:  athletes, 30

Fixed effects:
             Estimate Std. Error        df t value Pr(>|t|)    
(Intercept)   1.31146    0.35845 401.90000   3.659 0.000287 ***
AAA           1.93785    0.08286  29.00000  23.386  < 2e-16 ***
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1

Кореляція випадкових ефектів 1замість цього 0.8. Для sd = 2випадкової варіації перехоплення інтерпретується як 0.07775. Стандартне відхилення 0.5для випадкових змін схилів серед спортсменів обчислюється як 0.45218. Шум, встановлений зі стандартним відхиленням, 0.75повертався як 0.73868.

Перехоплення фіксованих ефектів повинно було бути 1, і ми отримали 1.31146. Для схилу це повинно було бути 2, і кошторис був 1.93785.

Досить близько!


Штучне модель паралельно наприклад тут , надаючи йому конкретний, реальний сценарій і усуває змінний (яка в разі , якщо я імітувати б просто один, випадкові спостережень для кожного спортсмена) , який був використовується як власне як регресор, так і для генерації випадкових перехоплень і нахилів, як проміжний крок. N ( 0 , 1 )aN(0,1)
Антоні Пареллада
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.