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
벤, 답변 주셔서 감사합니다! 지금은 정말 바쁘지만, 기회가 생기면 조심스럽게 살펴 보겠습니다. 신용에 + :-)
Antoni Parellada

1

데이터는 완전히 허구이며 데이터를 생성하는 데 사용한 코드는 여기 에서 찾을 수 있습니다 .

아이디어는 우리 가이 운동 선수의 혈액에서 구성 농도 ( )와 관련 하여 완료시 glucose concentrations그룹에 대해 측정한다는 것입니다 .30 athletes15 racesamino acid AAAA

모델은 다음과 같습니다 lmer(glucose ~ AAA + (1 + AAA | athletes)

고정 효과 기울기가 있습니다 (포도당 ~ 아미노산 A 농도). 그러나, 경사면은 또한 서로 다른 선수 사이에서 변화 mean = 0sd = 0.5다른 선수에 대한 도청 주위 임의의 효과를 전파하는 동안, 0sd = 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)
Antoni Parellada
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.