2011-10-25 18 views
5

Điều gì là sai với các mô hình sau:lme4 lỗi mô hình hỗn hợp

# simulated data yr = 2; vg = 4, fm = 5, gen = 5 
    mbb <- data.frame(trait1 = rnorm(200, 15, 4),yr = c(rep (1:2, each = 100)), 
    vg = c(rep(rep(1:4, each =25), 2)), fm = rep(rep(1:5, each = 5), 8), 
    gen = sample(c(1:5), 200, replace = T)) 
    require(lme4) 
    lmer(trait1 ~ (yr + vg + gen)^3 + (yr + vg + gen|fm:vg), data= mbb)# full model 

Tôi nhận được lỗi sau:

Error in validObject(.Object) : 
    invalid class "mer" object: Slot Zt must by dims['q'] by dims['n']*dims['s'] 
In addition: Warning messages: 
1: In fm:vg : numerical expression has 200 elements: only the first used 
2: In fm:vg : numerical expression has 200 elements: only the first used 
+0

Dường như nó không thích bit tương tác của hiệu ứng ngẫu nhiên của bạn. Thay đổi 'gen | fm: vg' thành' gen | fm' và nó chạy. Chưa chắc chắn về ý nghĩa của điều này. –

Trả lời

7

Vấn đề là chính xác rằng fmvg được lưu trữ như số, không phải là yếu tố, và vì vậy lmer cố gắng để giải thích fm:vg như một nhà điều hành chuỗi (xem ?seq) chứ không phải là toán tử tương tác (xem ?interaction). Bạn có thể:

  • convert fmvg các yếu tố trong khung dữ liệu (mbb <- transform(mbb,vg=factor(vg),fm=factor(fm))) [nó không phải là rõ ràng từ thiết lập của bạn cho dù bạn muốn vgfm là các yếu tố hoặc dự đoán liên tục ... phân biệt đó sẽ là rất quan trọng, tất nhiên ... nếu bạn muốn họ như dự đoán liên tục, sau đó nó là một chút lạ để đối xử với họ như các yếu tố cho mục đích của nhóm ...]
  • viết sự tương tác một cách rõ ràng như interaction(fm,vg) on the fly
  • chuyển đổi thành các yếu tố trên bay ((yr+vg+gen|factor(fm):factor(vg)))
  • sử dụng Jim M. Giải pháp

    tôi nghĩ những sẽ tất cả công việc, mặc dù tôi phải thừa nhận rằng tôi đã không kiểm tra chúng.

3

Một giải pháp khả thi để mô hình hóa sự tương tác như là một tác ngẫu nhiên là thêm thuật ngữ tương tác như một cột bổ sung trong khung dữ liệu mbb.

mbb$fmvg <- with(mbb, interaction(fm,vg, sep=":")) 

Mô hình này sau đó trở thành

lmer(trait1 ~ (yr + vg + gen)^3 + (yr + vg + gen|fmvg), data= mbb)