Используя as.formula() в glmer и углубляя его в MuMIn
Я пытаюсь использовать dredge
функция от MuMIn
пакет, как следует. Поскольку я хочу запустить его для разных наборов данных, я использую функцию, которая принимает вектор ковариат, и формула создается из этого вектора внутри функции.
require(lme4);require(MuMIn)
x1 <- rnorm(100)
x2 <- rnorm(100)
zrand <- sample(letters, 100, replace =T)
yind <- sample(1:1000, size=100, replace=T)
mydata <- data.frame(yind, x1, x2, zrand)
vars <- c('x1', 'x2')
Когда я запускаю его таким образом, я получаю сообщение об ошибке, что символ не является подмножеством. Я думаю, что это связано с использованием vars
в формуле, хотя лмер работает нормально
myformula <- as.formula(paste('yind~',paste(vars,collapse='+'),'+(1|zrand)'))
mylmer1 <- lmer(myformula, mydata, gaussian)
dredge(mylmer1)
Ошибка в терминах (as.formula(формула (x))): ошибка в оценке аргумента "x" при выборе метода для функции "термины": Ошибка: объект типа "символ" не может быть подмножеством
Но это работает хорошо, по причине, которую я не понимаю полностью, но связано с областью действия функции dredge. (Я могу быть совершенно не в порядке здесь)
mylmer2 <- lmer(as.formula(paste('yind~',paste(vars,collapse='+'),'+(1|zrand)')),
mydata, gaussian)
dredge(mylmer2)
То, что я делаю в своем анализе, больше похоже на это, когда lmer и dredge запускаются внутри функции
myfn <- function(fnd,fnvar){
myformula <- as.formula(paste('yind~',paste(fnvar,collapse='+'),'+(1|zrand)'))
print(myformula)
mylmer1 <- lmer(myformula, fnd, gaussian)
print(mylmer1@call)
print(dredge(mylmer1))
mylmer2 <- lmer(as.formula(paste('yind~',paste(fnvar,collapse='+'),'+(1|zrand)')),
fnd, gaussian)
print(mylmer2@call)
print(dredge(mylmer2))
}
myfn(fnd=mydata, fnvar=vars)
Только dredgin lmer1 выдает эту ошибку:
Error in print(dredge(mylmer1)) :
error in evaluating the argument 'x' in selecting a method for function 'print': Error in terms(as.formula(formula(x))) :
error in evaluating the argument 'x' in selecting a method for function 'terms': Error: object of type 'symbol' is not subsettable
Дноуглубление только lmer2, выдает следующую ошибку
Error in print(dredge(mylmer2)) :
error in evaluating the argument 'x' in selecting a method for function 'print': Error in terms(as.formula(formula(x))) :
error in evaluating the argument 'x' in selecting a method for function 'terms': Error in paste(fnvar, collapse = "+") : object 'fnvar' not found.
Есть ли способ обойти это? Является ли это необходимым ограничением функции земснаряда?
1 ответ
Я нашел решение здесь. По-видимому, это называется "заменитель депривации".
Делать
mylmer1@call$formula <- tmp.formula
перед выемкой mer
объект
Пропустил это, поскольку я думал, что это было как-то связано с MuMIn.