Я изо всех сил пытаюсь написать сценарий, который позволяет использовать более гибкий подход для сравнения различных моделей линейных смешанных эффектов с использованием пакета lme4
или nlme
. Поскольку я не хочу настраивать сценарий для каждой модели, которую я добавляю или капля, я ищу динамический подход . Для этого мне нужно было бы только отрегулировать одну переменную, которая содержит символьные строки модельных формул.Как динамически передать аргумент «объект» функции anova()
Это прекрасно работает, если anova()
не приходит в anova()
не принимает список элементов, содержащих соответствующие классы:.
###### Here is my problem
# comparing models by means of ANOVA
anova(lme.lst) #### --> does not work
anova(lme.lst[[1]], lme.lst[[2]], lme.lst[[3]]) #### would work but kills the dynamic approach
######
Я не фигурирующие аккуратный способ разложить список и передать несколько аргументов в функция anova()
. Я пробовал unlist()
без каких-либо успехов.
Вот минимальный пример (адаптировано из lme4 manual, p. 8):
require(lme4)
require(AICcmodavg)
# Variable containing of strings in order to describe the fixed effect terms
# (wihout response/dependen variable) ### should be orderd from
callModel <- c("angle ~ recipe + temp + (1|recipe:replicate)", # model1 ### small
"angle ~ recipe + temperature + (1|recipe:replicate)", # model2 ### too
"angle ~ recipe * temperature + (1|recipe:replicate)") # model3 ### BIG
# convert string array 'callFeVar' into a list of formulas
callModel <- sapply(callModel, as.formula)
# create an empty list for safing the results of fitted model
lme.lst <- list()
# do model fitting in a loop and change list names
for (i in 1 : length(callModel)) {
lmeTmp <- lmer(callModel[[i]], cake, REML= FALSE)
lme.lst[i] <- list(lmeTmp)
names(lme.lst)[i] <- deparse(callModel[[i]])
}
# remove temporary variable
rm(lmeTmp)
# summary of models
lapply(lme.lst, summary)
###### Here is my problem
# comparing models by means of ANOVA
anova(lme.lst) #### --> does not work
anova(lme.lst[[1]], lme.lst[[2]], lme.lst[[3]]) #### would work but kills the dynamic approach
######
# comparing models by means of AICc
aictab(lme.lst) #### accepts list
Не работает таким образом с минимальным примером. Я получаю: 'Ошибка в anova.merMod (' 'angle ~ recipe + temp + (1 | recipe: replicate)' '= <Объект класса S4 класса« lmerMod »>: Отсутствует аргумент« объект », без default' – ToJo
Я просто искал немного больше, понимая следующее: при использовании 'do.call'' anova' не любит аргументы имени списка. Поэтому, обертывание списка в 'noname' делает трюк:' do.call (anova, unname (lme.lst)). Теперь было бы здорово передать аргумент 'model.names', задав его именам (me.lst)'. Любые идеи? Однако последнее было бы «приятная вещь». – ToJo