2011-11-15 3 views
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") 

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

답변

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의 분산을 0으로 설정했는데 이는 적어도 부당함이 아닙니다.) GLMM FAQ에는이 문제에 대한 몇 가지 설명이 있습니다. (무작위 효과 ANOVA는이 경우 매우 낮은 전력을 가지지 만 그다지 나쁘지는 않을 것입니다.) 작은 샘플에 대해 무작위 효과 모델을 실제로 만들고 싶다면 고전적인 방법 모멘트 접근법을 재구성하는 것이 좋습니다 (내가 랜덤 효과 ANOVA를 수행 한 raov 수식이 S-PLUS에 있었지만 R로 구현되었는지는 알 수 없습니다).

마지막으로,이 라인의 향후 질문에 대해서는 [email protected] 메일 링리스트에서 더 잘할 수 있습니다. 스택 오버플로는 좋지만 거기에 더 많은 R/혼합 모델 전문 기술이 있습니다.

+0

질문을 해결하고 복제 크기에 관한 Ben에게 감사드립니다. 제공된 예제는 내가 얻는 오류를 보여주기위한 것이지만 실제 데이터에는 많은 복제가 있습니다 ... 제안에 대해 다시 한 번 감사드립니다 – jon