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は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の検出力は非常に低くなりますが、それほど悪くはないかもしれません。)このような小さなサンプルでランダム効果モデルを実際に実行したい場合は、従来のモーメント法アプローチの再構築を検討することをお勧めします。 (私が覚えているように、ランダム効果ANOVAを実行するraov式がありましS-PLUSたが、それがRで実装されたかどうかはわかりません)。

最後に、これらの方針に沿った将来の質問については、r-sig-mixed-models@r-project.orgメーリングリストでより適切に行うことができます-Stack Overflowは素晴らしいですが、そこにはR/混合モデルの専門知識があります。

于 2011-11-15T02:44:00.383 に答える