1

我想将公式放入随机模型中,但我认为以下错误是由于错误的公式对象(?),但无法修复。

set.seed(1234)
mydata <- data.frame (A = rep(1:3, each = 20), B = rep(1:2, each = 30),
                      C = rnorm(60, 10, 5))
mydata$A <- as.factor(mydata$A)
mydata$B <- as.factor(mydata$B)
myfunction <- function (mydata, yvars, genovar, replication) { 
              require("lme4")
              formula = paste ("yvars" ~ 1|"genovar" + 1|"replication")
              model1 <- lmer(formula, data = dataframe, REML = TRUE)
              return(ranef(model2))
}

myfunction(mydata=dataf, yvars = "C", genovar = "A", replication = "B")

错误:length(formula <- as.formula(formula)) == 3 is not TRUE

4

1 回答 1

5

这里有一些不稳定的东西,但我认为这接近你想要的。

set.seed(1234)
mydata <- data.frame (A = factor(rep(1:3, each = 20)),
                      B = factor(rep(1:2, each = 30)),
                      C = rnorm(60, 10, 5))
require("lme4")
myfunction <- function (mydata, yvars, genovar, replication) { 
  formula <- paste (yvars,"~ (1|",genovar,") + (1|",replication,")")
  model1 <- lmer(as.formula(formula), data = mydata, REML = TRUE)
  return(ranef(model1))
}
myfunction(mydata=mydata, yvars = "C", genovar = "A", replication = "B")

但是请注意,这lmer与经典随机效应 ANOVA 的工作方式不同——它在重复次数如此之少的情况下可能会表现得很糟糕。(在示例中,我尝试将方差设置A为零,这至少不是不合理的。)GLMM FAQ对此问题进行了一些讨论。(在这种情况下,随机效应 ANOVA 的功效会非常低,但可能不会那么糟糕。)如果你真的想在这么小的样本上做随机效应模型,你可能需要考虑重建经典的矩量法(我记得有/曾经有一个raov公式S-PLUS可以进行随机效应方差分析,但我不知道它是否曾经在 R 中实现过)。

最后,对于这些方面的未来问题,您可能会在邮件列表中做得更好r-sig-mixed-models@r-project.org——堆栈溢出很好,但那里有更多的 R/混合模型专业知识。

于 2011-11-15T02:44:00.383 回答