对于数据框中每一列的 运行 lmer 模型循环给出 "variable lengths differ" 错误 (R)
For loop to run lmer model for each column in a dataframe gives "variable lengths differ" error (R)
我正在尝试 运行 一个 for 循环,将数据框中的每一列插入 lme4::lmer() 模型语法并将结果附加到列表中,例如
list_results_univariate <- list()
for (i in names(my_dataset))
{
resultmodel <- lmer(y_variable ~
i + i*timevar1 + i*timevar2 +
(1|Date) + (1|Location),
data= my_dataset)
tidy_resultmodel <- tidy_lmer(resultmodel)
list_results_univariate[[i]] <- tidy_resultmodel
}
但结果是:
Error in model.frame.default(data = my_dataset, drop.unused.levels = TRUE, :
variable lengths differ (found for 'i')
数据集不包含 NA 和单水平因子,因为我已经删除了这些。如果我从我迭代的名称列表中删除 timevar1、timevar2、Date 和 Location,它仍然 returns 相同的错误。
如何在不为每个变量手动编写模型的情况下将其设置为 运行?
您的公式直接包含 i
,这意味着 lmer
期望在您的数据集中找到名为 i
的列。您的 i
变量的长度为 1(字符串列名称),但 lmer
期望长度等于您的 y_variable
长度的变量,因此出现错误消息。
在你的循环中,你应该创建一个计算 i
为其基础值的公式,然后在 lmer
中使用该公式。例如:
library(lme4)
dat <- data.frame(id = sample(c("a", "b", "c"), 100, replace=TRUE),
y = rnorm(100),
x = rnorm(100),
w = rnorm(100),
z = rnorm(100))
# this errors
for (i in c("x", "w", "z")) {
lmer(y ~ i + (1 | id), data=dat)
}
# this works
models <- list()
for (i in c("x", "w", "z")) {
f <- formula(paste("y~(1|id)+", i))
models[[i]] <- lmer(f, data=dat)
}
我正在尝试 运行 一个 for 循环,将数据框中的每一列插入 lme4::lmer() 模型语法并将结果附加到列表中,例如
list_results_univariate <- list()
for (i in names(my_dataset))
{
resultmodel <- lmer(y_variable ~
i + i*timevar1 + i*timevar2 +
(1|Date) + (1|Location),
data= my_dataset)
tidy_resultmodel <- tidy_lmer(resultmodel)
list_results_univariate[[i]] <- tidy_resultmodel
}
但结果是:
Error in model.frame.default(data = my_dataset, drop.unused.levels = TRUE, :
variable lengths differ (found for 'i')
数据集不包含 NA 和单水平因子,因为我已经删除了这些。如果我从我迭代的名称列表中删除 timevar1、timevar2、Date 和 Location,它仍然 returns 相同的错误。
如何在不为每个变量手动编写模型的情况下将其设置为 运行?
您的公式直接包含 i
,这意味着 lmer
期望在您的数据集中找到名为 i
的列。您的 i
变量的长度为 1(字符串列名称),但 lmer
期望长度等于您的 y_variable
长度的变量,因此出现错误消息。
在你的循环中,你应该创建一个计算 i
为其基础值的公式,然后在 lmer
中使用该公式。例如:
library(lme4)
dat <- data.frame(id = sample(c("a", "b", "c"), 100, replace=TRUE),
y = rnorm(100),
x = rnorm(100),
w = rnorm(100),
z = rnorm(100))
# this errors
for (i in c("x", "w", "z")) {
lmer(y ~ i + (1 | id), data=dat)
}
# this works
models <- list()
for (i in c("x", "w", "z")) {
f <- formula(paste("y~(1|id)+", i))
models[[i]] <- lmer(f, data=dat)
}