R (lme4) ile karışık etkiler göstermek için verileri nasıl simüle edebilirim?


10

Bir meslektaşı olarak bu yazı , ben bağıntılı Savunma ve yamaçları kendilerini kredi, sürekli değişkenler ile veri simüle üzerinde çalıştı.

Bu konuda sitede ve site dışında harika yayınlar olmasına rağmen , basit, gerçek bir yaşam senaryosuna paralel simüle edilmiş verilerle baştan sona bir örnekle karşılaşmakta zorlandım.

Soru şu: Bu verilerin nasıl simüle edileceği ve "test edileceği" lmer. Birçoğu için yeni bir şey yok, ancak karışık modelleri anlamak için arayan birçok kişi için muhtemelen yararlı değil.

Yanıtlar:


8

Bir blog makale formatını tercih ederseniz, Hiyerarşik doğrusal modeller ve lmer rastgele eğimler ve kesişme noktalarına sahip bir simülasyona sahip bir makaledir. İşte kullandığım simülasyon kodu:

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
Ben, Cevabınız için teşekkürler! Şu an gerçekten meşgulüm, ama bir şans bulduğu anda dikkatlice inceleyeceğim. + kredi :-)
Antoni Parellada

1

Veriler tamamen kurgusaldır ve oluşturmak için kullandığım kod burada bulunabilir .

Fikir, üzerinde ölçümler alacağını olan glucose concentrationsbir grup 30 athletestamamlandıktan sonra 15 racesyapılan makyaj konsantrasyonu ile ilgili olarak amino acid A( AAA), sporcuların kan.

Model: lmer(glucose ~ AAA + (1 + AAA | athletes)

Sabit bir etki eğimi vardır (glikoz-amino asit A ​​konsantrasyonu); Bununla birlikte, eğimler da farklı sporcuların arasında değişmektedir mean = 0ve sd = 0.5farklı sporcular için kesişir yaklaşık rastgele etki yayılır ise, 0ile sd = 0.2. Ayrıca, aynı atlet içindeki kesişmeler ile 0.8'lik eğimler arasında bir korelasyon vardır.

Bu rastgele efektler, seçilen intercept = 1sabit efektler için eklenir ve slope = 2.

Glukoz konsantrasyonu değerleri hesaplandı alpha + AAA * beta + 0.75 * rnorm(observations)her sporcu (yani için kesişim anlamına 1 + random effects changes in the intercept) amino asidin konsantrasyonuna, her sporcu (yani eğim ) ( bir olması için ayarlanır), .+AAA + ϵ2 + random effect changes in slopes for each athlete+ noiseϵsd = 0.75

Veriler şöyle görünür:

      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
    ...

Gerçekçi olmayan glikoz seviyeleri, ama yine de ...

Özet şunu döndürür:

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

Rastgele etkiler korelasyonu 1yerine 0.8. sd = 2İntercepts rastgele varyasyon olarak yorumlanır 0.07775. 0.5Sporcular arasında yamaçlardaki rasgele değişiklikler için standart sapma olarak hesaplanır 0.45218. Standart sapma ile ayarlanan gürültü 0.75olarak geri döndü 0.73868.

Sabit etkilerin kesişmesi gerekiyordu 1ve anladık 1.31146. Eğim için olması gerekiyordu 2ve tahmin öyleydi 1.93785.

Oldukça yakın!


Simüle modeli, örneğin paralel burada oa beton, gerçek hayattaki bir olayda veren ve ortadan kaldırılması (durumda Sadece tek bir rastgele olacaktır simüle değişken olan her sporcusu için gözlem) hem kendi başına bir regresör olarak hem de bir ara adım olarak rastgele kesişim ve eğimler oluşturmak için kullanılır. N ( 0 , 1 )aN(0,1)
Antoni Parellada
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.