नोट: यह प्रश्न एक रिपॉजिट है, क्योंकि मेरे पिछले प्रश्न को कानूनी कारणों से हटाना पड़ा था।
आर में पैकेज lme
से फ़ंक्शन के साथ एसएएस से PROC MIXED की तुलना करते समय nlme
, मैंने कुछ अंतर भ्रामक मतभेदों पर ठोकर खाई। विशेष रूप से, विभिन्न परीक्षणों में स्वतंत्रता की डिग्री के बीच भिन्न PROC MIXED
और lme
, और मैं क्यों सोचा।
निम्नलिखित डेटासेट से प्रारंभ करें (नीचे दिया गया R कोड):
- इंडस्ट्रीज़: जहां माप लिया जाता है व्यक्ति को इंगित करने वाला कारक
- fac: वह अंग जहाँ माप लिया जाता है
- trt: कारक उपचार का संकेत
- y: कुछ निरंतर प्रतिक्रिया चर
निम्नलिखित सरल मॉडल बनाने का विचार है:
y ~ trt + (ind)
: ind
एक यादृच्छिक कारक के रूप में
y ~ trt + (fac(ind))
: fac
में नेस्ट ind
एक यादृच्छिक कारक के रूप में
ध्यान दें कि अंतिम मॉडल में विलक्षणताएं होनी चाहिए, क्योंकि y
प्रत्येक संयोजन के लिए केवल 1 मूल्य है 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)
दोनों मॉडल गुणांक और उनके एसई के लिए समान अनुमान देते हैं, लेकिन जब प्रभाव के लिए एफ परीक्षण करते हैं 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)
इस मामले में, कुछ बहुत ही अजीब अंतर हैं:
- आर शिकायत के बिना फिट बैठता है, जबकि एसएएस नोट करता है कि अंतिम हेस्सियन सकारात्मक निश्चित नहीं है (जो मुझे थोड़ा आश्चर्यचकित नहीं करता है, ऊपर देखें)
- गुणांक पर SE अलग है (एसएएस में छोटा है)
- फिर, एफ परीक्षण ने DF की एक अलग राशि का उपयोग किया (वास्तव में, एसएएस में वह राशि = 0)
एसएएस आउटपुट:
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 .
आर आउटपुट:
> 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
बात यह है कि आर में उपयोग करते समय मॉडल भी फिट नहीं होता है:
> 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 : नेस्टेड कारकों वाले इन मॉडलों में क्या अंतर है? क्या वे सही तरीके से निर्दिष्ट हैं और यदि हां, तो परिणाम कैसे भिन्न हैं?
आर में संचित डेटा:
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