PROC मिश्रित और l / lmer के बीच अंतर R- स्वतंत्रता की डिग्री में


12

नोट: यह प्रश्न एक रिपॉजिट है, क्योंकि मेरे पिछले प्रश्न को कानूनी कारणों से हटाना पड़ा था।


आर में पैकेज 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

@ ऐरन: कृपया अपना उत्तर इस पोस्ट में शामिल करें। यदि आप उत्तर के रूप में इसे कॉपी और पेस्ट कर सकते हैं, तो मैं आपको इसके लिए प्रतिनिधि देता हूं। यह बहुत मददगार रहा है, इसलिए मैं वास्तव में इसे यहाँ पर रखना चाहता हूं। आपके द्वारा ऐसा करने के बाद, मैं आपके उत्तर को प्रश्न से हटा देता हूं।
जोरिस मेय्स

मैं टीम बनाने की कोशिश कर रहा हूं कि आपके मूल क्यू को इस दुर्भाग्यपूर्ण संशोधन को पुनर्जीवित करने के लिए अच्छा किया गया - इस प्रकार मूल उत्तरों को बहाल करने और उन्हें यहां मर्ज करने का एक शानदार मौका है।

@mbq: यह अच्छा होगा, हालाँकि मैंने कुछ डेटा (जो मैं यहाँ उपयोग करता हूँ) का अनुकरण किया और तदनुसार हारून के उत्तर को संपादित किया। अन्य उत्तर के लिए, यह थोड़ा अधिक जटिल होने जा रहा है, लेकिन मैं भी कोशिश कर सकता हूं।
जोरिस मेय्स

हारून का जवाब अविश्वसनीय रूप से अच्छा है। मुझे उम्मीद है कि वे इसे देखेंगे। दुर्भाग्य से, आपके @Aaron उससे संपर्क नहीं करेंगे, जब तक कि वह इस धागे में भाग नहीं लेता है।
वेन

1
हाँ यह एक अच्छा जवाब था। यहाँ मैंने डिलीट किए गए पोस्ट का लिंक दिया है : ysts.stackexchange.com/questions/26556/… मैं वर्तमान पोस्ट में लिंक जोड़ने जा रहा हूं।
स्टीफन लॉरेंट

जवाबों:


11

पहले प्रश्न के लिए, df खोजने के लिए एसएएस में डिफ़ॉल्ट विधि बहुत स्मार्ट नहीं है; यह यादृच्छिक प्रभाव में ऐसे शब्दों की तलाश करता है, जो निश्चित रूप से निश्चित प्रभाव को शामिल करते हैं, और इसका उपयोग करते हैं। इस मामले में, चूंकि trtयह नहीं मिला है ind, यह सही काम नहीं कर रहा है। मैंने कभी कोशिश नहीं की है BETWITHINऔर विवरण नहीं जानता, लेकिन या तो Satterthwaite विकल्प ( satterth) या ind*trtयादृच्छिक प्रभाव के रूप में उपयोग करने से सही परिणाम मिलते हैं।

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;

दूसरे प्रश्न के लिए, आपका एसएएस कोड आपके आर कोड से काफी मेल नहीं खाता है; इसके लिए केवल एक शब्द है fac*ind, जबकि R कोड में दोनों के लिए एक शब्द है indऔर fac*ind। (इसे देखने के लिए वैरिएन कंपोनेंट्स आउटपुट देखें।) इसे जोड़ने से trtQ1 और Q2 (0.9292) दोनों में सभी मॉडलों के लिए समान SE मिलता है।

जैसा कि आप ध्यान दें, यह फिट करने के लिए एक अजीब मॉडल है क्योंकि fac*indशब्द में प्रत्येक स्तर के लिए एक अवलोकन है, इसलिए त्रुटि शब्द के बराबर है। यह एसएएस आउटपुट में परिलक्षित होता है, जहां fac*indशब्द का शून्य संस्करण है। यह वही है जो lme4 से त्रुटि संदेश आपको बता रहा है; त्रुटि का कारण यह है कि आप सबसे अधिक संभावना कुछ गलत करते हैं क्योंकि आप दो अलग-अलग तरीकों से मॉडल में त्रुटि शब्द शामिल कर रहे हैं। दिलचस्प बात यह है कि nlme मॉडल में एक मामूली अंतर है; यह किसी तरह fac*indसे एरर टर्म के अलावा टर्म के लिए वेरिएशन fac*indटर्म ढूंढ रहा है, लेकिन आप ध्यान देंगे कि इन दोनों वेरिएंट्स का योग बिना टर्म के SAS और nlme दोनों से एरर टर्म के बराबर है । हालाँकि, एसई के लिए trt(0.1892) समान trtहै जैसा कि नेस्टेड हैind, इसलिए ये निम्न प्रसरण शर्तें इसे प्रभावित नहीं करती हैं।

अंत में, इन मॉडलों में स्वतंत्रता की डिग्री के बारे में एक सामान्य नोट: मॉडल के फिट होने के बाद उनकी गणना की जाती है, और इसलिए विभिन्न कार्यक्रमों या किसी कार्यक्रम के विकल्पों के बीच स्वतंत्रता की डिग्री में अंतर का मतलब जरूरी नहीं है कि मॉडल को अलग तरह से फिट किया जा रहा है। उसके लिए, किसी को मापदंडों के अनुमानों को देखना चाहिए, दोनों निश्चित प्रभाव पैरामीटर और कोवरियन पैरामीटर।

इसके अलावा, स्वतंत्रता की दी गई डिग्री के साथ टी और एफ सन्निकटन का उपयोग करना काफी विवादास्पद है। न केवल डीएफ को अनुमानित करने के कई तरीके हैं, कुछ का मानना ​​है कि ऐसा करने का अभ्यास वैसे भी एक अच्छा विचार नहीं है। सलाह के कुछ शब्द:

  1. यदि सब कुछ संतुलित है, तो पारंपरिक न्यूनतम वर्गों के साथ परिणामों की तुलना करें, क्योंकि उन्हें सहमत होना चाहिए। यदि यह संतुलित के करीब है, तो अपने आप को गणना (संतुलन मानकर) करें ताकि आप सुनिश्चित कर सकें कि आप जो उपयोग कर रहे हैं वह सही बॉलपार्क में हैं।

  2. यदि आपके पास एक बड़ा नमूना आकार है, तो स्वतंत्रता की डिग्री बहुत मायने नहीं रखती है क्योंकि वितरण एक सामान्य और ची-वर्ग के करीब है।

  3. अनुमान के लिए डग बेट्स के तरीकों की जाँच करें। उनकी पुरानी पद्धति MCMC सिमुलेशन पर आधारित है; उनकी नई पद्धति संभावना की रूपरेखा पर आधारित है।


वास्तव में एक अच्छा जवाब है, हालांकि मुझे लगता है कि संभावना को रूपरेखा करना एक अलग प्रश्न (विचलन मापदंडों पर उपयुक्त सीआई) को हल करता है जहां प्रोफ़ाइल एमसीएमसी सिमुलेशन करने की तुलना में गैर-द्विघात है) (जो परिमित आकार सुधार और गैर-द्विघात दोनों को संभालता है)। मुझे लगता है कि बूटमेकर (पैरामीट्रिक बूटस्ट्रैप) कंफ़र्ट (प्रोफ़ाइल (...)) की तुलना में mcmcsamp के बराबर है ...
बेन बोल्कर

@BenBolker: ज़रूर हो सकता है। डग बेट्स ने पिछले महीने यहां एक बात कही और उन्होंने संभावना के बारे में अपने विचारों के बारे में बात की। इसके बारे में मैं अब तक जानता हूं।
हारून ने
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.