R:通过混合效应模型循环多个自变量

时间:2017-05-31 23:01:15

标签: r lapply lme4

我希望通过混合效果模型循环一些自变量。有几个类似的问题,但没有什么对我有用。使用mtcars的示例:

fill

因此,对于我的'基本'模型,我现在希望通过模型迭代运行xnam2中的每个变量作为固定效果,但不能使用lapply和paste方法:

data(mtcars)
mtcars <- mtcars

t <- as.data.frame(seq(from = 10, to = 1000, by = 100))
names(t)[1] <- "return"
t <- as.data.frame(t(t))

#create some new variables to loop through
new <- cbind(mtcars$drat, t)
new2 <- 1-exp(-mtcars$drat/new[, 2:10])
new3 <- cbind(mtcars, new2)

xnam <- paste(colnames(mtcars)[c(3:4)], sep="") 
xnam2 <- paste(colnames(reference)[c(12:20)], sep="")

#basic model (works fine)
fmla <- paste(xnam, collapse= "+")
fla <- paste("cyl ~", paste(fmla))
f <- paste0(paste(fla), " +(carb|gear)")
mtcarsmodel <- lmer(f, data= mtcars)
mtcarsmodel

所以我想要的是cyl~disp + hp +循环变量+(carb | gear)。

希望我能够完成的目标很明确。我对多个贴片感到有些困惑,但似乎是处理许多变量的最佳方法。有什么建议吗?

2 个答案:

答案 0 :(得分:2)

如果我理解了您的问题,我认为您可以使用// Sorting the list based on values Collections.sort(list, new Comparator<Entry<String, Integer>>() { public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) { return o2.getValue().compareTo(o1.getValue()); } }); // Maintaining insertion order with the help of LinkedList Map<String, Integer> sortedMap = new LinkedHashMap<String, Integer>(); for (Entry<String, Integer> entry : list) { sortedMap.put(entry.getKey(), entry.getValue()); } 创建模型公式,并使用paste迭代每个新变量。

lapply

答案 1 :(得分:1)

@ eipi10解决方案的一个小变种:

library(lme4)
vars = names(mtcars)[c(1,5,6,7)]
otherVars <- c("disp","hp","(carb|gear)")
formList <- lapply(vars,function(x) {
       reformulate(c(otherVars,x),response="cyl")
})
modList <- lapply(formList,lmer,data=mtcars)