我想通过for循环计算线性混合效应模型,其中总是有硬编码的Y和随机效应。X变量(var.nam[i]
)将被循环通过。我编写了代码并且它正在工作(我相信),但我也想根据 X 变量 (var.nam[i]
) 类型(数字、因子)对 X 变量 (var.nam[i]
) 进行子集,其中:
当 X 变量 (var.nam[i]
) 为数值时,排除所有等于 0 的观测值
当 X 变量 (var.nam[i]
) 是因子时,不要子集 X 变量 (var.nam[i]
)
我的代码的简短示例在这里:
for(i in 1:length(var.nam)) {
formula[i] <- paste0("Y", "~", paste0(c(var.nam[i], c("Season"),
c("Sex"),
c("Age"),
c("BMI"),
c("(1|HID)")), collapse="+"))
model <- lmer(formula[i], data = subset(data, paste0(c(var.nam[i])) != 0))
# loop continues...
}
正如现在所写的,它将对所有X变量(var.nam[i]
)进行子集,而不管类型如何。是否有任何解决方法或不同的方法来子集变量,在这种特定情况下有效?
在没有数据或完整的 for 循环的情况下,检查此解决方案是否有效有点困难。 根据您的问题,您希望有条件地进行子集,添加 if else 语句应该可以做到这一点:
for(i in 1:length(var.nam)) {
formula[i] <- paste0("Y", "~", paste0(c(var.nam[i], c("Season"),
c("Sex"),
c("Age"),
c("BMI"),
c("(1|HID)")), collapse="+"))
data1 <- if(mode(var.nam[i]) == "numeric") {subset(data, paste0(c(var.nam[i])) !=0)} else {data}
model <- lmer(formula[i], data = data1)
# loop continues...
}