Tại sao tôi nhận được kết quả cực kỳ khác nhau cho poly (raw = T) so với poly ()?


10

Tôi muốn mô hình hóa hai biến thời gian khác nhau, một số biến số được cộng tác rất nhiều trong dữ liệu của tôi (age + cohort = period). Làm điều này tôi gặp một số rắc rối với lmervà tương tác poly(), nhưng có lẽ không giới hạn lmer, tôi đã nhận được kết quả tương tự với nlmeIIRC.

Rõ ràng, sự hiểu biết của tôi về những gì hàm poly () làm là thiếu. Tôi hiểu những gì poly(x,d,raw=T)nó làm và tôi nghĩ mà không có raw=Tnó làm cho đa thức trực giao (tôi không thể nói rằng tôi thực sự hiểu điều đó có nghĩa là gì), điều này làm cho phù hợp dễ dàng hơn, nhưng không cho phép bạn giải thích trực tiếp các hệ số.
Tôi đọc điều đó bởi vì tôi đang sử dụng chức năng dự đoán, các dự đoán sẽ giống nhau.

Nhưng họ không, ngay cả khi các mô hình hội tụ bình thường. Tôi đang sử dụng các biến trung tâm và trước tiên tôi nghĩ rằng có thể đa thức trực giao dẫn đến tương quan hiệu ứng cố định cao hơn với thuật ngữ tương tác cộng tuyến, nhưng có vẻ như có thể so sánh được. Tôi đã dán hai bản tóm tắt mô hình ở đây .

Những mảnh đất này hy vọng minh họa mức độ khác biệt. Tôi đã sử dụng chức năng dự đoán chỉ có sẵn trong dev. phiên bản lme4 (nghe về nó ở đây ), nhưng các hiệu ứng cố định là giống nhau trong phiên bản CRAN (và chúng cũng có vẻ tự tắt, ví dụ ~ 5 cho tương tác khi DV của tôi có phạm vi 0-4).

Cuộc gọi nhẹ nhàng hơn

cohort2_age =lmer(churchattendance ~ 
poly(cohort_c,2,raw=T) * age_c + 
ctd_c + dropoutalive + obs_c + (1+ age_c |PERSNR), data=long.kg)

Dự đoán chỉ là hiệu ứng cố định, trên dữ liệu giả (tất cả các yếu tố dự đoán khác = 0) trong đó tôi đã đánh dấu phạm vi có trong dữ liệu gốc là ngoại suy = F.

predict(cohort2_age,REform=NA,newdata=cohort.moderates.age)

Tôi có thể cung cấp nhiều ngữ cảnh hơn nếu cần (Tôi không quản lý để tạo ra một ví dụ có thể tái tạo một cách dễ dàng, nhưng tất nhiên có thể cố gắng hơn), nhưng tôi nghĩ đây là một lời biện hộ cơ bản hơn: poly()vui lòng giải thích chức năng cho tôi.

Đa thức thô

Đa thức thô

Đa thức trực giao (cắt xén, không cắt ở Imgur )

Đa thức trực giao

Câu trả lời:


10

Tôi nghĩ rằng đây là một lỗi trong chức năng dự đoán (và do đó là lỗi của tôi), trong thực tế nlme không chia sẻ. ( Chỉnh sửa : nên được sửa trong phiên bản R-forge gần đây nhất của lme4.) Xem bên dưới để biết ví dụ ...

Tôi nghĩ rằng sự hiểu biết của bạn về đa thức trực giao có lẽ là tốt. Điều khó khăn bạn cần biết về chúng nếu bạn đang cố gắng viết một phương thức dự đoán cho một lớp các mô hình là cơ sở cho các đa thức trực giao được xác định dựa trên một tập hợp dữ liệu nhất định, vì vậy nếu bạn ngây thơ (như tôi đã làm! ) sử dụng model.matrixđể cố gắng tạo ma trận thiết kế cho một tập hợp dữ liệu mới, bạn có được một cơ sở mới - không còn ý nghĩa với các tham số cũ. Cho đến khi tôi sửa lỗi này, tôi có thể cần đặt một cái bẫy để nói với mọi người rằng predictnó không hoạt động với các cơ sở đa thức trực giao (hoặc các cơ sở spline, có cùng thuộc tính).

d <- expand.grid(x=seq(0,1,length=50),f=LETTERS[1:10])
set.seed(1001)
u.int <- rnorm(10,sd=0.5)
u.slope <- rnorm(10,sd=0.2)
u.quad <- rnorm(10,sd=0.1)
d <- transform(d,
               ypred = (1+u.int[f])+
               (2+u.slope[f])*x-
               (1+u.quad[f])*x^2)
d$y <- rnorm(nrow(d),mean=d$ypred,sd=0.2)
ggplot(d,aes(x=x,y=y,colour=f))+geom_line()+
    geom_line(aes(y=ypred),linetype=2)

library(lme4)
fm1 <- lmer(y~poly(x,2,raw=TRUE)+(1|f)+(0+x|f)+(0+I(x^2)|f),
            data=d)


fm2 <- lmer(y~poly(x,2)+(1|f)+(0+x|f)+(0+I(x^2)|f),
            data=d)
newdat <- data.frame(x=unique(d$x))
plot(predict(fm1,newdata=newdat,REform=NA))
lines(predict(fm2,newdata=newdat,REform=NA),col=2)
detach("package:lme4")

library(nlme)
fm3 <- lme(y~poly(x,2,raw=TRUE),
           random=list(~1|f,~0+x|f,~0+I(x^2)|f),
            data=d)
VarCorr(fm3)

fm4 <- lme(y~poly(x,2),
           random=list(~1|f,~0+x|f,~0+I(x^2)|f),
            data=d)

newdat <- data.frame(x=unique(d$x))
lines(predict(fm3,newdata=newdat,level=0),col=4)
lines(predict(fm4,newdata=newdat,level=0),col=5)

Cảm ơn bạn, đó là yên tâm. Để nhắc lại: Tôi đọc rằng bạn không thể sử dụng các hiệu ứng cố định đa thức trực giao theo mệnh giá, nhưng đôi khi chúng có vẻ rất lớn. Ví dụ: nếu tôi chạy tương tác của hai đa thức bậc ba, tôi nhận được các hiệu ứng cố định cho đa thức và tương tác của chúng trong phạm vi từ -22 đến -127400. Điều đó dường như là cách đối với tôi, đặc biệt là xem xét rằng tất cả các hiệu ứng cố định là tiêu cực. Liệu một chức năng dự đoán được sửa đổi sẽ có ý nghĩa về các hiệu ứng cố định này hay các mô hình đã hội tụ sai hoặc sau đó có phải là một cái gì đó sai trong lmer không?
Ruben

Một lần nữa, tôi nghi ngờ (nhưng rõ ràng là không biết chắc chắn) rằng mọi thứ đều ổn. Chính thống. đa thức là tốt cho sự ổn định số và kiểm tra giả thuyết, nhưng (như bạn đã tìm ra) các giá trị tham số thực tế có thể khó diễn giải hơn. Phiên bản hiện tại của lme4-devel (Tôi vừa đăng một phiên bản nên vượt qua các bài kiểm tra, có thể mất ~ 24 giờ để xây dựng lại trên r-forge, trừ khi bạn có thể tự xây dựng từ SVN) sẽ cung cấp cho bạn dự đoán phù hợp giữa các đa thức thô / ortho. Một giải pháp thay thế là tập trung vào các dự đoán liên tục và quy mô à la Schielzeth 2010 Phương pháp trong Sinh thái học & Tiến hóa ...
Ben Bolker

Vâng, hai đa thức đồng ý hoàn toàn tốt bây giờ. Cảm ơn rất nhiều! Tôi đã thu nhỏ và tập trung vào các dự đoán của mình, nhưng một số mô hình không phù hợp với đa thức thô.
Ruben
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.