我正在尝试模拟使用以下公式表示的模型的数据:
lme4::lmer(y ~ a + b + (1|subject), data)
,但具有一组给定的参数:
a <- rnorm()
以subject
级(例如nSubjects = 50
)衡量y
是在观察级别(例如,每个nObs = 7
的{{1}} subject
在b <- rnorm()
级别进行测量,并在给定的observation
与r
之间建立关联a
中随机效应的变异率固定为例如50/50或10/90(依此类推)lmer(y ~ 1 + (1 | subject), data)
)我使用了dCohen=0.5
,powerlmm
或simstudy
之类的各种程序包,但仍然找不到能够容纳我想预先定义的参数数量的有效解决方案。
出于我的学习目的,我更喜欢基础R方法而不是软件包解决方案。
我找到的最接近的示例是Ben Ogorek "Hierarchical linear models and lmer"的博客帖子,看起来不错,但是我不知道如何控制上面列出的参数。
任何帮助将不胜感激。 另外,如果有我不知道的软件包可以进行此类模拟,请告诉我。
答案 0 :(得分:2)
有关模型定义的一些问题:
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]]