在glmer中使用as.formula()并使用MuMIn进行疏浚

时间:2013-11-16 22:22:50

标签: r lme4

我正在尝试使用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有关,尽管lmer运行良好

myformula <- as.formula(paste('yind~',paste(vars,collapse='+'),'+(1|zrand)'))

mylmer1 <- lmer(myformula, mydata, gaussian)

dredge(mylmer1)

术语错误(as.formula(formula(x))):   在为函数'terms'选择方法时评估参数'x'时出错:错误:'symbol'类型的对象不是子集化的

但这很好,因为我不完全理解,但与疏浚功能的范围有关。 (我可能完全不在这里)

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 个答案:

答案 0 :(得分:2)

我找到了解决方案here。显然它被称为“解密 - 替代技巧”。

待办事项

mylmer1@call$formula <- tmp.formula
在挖掘mer对象

之前

错过了,因为我认为这与MuMIn有关。