2015-03-25 21 views
5

Tôi đang cố gắng phù hợp với mô hình hiệu ứng hỗn hợp và sau đó sử dụng mô hình đó để tạo ước tính trên tập dữ liệu mới có thể có các cấp độ khác nhau. Tôi hy vọng rằng các ước tính trên tập dữ liệu mới sẽ sử dụng giá trị trung bình của các thông số ước tính, nhưng điều đó dường như không đúng. Dưới đây là một ví dụ làm việc tối thiểu:Dự đoán với lme4 ở cấp độ mới

library(lme4) 
d = data.frame(x = rep(1:10, times = 3), 
       y = NA, 
       grp = rep(1:3, each = 10)) 
d$y[d$grp == 1] = 1:10 + rnorm(10) 
d$y[d$grp == 2] = 1:10 * 1.5 + rnorm(10) 
d$y[d$grp == 3] = 1:10 * 0.5 + rnorm(10) 
fit = lmer(y ~ (1+x)|grp, data = d) 
newdata = data.frame(x = 1:10, grp = 4) 
predict(fit, newdata = newdata, allow.new.levels = TRUE) 

Trong ví dụ này, tôi cần phải xác định ba nhóm với phương trình hồi quy khác nhau (sườn 1, 1.5 và 0.5). Tuy nhiên, khi tôi cố gắng dự đoán một tập dữ liệu mới với cấp độ không nhìn thấy, tôi nhận được ước tính không đổi. Tôi đã dự kiến ​​giá trị dự kiến ​​của độ dốc và chặn được sử dụng để tạo ra các dự đoán cho dữ liệu mới này. Tôi đang mong đợi điều sai? Hoặc, tôi đang làm gì sai với mã của mình?

+2

Tôi tin rằng 'predict.merMod' chỉ sử dụng các hệ số từ các phần hiệu ứng cố định của mô hình cho các cấp mới. 'y ~ x + (x | grp)' là một đặc tả mô hình hợp lý hơn. – Roland

+0

Ah, điều đó có ý nghĩa! Nếu bạn thêm nó như là một câu trả lời tôi sẽ chấp nhận nó. –

Trả lời

8

Tôi thường không bao gồm độ dốc ngẫu nhiên mà không bao gồm độ dốc cố định. Nó có vẻ như predict.merMod đồng ý với tôi, bởi vì nó có vẻ chỉ đơn giản là sử dụng các hiệu ứng cố định để dự đoán cho các cấp độ mới. Tài liệu nói rằng "dự đoán sẽ sử dụng các giá trị vô điều kiện (mức dân số) cho dữ liệu với các mức chưa được kiểm tra trước đây", nhưng các giá trị này dường như không được ước tính với đặc tả mô hình của bạn.

Vì vậy, tôi đề nghị mô hình này:

fit = lmer(y ~ x + (x|grp), data = d) 
newdata = data.frame(x = 1:10, grp = 4) 
predict(fit, newdata = newdata, allow.new.levels = TRUE) 
#  1   2   3   4   5   6   7   8   9  10 
#1.210219 2.200685 3.191150 4.181616 5.172082 6.162547 7.153013 8.143479 9.133945 10.124410 

Đây là giống như chỉ sử dụng các hiệu ứng cố định một phần của mô hình:

t(cbind(1, newdata$x) %*% fixef(fit)) 
#   [,1]  [,2] [,3]  [,4]  [,5]  [,6]  [,7]  [,8]  [,9] [,10] 
#[1,] 1.210219 2.200685 3.19115 4.181616 5.172082 6.162547 7.153013 8.143479 9.133945 10.12441 
5

Có lẽ nó không đủ rõ ràng, nhưng tôi nghĩ rằng tài liệu cho các trạng thái ?predict.merMod (hợp lý) rõ ràng những gì sẽ xảy ra khi allow.new.levels=TRUE. Tôi đoán mơ hồ có thể là trong những gì "vô điều kiện (dân cấp) đánh giá cao" có nghĩa là ...

allow.new.levels: logic nếu cấp độ mới (hoặc giá trị NA) trong ‘newdata’ được phép. Nếu FALSE (mặc định), các giá trị mới như vậy trong ‘newdata’ sẽ kích hoạt lỗi; nếu TRUE, thì dự đoán sẽ sử dụng giá trị vô điều kiện (cấp dân số) cho dữ liệu với các mức chưa kiểm tra trước đó (hoặc NA).

Các vấn đề liên quan