我想把公式放在随机模型中,但我认为跟随错误是由于错误的公式对象(?),但无法修复它.
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")
Run Code Online (Sandbox Code Playgroud)
错误:长度(公式< - as.formula(公式))== 3不为TRUE
这里有几个不稳定的东西,但这是我认为接近你想要的东西.
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")
Run Code Online (Sandbox Code Playgroud)
但要注意,这种方法lmer不像经典的随机效应ANOVA那样 - 它可能会在如此少量的重复中表现得非常糟糕.(在我尝试的示例中,它将方差设置A为零,这至少不是不合理的.)GLMM常见问题解答对此问题进行了一些讨论.(在这种情况下,随机效应ANOVA会有非常低的功率,但可能不会那么糟糕.)如果你真的想在这样的小样本上做随机效应模型,你可能需要考虑重建经典的矩量法方法(我记得有一个raov公式S-PLUS就是随机效应ANOVA,但我不知道它是否曾在R中实现过).
最后,对于未来的问题,您可以在r-sig-mixed-models@r-project.org邮件列表上做得更好- Stack Overflow很不错,但那里有更多的R /混合模型专业知识.