在 lme4 中指定公式的不同方法
Different ways for specifying formula in lme4
library(lme4)
data("sleepstudy")
sleepstudy$x2 <- runif(length(sleepstudy$Reaction))
sleepstudy$x3 <- runif(length(sleepstudy$Reaction))
mdl <- lmer(Reaction ~ Days + x2 + x3 + (1|Subject), data = sleepstudy)
我想知道如何以不同的方式指定上述公式。作为上下文,我的数据框由 1 个因变量、20 个自变量和 1 个用作随机效应的分组变量组成。我做了一些预处理,基本上减少了自变量的数量。但是,我确实知道这 20 个变量中的哪些会被提前保留。那么有什么方法可以指定上面的内容,例如:
mdl <- lmer(sleepstudy[,"the first column"] ~ sleepstudy[, "all the other columns in the df"] + (1|"the last column"), data = sleepstudy)
我唯一知道的是第一列是因变量,最后一列是随机变量,中间的所有列都是预测变量
编辑
我已经这样做了:
as.formula(paste("y~", paste(pred.names, collapse="+")))
pred.names
是我要使用的最终变量列表的名称。在上面的公式中,随机效应 gorup
变量放在哪里。
根据描述
sleepstudy <- sleepstudy[c(1:2, 4:5, 3)]
out <- lmer(formula(paste(names(sleepstudy)[1], '~',
paste(names(sleepstudy)[2:(ncol(sleepstudy)-1)], collapse=' + '),
'+ (1|', names(sleepstudy)[ncol(sleepstudy)], ')')), data = sleepstudy)
注意:这里,我们假设最后一列是'Subject'
检查输出
mdl <- lmer(Reaction ~ Days + x2 + x3 + (1|Subject), data = sleepstudy)
all.equal(out, mdl)
#[1] TRUE
library(lme4)
data("sleepstudy")
sleepstudy$x2 <- runif(length(sleepstudy$Reaction))
sleepstudy$x3 <- runif(length(sleepstudy$Reaction))
mdl <- lmer(Reaction ~ Days + x2 + x3 + (1|Subject), data = sleepstudy)
我想知道如何以不同的方式指定上述公式。作为上下文,我的数据框由 1 个因变量、20 个自变量和 1 个用作随机效应的分组变量组成。我做了一些预处理,基本上减少了自变量的数量。但是,我确实知道这 20 个变量中的哪些会被提前保留。那么有什么方法可以指定上面的内容,例如:
mdl <- lmer(sleepstudy[,"the first column"] ~ sleepstudy[, "all the other columns in the df"] + (1|"the last column"), data = sleepstudy)
我唯一知道的是第一列是因变量,最后一列是随机变量,中间的所有列都是预测变量
编辑
我已经这样做了:
as.formula(paste("y~", paste(pred.names, collapse="+")))
pred.names
是我要使用的最终变量列表的名称。在上面的公式中,随机效应 gorup
变量放在哪里。
根据描述
sleepstudy <- sleepstudy[c(1:2, 4:5, 3)]
out <- lmer(formula(paste(names(sleepstudy)[1], '~',
paste(names(sleepstudy)[2:(ncol(sleepstudy)-1)], collapse=' + '),
'+ (1|', names(sleepstudy)[ncol(sleepstudy)], ')')), data = sleepstudy)
注意:这里,我们假设最后一列是'Subject'
检查输出
mdl <- lmer(Reaction ~ Days + x2 + x3 + (1|Subject), data = sleepstudy)
all.equal(out, mdl)
#[1] TRUE