หมายเหตุ: คำถามนี้เป็นคำถามใหม่เนื่องจากต้องลบคำถามก่อนหน้านี้ด้วยเหตุผลทางกฎหมาย
ในขณะที่เปรียบเทียบ PROC MIXED จาก SAS กับฟังก์ชันlme
จากnlme
แพ็คเกจใน R ฉันพบความแตกต่างที่ค่อนข้างสับสน โดยเฉพาะอย่างยิ่งองศาอิสระในการทดสอบที่แตกต่างกันระหว่างPROC MIXED
และlme
และฉันสงสัยว่าทำไม
เริ่มจากชุดข้อมูลต่อไปนี้ (รหัส R ระบุด้านล่าง):
- ind: ปัจจัยบ่งชี้บุคคลที่จะทำการวัด
- fac: อวัยวะที่ใช้ทำการวัด
- trt: ปัจจัยบ่งชี้การรักษา
- y: ตัวแปรตอบสนองต่อเนื่องบางอย่าง
ความคิดคือการสร้างแบบจำลองง่ายๆดังต่อไปนี้:
y ~ trt + (ind)
: ind
เป็นปัจจัยสุ่ม
y ~ trt + (fac(ind))
: fac
ซ้อนกันind
เป็นปัจจัยสุ่ม
โปรดทราบว่ารุ่นสุดท้ายที่ควรทำให้เกิดเอกเป็นมีเพียง 1 ค่าของy
สำหรับการรวมกันของทุกและind
fac
แบบจำลองแรก
ใน SAS ฉันสร้างโมเดลต่อไปนี้:
PROC MIXED data=Data;
CLASS ind fac trt;
MODEL y = trt /s;
RANDOM ind /s;
run;
ตามบทเรียนแบบเดียวกันในการใช้ R nlme
ควรเป็น:
> require(nlme)
> options(contrasts=c(factor="contr.SAS",ordered="contr.poly"))
> m2<-lme(y~trt,random=~1|ind,data=Data)
ทั้งสองรุ่นมีการประมาณค่าสัมประสิทธิ์และ SE เท่ากัน แต่เมื่อทำการทดสอบแบบ F สำหรับเอฟเฟ็กtrt
ต์พวกเขาใช้จำนวนองศาอิสระต่างกัน:
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
คำถามที่ 1:ความแตกต่างระหว่างการทดสอบทั้งสองคืออะไร? ทั้งสองถูกติดตั้งโดยใช้ REML และใช้ความแตกต่างเดียวกัน
หมายเหตุ: ฉันลองใช้ค่าที่แตกต่างกันสำหรับตัวเลือก DDFM = (รวมถึง BETWITHIN ซึ่งในทางทฤษฎีควรให้ผลลัพธ์เดียวกันกับ lme)
รุ่นที่สอง
ใน SAS:
PROC MIXED data=Data;
CLASS ind fac trt;
MODEL y = trt /s;
RANDOM fac(ind) /s;
run;
โมเดลที่เทียบเท่าใน R ควรเป็น:
> m4<-lme(y~trt,random=~1|ind/fac,data=Data)
ในกรณีนี้มีความแตกต่างที่แปลกมาก:
- R เหมาะสมโดยไม่ต้องบ่นในขณะที่ SAS ตั้งข้อสังเกตว่ารัฐสุดท้ายไม่ได้เป็นบวกแน่นอน (ซึ่งไม่แปลกใจฉันเล็กน้อยดูด้านบน)
- SE ในสัมประสิทธิ์ต่างกัน (เล็กกว่าใน SAS)
- อีกครั้งการทดสอบ F ใช้จำนวน DF ที่แตกต่างกัน (อันที่จริงแล้วใน SAS นั้นจำนวน = 0)
เอาท์พุท 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 .
เอาท์พุท 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
...
(โปรดทราบว่าในกรณีนี้การทดสอบ F และ T จะเทียบเท่าและใช้ DF เดียวกัน)
ที่น่าสนใจเมื่อใช้lme4
ใน R โมเดลไม่เหมาะ:
> 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
คำถามที่ 2 : อะไรคือความแตกต่างระหว่างรุ่นเหล่านี้กับปัจจัยซ้อนกัน? พวกเขาระบุไว้ถูกต้องหรือไม่และถ้าเป็นเช่นนั้นผลลัพธ์ที่ได้จะแตกต่างกันอย่างไร
ข้อมูลจำลองใน 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")
ข้อมูลจำลอง:
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