如何动态构造 lmer 的公式?
how to construct formula for lmer dynamically?
我正在做混合模型并且有 4 个变量,x1-x4 以及因变量 y。 class 变量称为 cla。目前的建模结构是
md<-lmer(y~x1+x2+x3+x4+(1+x2|cla)+(1+x4|cla),data=mydata)
但是,假设我想将模型更改为以下格式
md<-lmer(y~x1+x2+x3+x4+(1+x2|cla)+(1+x3|cla)+(1+x4|cla),data=mydata)
我的问题是,我怎样才能使这段代码动态化,这样我就可以只选择变量,并将它合并到模型中。对于只有 4 个变量,这不是很困难。但是对于大量的变量,手动添加变量是相当费力的。
谢谢!
提前准备好部分公式,将它们粘在一起,强制转换成一个formula
对象。您可以将各个部分准备到它自己的变量中,将它们命名为可预测的名称 (x2
, x37,
x4) so that you can automatically find them using
ls(pattern = ""). You fetch each object using
get, pass that to
粘贴, use a
collapse` 参数以将它们粘合在一起 瞧瞧.
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)
如果想减少手动控制,可以构造一个"blank"随机部分,加上适当的数字,其余同上。
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)
我正在做混合模型并且有 4 个变量,x1-x4 以及因变量 y。 class 变量称为 cla。目前的建模结构是
md<-lmer(y~x1+x2+x3+x4+(1+x2|cla)+(1+x4|cla),data=mydata)
但是,假设我想将模型更改为以下格式
md<-lmer(y~x1+x2+x3+x4+(1+x2|cla)+(1+x3|cla)+(1+x4|cla),data=mydata)
我的问题是,我怎样才能使这段代码动态化,这样我就可以只选择变量,并将它合并到模型中。对于只有 4 个变量,这不是很困难。但是对于大量的变量,手动添加变量是相当费力的。
谢谢!
提前准备好部分公式,将它们粘在一起,强制转换成一个formula
对象。您可以将各个部分准备到它自己的变量中,将它们命名为可预测的名称 (x2
, x37,
x4) so that you can automatically find them using
ls(pattern = ""). You fetch each object using
get, pass that to
粘贴, use a
collapse` 参数以将它们粘合在一起 瞧瞧.
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)
如果想减少手动控制,可以构造一个"blank"随机部分,加上适当的数字,其余同上。
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)