如何动态构建lmer的公式?

Bet*_*eta 2 r lme4

我正在做混合模型并且有4个变量,x1-x4和因变量y.类变量名为cla.目前的建模结构是

md<-lmer(y~x1+x2+x3+x4+(1+x2|cla)+(1+x4|cla),data=mydata)
Run Code Online (Sandbox Code Playgroud)

但是,假设我想将模型更改为以下格式

md<-lmer(y~x1+x2+x3+x4+(1+x2|cla)+(1+x3|cla)+(1+x4|cla),data=mydata)
Run Code Online (Sandbox Code Playgroud)

我的问题是,我怎么能使这个代码动态化,这样我就可以选择变量,并将其合并到模型中.对于4个变量,这并不是很困难.但是对于大量的变量,手动添加变量非常费力.

谢谢!

Rom*_*rik 5

事先准备配方的一部分,将它们粘合在一起并将其强制送入formula物体.你可以准备单个部件到它自己的变量,他们的名字的东西可预见的(x2,x37,X4 ) so that you can automatically find them usingLS(模式=""). You fetch each object using获得, pass that to, use acollapse`参数粘在一起等瞧.

fixed.part <- "y ~ x1 + x2 + x3"

x2 <-"(1+x2|cla)"
x3 <- "(1+x3|cla)"
x4 <- "(1+x4|cla)"

random.part <- paste(sapply(ls(pattern = "^x"), get), collapse = " + ")
formula(paste(fixed.part, random.part, sep = " + "))

y ~ x1 + x2 + x3 + (1 + x2 | cla) + (1 + x3 | cla) + (1 + x4 | cla)
Run Code Online (Sandbox Code Playgroud)

如果您想减少手动控制,可以构建一个"空白"随机部分,添加一个合适的数字,其余部分与上面相同.

x <- "(1+x%s|cla)"
random.part <- paste(sprintf(x, 1:10), collapse = " + ")
formula(paste(fixed.part, random.part, sep = " + "))

y ~ x1 + x2 + x3 + (1 + x1 | cla) + (1 + x2 | cla) + (1 + x3 | 
    cla) + (1 + x4 | cla) + (1 + x5 | cla) + (1 + x6 | cla) + 
    (1 + x7 | cla) + (1 + x8 | cla) + (1 + x9 | cla) + (1 + x10 | 
    cla)
Run Code Online (Sandbox Code Playgroud)