如何模拟数据以证明与R(lme4)的混合效果?


10

作为这篇文章的对应内容,我致力于模拟具有连续变量的数据,使它们适合于相关的截距和斜率。

虽然有关于这一主题伟大的职位在网站上,并在现场之外,我在跨开始到结束例如即将与并联一个简单的,现实生活中的情景模拟数据有困难。

因此,问题是如何模拟这些数据,并使用进行“测试” lmer。对于许多人而言,这并不是什么新鲜事物,但对于其他许多试图了解混合模型的人来说,却可能有用。

Answers:


8

如果您更喜欢博客文章格式,那么我撰写的文章Hierarchical linear model and 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 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.077750.5运动员之间坡度随机变化的标准偏差计算为0.45218。以标准差设置的噪声0.75返回为0.73868

固定效果的截距应该是截获的1,我们知道了1.31146。对于坡度应该是2,估计是1.93785

相当接近!


模拟的模型与此处的示例平行,从而提供了一个具体的实际场景,消除了变量(在我的情况下,变量将只是每个运动员的单个随机观察值),既用作自身的回归器,又用作生成随机截距和斜率,作为中间步骤。Ñ 0 1 aN(0,1)
安东尼帕雷拉达,2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.