代码之家  ›  专栏  ›  技术社区  ›  blazej

具有预定义参数的混合效应模型的模拟数据

  •  1
  • blazej  · 技术社区  · 6 年前

    我试图模拟用以下公式表示的模型的数据:
    lme4::lmer(y ~ a + b + (1|subject), data) 但是有一组给定的参数:

    • a <- rnorm() 测量时间 subject nSubjects = 50 )
    • y 在观察水平上测量(例如。 nObs = 7 主题
    • b <- rnorm() observation 在给定的水平和相关 r 具有 a
    • 随机效应的方差比 lmer(y ~ 1 + (1 | subject), data)
    • 存在一些随机噪声(因此一个完整的模型不能解释所有的方差)
    • 固定效果的效果大小可以设置在预定义的级别(例如。 dCohen=0.5 )

    我玩过各种各样的包,比如: powerlmm simstudy simr 但是仍然找不到一个工作的解决方案来适应我想预先定义的参数的数量。

    我发现最近的一个例子是 Ben Ogorek "Hierarchical linear models and lmer" 这看起来很棒,但我不知道如何控制上面列出的参数。

    任何帮助都将不胜感激。 另外,如果有一个包,我不知道,可以做这些类型的模拟请让我知道。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Ben Bolker    6 年前

    关于模型定义的一些问题:

    • nObs*nSubject )丢掉了大部分关于主体层面效果的价值观。
    • 不确定这里的“方差比”。根据定义 theta 参数(随机效应的标准差)按剩余标准差进行标度( sigma ),例如,如果 sigma=2 theta=2 ,则剩余std dev为2,受试者间std dev为4

    nSubjects <- 50
    nObs <- 7
    ## means of a,b are 0 without loss of generality
    sdvec <- c(a=1,b=1)
    rho <- 0.5  ## correlation
    betavec <- c(intercept=0,a=1,b=2)
    beta_sc <- betavec[-1]*sdvec  ## scale parameter values by sd
    theta <- 0.4  ## = 20/50
    sigma <- 1
    

    设置数据帧:

    library(lme4)      
    set.seed(101)
    ## generate a, b variables
    mm <- MASS::mvrnorm(nSubjects*nObs,
              mu=c(0,0),
              Sigma=matrix(c(1,rho,rho,1),2,2)*outer(sdvec,sdvec))
    subj <- factor(rep(seq(nSubjects),each=nObs))  ## or ?gl
    ## sample every nObs'th value of a
    avec <- mm[seq(1,nObs*nSubjects,by=nObs),"a"]
    avec <- rep(avec,each=nObs)  ## replicate
    bvec <- mm[,"b"]
    dd <- data.frame(a=avec,b=bvec,Subject=subj)
    

    模拟:

    dd$y <- simulate(~a+b+(1|Subject),
                   newdata=dd,
                   newparams=list(beta=beta_sc,theta=theta,sigma=1),
                   family=gaussian)[[1]]