Используя 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.

Другие вопросы по тегам