Sự khác biệt giữa PROC Hỗn hợp và lme / lmer trong R - bậc tự do


12

Lưu ý: câu hỏi này là một bài đăng lại, vì câu hỏi trước đây của tôi đã bị xóa vì lý do pháp lý.


Trong khi so sánh PROC MIXED từ SAS với chức năng lmetừ nlmegói trong R, tôi tình cờ thấy một số khác biệt khá khó hiểu. Cụ thể hơn, mức độ tự do trong các thử nghiệm khác nhau khác nhau giữa PROC MIXEDlme, và tôi tự hỏi tại sao.

Bắt đầu từ tập dữ liệu sau (mã R được đưa ra dưới đây):

  • ind: hệ số chỉ ra cá nhân nơi thực hiện phép đo
  • fac: cơ quan nơi đo lường được thực hiện
  • trt: yếu tố chỉ ra điều trị
  • y: một số biến trả lời liên tục

Ý tưởng là xây dựng các mô hình đơn giản sau:

y ~ trt + (ind): indnhư một yếu tố ngẫu nhiên y ~ trt + (fac(ind)): faclồng vào indnhư một yếu tố ngẫu nhiên

Lưu ý rằng mô hình cuối cùng sẽ gây ra điểm kỳ dị, vì chỉ có 1 giá trị ycho mỗi kết hợp indfac.

Mô hình đầu tiên

Trong SAS, tôi xây dựng mô hình sau:

PROC MIXED data=Data;
    CLASS ind fac trt;
    MODEL y = trt /s;
    RANDOM ind /s;
run;

Theo hướng dẫn, mô hình tương tự trong R sử dụng nlmephải là:

> require(nlme)
> options(contrasts=c(factor="contr.SAS",ordered="contr.poly"))
> m2<-lme(y~trt,random=~1|ind,data=Data)

Cả hai mô hình đều đưa ra các ước tính giống nhau cho các hệ số và SE của chúng, nhưng khi thực hiện thử nghiệm F về hiệu quả của trtchúng, chúng sử dụng một mức độ tự do khác nhau:

SAS : 
Type 3 Tests of Fixed Effects 
Effect Num DF Den DF     F  Value Pr > F 
trt         1      8  0.89        0.3724 

R : 
> anova(m2)
            numDF denDF  F-value p-value
(Intercept)     1     8 70.96836  <.0001
trt             1     6  0.89272  0.3812

Câu hỏi 1: Sự khác biệt giữa cả hai bài kiểm tra là gì? Cả hai đều được trang bị bằng cách sử dụng REML và sử dụng cùng độ tương phản.

LƯU Ý: Tôi đã thử các giá trị khác nhau cho tùy chọn DDFM = (bao gồm BETWITHIN, về mặt lý thuyết sẽ cho kết quả tương tự như lme)

Mô hình thứ hai

Trong SAS:

PROC MIXED data=Data;
    CLASS ind fac trt;
    MODEL y = trt /s;
    RANDOM fac(ind) /s;
run;

Mô hình tương đương trong R phải là:

> m4<-lme(y~trt,random=~1|ind/fac,data=Data)

Trong trường hợp này, có một số khác biệt rất kỳ lạ:

  • R phù hợp mà không phàn nàn, trong khi SAS lưu ý rằng hessian cuối cùng không tích cực xác định (điều này không làm tôi ngạc nhiên một chút, xem ở trên)
  • SE trên các hệ số khác nhau (nhỏ hơn trong SAS)
  • Một lần nữa, thử nghiệm F đã sử dụng một lượng DF khác nhau (trên thực tế, trong SAS số tiền đó = 0)

Đầu ra của SAS:

Effect     trt Estimate Std Error  DF t Value Pr > |t| 
Intercept        0.8863    0.1192  14    7.43 <.0001 
trt       Cont  -0.1788    0.1686   0   -1.06 . 

Đầu ra R:

> summary(m4)
...
Fixed effects: y ~ trt 
               Value Std.Error DF   t-value p-value
(Intercept)  0.88625 0.1337743  8  6.624963  0.0002
trtCont     -0.17875 0.1891855  6 -0.944840  0.3812
...

(Lưu ý rằng trong trường hợp này, thử nghiệm F và T là tương đương và sử dụng cùng một DF.)

Thật thú vị, khi sử dụng lme4trong R, mô hình thậm chí không phù hợp:

> require(lme4)
> m4r <- lmer(y~trt+(1|ind/fac),data=Data)
Error in function (fr, FL, start, REML, verbose)  : 
  Number of levels of a grouping factor for the random effects
must be less than the number of observations

Câu 2 : Sự khác biệt giữa các mô hình này với các yếu tố lồng nhau là gì? Chúng được chỉ định chính xác và nếu vậy, làm thế nào mà kết quả lại khác nhau như vậy?


Dữ liệu mô phỏng trong R:

Data <- structure(list(y = c(1.05, 0.86, 1.02, 1.14, 0.68, 1.05, 0.22, 
1.07, 0.46, 0.65, 0.41, 0.82, 0.6, 0.49, 0.68, 1.55), ind = structure(c(1L, 
2L, 3L, 1L, 3L, 4L, 4L, 2L, 5L, 6L, 7L, 8L, 6L, 5L, 7L, 8L), .Label = c("1", 
"2", "3", "4", "5", "6", "7", "8"), class = "factor"), fac = structure(c(1L, 
1L, 1L, 2L, 2L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 1L, 2L, 2L), .Label = c("l", 
"r"), class = "factor"), trt = structure(c(2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("Cont", 
"Treat"), class = "factor")), .Names = c("y", "ind", "fac", "trt"
), row.names = c(NA, -16L), class = "data.frame")

Dữ liệu mô phỏng:

   y ind fac   trt
1.05   1   l Treat
0.86   2   l Treat
1.02   3   l Treat
1.14   1   r Treat
0.68   3   r Treat
1.05   4   l Treat
0.22   4   r Treat
1.07   2   r Treat
0.46   5   r  Cont
0.65   6   l  Cont
0.41   7   l  Cont
0.82   8   l  Cont
0.60   6   r  Cont
0.49   5   l  Cont
0.68   7   r  Cont
1.55   8   r  Cont

@Aaron: Vui lòng tìm câu trả lời của bạn trong bài viết này. Nếu bạn có thể sao chép và dán nó như một câu trả lời, tôi sẽ cung cấp cho bạn đại diện cho nó. Nó đã rất hữu ích, vì vậy tôi thực sự muốn giữ nó ở đây trên giá trị chéo. Sau khi bạn làm điều đó, tôi xóa câu trả lời của bạn khỏi câu hỏi.
Joris Meys

Tôi đang cố gắng làm cho nhóm hồi sinh Q ban đầu của bạn với bản sửa đổi đáng tiếc này bị xóa sổ hoàn toàn - do đó có một cơ hội tuyệt vời để khôi phục các câu trả lời ban đầu và hợp nhất chúng ở đây.

@mbq: Điều đó sẽ rất tuyệt, mặc dù tôi đã mô phỏng một số dữ liệu (mà tôi sử dụng ở đây) và chỉnh sửa câu trả lời của Aaron cho phù hợp. Đối với câu trả lời khác, điều đó sẽ phức tạp hơn một chút, nhưng tôi cũng có thể thử.
Joris Meys

Câu trả lời của Aaron là một câu hỏi cực kỳ tốt. Tôi hy vọng họ nhìn thấy nó. Thật không may, @Aaron của bạn sẽ không liên lạc với anh ấy trừ khi anh ấy tham gia vào chủ đề này.
Wayne

1
Vâng, đây là một câu trả lời tốt đẹp. Ở đây tôi đã đưa ra một liên kết đến bài đăng đã bị xóa: stats.stackexchange.com/questions/26556/ ( Tôi sẽ thêm liên kết đến bài viết hiện tại.
Stéphane Laurent

Câu trả lời:


11

Đối với câu hỏi đầu tiên, phương thức mặc định trong SAS để tìm df không thông minh lắm; nó tìm kiếm các thuật ngữ trong hiệu ứng ngẫu nhiên về mặt cú pháp bao gồm hiệu ứng cố định và sử dụng nó. Trong trường hợp này, vì trtkhông được tìm thấy ind, nên nó không hoạt động đúng. Tôi chưa bao giờ thử BETWITHINvà không biết chi tiết, nhưng tùy chọn Satterthwaite ( satterth) hoặc sử dụng ind*trtlàm hiệu ứng ngẫu nhiên cho kết quả chính xác.

PROC MIXED data=Data;
    CLASS ind fac trt;
    MODEL y = trt /s ddfm=satterth;
    RANDOM ind /s;
run;

PROC MIXED data=Data;
    CLASS ind fac trt;
    MODEL y = trt /s;
    RANDOM ind*trt /s;
run;

Đối với câu hỏi thứ hai, mã SAS của bạn không hoàn toàn khớp với mã R của bạn; nó chỉ có một thuật ngữ cho fac*ind, trong khi mã R có một thuật ngữ cho cả hai indfac*ind. (Xem đầu ra Thành phần phương sai để thấy điều này.) Việc thêm này mang lại SE giống nhau cho trttất cả các mô hình trong cả Q1 và Q2 (0.1892).

Như bạn lưu ý, đây là một mô hình kỳ lạ để phù hợp vì fac*indthuật ngữ có một quan sát cho mỗi cấp độ, do đó tương đương với thuật ngữ lỗi. Điều này được phản ánh trong đầu ra SAS, trong đó fac*indthuật ngữ có phương sai bằng không. Đây cũng là những gì thông báo lỗi từ lme4 đang nói với bạn; Lý do cho lỗi là rất có thể bạn đã xác định sai một cái gì đó vì bạn bao gồm thuật ngữ lỗi trong mô hình theo hai cách khác nhau. Thật thú vị, có một sự khác biệt nhỏ trong mô hình nlme; bằng cách nào đó, việc tìm một thuật ngữ phương sai cho fac*indthuật ngữ này ngoài thuật ngữ lỗi, nhưng bạn sẽ nhận thấy rằng tổng của hai phương sai này bằng với thuật ngữ lỗi từ cả SAS và nlme mà không có fac*indthuật ngữ. Tuy nhiên, SE cho trtvẫn giữ nguyên (0.1892) như trtđược lồng trongind, vì vậy các điều khoản phương sai thấp hơn không ảnh hưởng đến nó.

Cuối cùng, một lưu ý chung về mức độ tự do trong các mô hình này: Chúng được tính toán sau khi mô hình phù hợp và do đó, sự khác biệt về mức độ tự do giữa các chương trình hoặc tùy chọn khác nhau của chương trình không nhất thiết có nghĩa là mô hình phù hợp khác nhau. Để làm được điều đó, người ta phải xem các ước tính của các tham số, cả tham số hiệu ứng cố định và tham số hiệp phương sai.

Ngoài ra, việc sử dụng các xấp xỉ t và F với một số bậc tự do nhất định là khá gây tranh cãi. Không chỉ có một số cách để ước tính df, một số người tin rằng thực hành làm như vậy không phải là một ý tưởng tốt. Một vài lời khuyên:

  1. Nếu mọi thứ đều cân bằng, hãy so sánh kết quả với phương pháp bình phương tối thiểu truyền thống, vì chúng nên đồng ý. Nếu nó gần cân bằng, hãy tự tính toán chúng (giả sử cân bằng) để bạn có thể chắc chắn rằng những cái bạn đang sử dụng đang ở đúng sân bóng.

  2. Nếu bạn có cỡ mẫu lớn, mức độ tự do không quan trọng lắm vì các bản phân phối gần với bình thường và bình phương.

  3. Kiểm tra các phương pháp của Doug Bates để suy luận. Phương pháp cũ hơn của ông dựa trên mô phỏng MCMC; phương pháp mới hơn của ông dựa trên hồ sơ khả năng.


Quả thực là một câu trả lời tốt, mặc dù tôi nghĩ rằng việc lược tả khả năng sẽ giải quyết một câu hỏi khác (các TCTD phù hợp trên các tham số phương sai trong đó cấu hình không phải là bậc hai) so với thực hiện mô phỏng MCMC (xử lý cả hiệu chỉnh kích thước hữu hạn và không bậc hai). Tôi nghĩ bootMer (bootstrap tham số) gần với tương đương với mcmcsamp hơn confint (hồ sơ (...)) ...
Ben Bolker

@BenBolker: Chắc chắn là có thể. Doug Bates đã có một cuộc nói chuyện ở đây vào tháng trước và anh ấy đã nói về những ý tưởng của mình về hồ sơ khả năng. Đó là về tất cả những gì tôi biết về nó cho đến nay.
Aaron rời Stack Overflow
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.