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 2017年

1

データは完全に架空のものであり、私がそれを生成するために使用したコードはここにあります

これらのアスリートの血液中の構成された()の濃度に関連して、完了時にglucose concentrationsグループの測定を行うという考えです。30 athletes15 racesamino acid AAAA

モデルは次のとおりです。 lmer(glucose ~ AAA + (1 + AAA | athletes)

固定効果勾配があります(グルコース〜アミノ酸A濃度); ただし、勾配はa mean = 0sd = 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.8sd = 2切片におけるランダムな変動のためには、次のように解釈されます0.077750.5アスリート間の勾配のランダムな変化の標準偏差は、として計算され0.45218ます。標準偏差で設定されたノイズ0.75はとして返されました0.73868

固定効果のインターセプトは想定され1ていました1.31146。斜面の場合はそうであるはず2で、推定値はでした1.93785

かなり近い!


シミュレートされたモデルは、ここでの具体的な現実のシナリオを与え、変数(私がシミュレートする場合、単に各アスリートの単一のランダムな観測になる排除する例と平行です。中間ステップとして、それ自体がリグレッサとして、およびランダムなインターセプトとスロープを生成するために使用されます。N 0 1 aN(0,1)
Antoni Parellada、2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.