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 lme
từ nlme
gó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 MIXED
và lme
, 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)
: ind
như một yếu tố ngẫu nhiên
y ~ trt + (fac(ind))
: fac
lồng vào ind
như 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ị y
cho mỗi kết hợp ind
và fac
.
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 nlme
phả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 trt
chú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 lme4
trong 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