SAS PROC GLIMMIX मुझे एक द्विपद शुक्राणु के लिए ग्लमर (lme4) की तुलना में बहुत अलग यादृच्छिक ढलान क्यों देता है


12

मैं आर के साथ अधिक परिचित हूं, और चार निवास स्थानों के लिए 5 वर्षों में लगभग 35 व्यक्तियों के लिए यादृच्छिक ढलान (चयन गुणांक) का अनुमान लगाने की कोशिश कर रहा हूं। प्रतिक्रिया चर है कि क्या कोई स्थान "उपयोग किया गया था" (1) या "उपलब्ध" (0) निवास स्थान (नीचे "उपयोग")।

मैं एक विंडोज 64-बिट कंप्यूटर का उपयोग कर रहा हूं।

आर संस्करण 3.1.0 में, मैं नीचे दिए गए डेटा और अभिव्यक्ति का उपयोग करता हूं। पीएस, टीएच, आरएस, और एचडब्ल्यू फिक्स्ड इफेक्ट्स (मानकीकृत, निवास स्थान की दूरी को मापा जाता है) हैं। lme4 V 1.1-7।

str(dat)
'data.frame':   359756 obs. of  7 variables:
 $ use     : num  1 1 1 1 1 1 1 1 1 1 ...
 $ Year    : Factor w/ 5 levels "1","2","3","4",..: 4 4 4 4 4 4 4 4 3 4 ...
 $ ID      : num  306 306 306 306 306 306 306 306 162 306 ...
 $ PS: num  -0.32 -0.317 -0.317 -0.318 -0.317 ...
 $ TH: num  -0.211 -0.211 -0.211 -0.213 -0.22 ...
 $ RS: num  -0.337 -0.337 -0.337 -0.337 -0.337 ...
 $ HW: num  -0.0258 -0.19 -0.19 -0.19 -0.4561 ...

glmer(use ~  PS + TH + RS + HW +
     (1 + PS + TH + RS + HW |ID/Year),
     family = binomial, data = dat, control=glmerControl(optimizer="bobyqa"))

ग्लेमर मुझे निश्चित प्रभावों के लिए पैरामीटर अनुमान देता है जो मेरे लिए समझ में आता है, और यादृच्छिक ढलानों (जो मैं प्रत्येक आवास प्रकार के चयन गुणांक के रूप में व्याख्या करता हूं) भी समझ में आता है जब मैं गुणात्मक रूप से डेटा की जांच करता हूं। मॉडल के लिए लॉग-लाइकैलिटी -3050.8 है।

हालांकि, जानवरों की पारिस्थितिकी में अधिकांश अनुसंधान आर का उपयोग नहीं करते हैं क्योंकि पशु स्थान डेटा के साथ, स्थानिक ऑटोकॉरेलेशन मानक त्रुटियों को टाइप I त्रुटि होने का खतरा बना सकता है। जबकि R मॉडल-आधारित मानक त्रुटियों का उपयोग करता है, अनुभवजन्य (भी ह्यूबर-व्हाइट या सैंडविच) मानक त्रुटियों को प्राथमिकता दी जाती है।

जबकि R वर्तमान में इस विकल्प की पेशकश नहीं करता है (मेरी जानकारी के लिए - कृपया, मुझे सही करें कि क्या मैं गलत हूं), SAS करता है - हालाँकि मेरे पास एसएएस तक पहुंच नहीं है, एक सहकर्मी ने मुझे यह निर्धारित करने के लिए अपने कंप्यूटर को उधार देने के लिए सहमति दी कि क्या मानक त्रुटियां हैं जब अनुभवजन्य विधि का उपयोग किया जाता है, तो महत्वपूर्ण रूप से बदलें।

सबसे पहले, हम यह सुनिश्चित करना चाहते थे कि मॉडल-आधारित मानक त्रुटियों का उपयोग करते समय, एसएएस आर के समान अनुमानों का उत्पादन करेगा - यह सुनिश्चित करने के लिए कि मॉडल दोनों कार्यक्रमों में उसी तरह निर्दिष्ट है। मुझे परवाह नहीं है अगर वे बिल्कुल समान हैं - बस इसी तरह। मैंने कोशिश की (एसएएस वी 9.2):

proc glimmix data=dat method=laplace;
   class year id;
   model use =  PS TH RS HW / dist=bin solution ddfm=betwithin;
   random intercept PS TH RS HW / subject = year(id) solution type=UN;
run;title;

मैंने कई अन्य रूपों की भी कोशिश की, जैसे कि लाइनें जोड़ना

random intercept / subject = year(id) solution type=UN;
random intercept PS TH RS HW / subject = id solution type=UN;

मैंने निर्दिष्ट किए बिना प्रयास किया

solution type = UN,

या टिप्पणी कर रहा है

ddfm=betwithin;

कोई फर्क नहीं पड़ता कि हम मॉडल को कैसे निर्दिष्ट करते हैं (और हमने कई तरीके आजमाए हैं), मैं एसएएस में यादृच्छिक ढलानों को दूरस्थ रूप से आर से उन आउटपुट के समान नहीं प्राप्त कर सकता हूं - भले ही निश्चित प्रभाव समान हो। और जब मैं अलग होता हूं, मेरा मतलब है कि संकेत भी समान नहीं हैं। एसएएस में -2 लॉग संभावना 71344.94 थी।

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

मेरा प्रश्न: क्या कोई इस बात पर प्रकाश डाल सकता है कि यादृच्छिक ढलानों का अनुमान आर और एसएएस के बीच इतना भिन्न क्यों हो सकता है? क्या मैं अपने कोड को संशोधित करने के लिए R, या SAS में कुछ भी कर सकता हूं ताकि कॉल समान परिणाम उत्पन्न करें? मैं एसएएस में कोड बदलना चाहता हूं, क्योंकि मैं अपने आर अनुमानों को "अधिक" मानता हूं।

मैं वास्तव में इन मतभेदों से चिंतित हूं और इस समस्या की तह तक जाना चाहता हूं!

एक खिलौना डेटासेट से मेरा आउटपुट जो आर और एसएएस के लिए पूर्ण डेटासेट में 35 व्यक्तियों में से केवल तीन का उपयोग करता है, को jpegs के रूप में शामिल किया गया है।

आर आउटपुट एसएएस आउटपुट 1 एसएएस आउटपुट 2 एसएएस आउटपुट 3


संपादित करें और अद्यतन करें:

जैसा कि @JakeWestfall ने खोज में मदद की, एसएएस में ढलानों में निश्चित प्रभाव शामिल नहीं हैं। जब मैं निश्चित प्रभावों को जोड़ता हूं, तो यहां परिणाम है - एक निश्चित प्रभाव के लिए एसए ढलानों के लिए आर ढलान की तुलना, "पीएस", कार्यक्रमों के बीच: (चयन गुणांक = यादृच्छिक ढलान)। एसएएस में वृद्धि की विविधता पर ध्यान दें।

पीएस के लिए आर बनाम एसएएस


मैंने देखा कि IDआर में कोई कारक नहीं है; जाँच करें और देखें कि क्या कुछ भी बदलता है।
हारून ने

मैं देख रहा हूं कि आप लॉग-लाइकैलिटी के लिए लाप्लास अप्रूवल का उपयोग कर दोनों को फिट कर रहे हैं। उनके संबंधित लॉग-अप स्कोर क्या हैं?
us --r11852 21

1
क्या आपने चेक किया है कि आप उसी दिशा में आश्रित चर को मॉडलिंग कर रहे हैं?
पीटर Flom - को पुनः स्थापित मोनिका

1
वैसे, पीटर को जो मिल रहा है, वह डिफ़ॉल्ट रूप से, द्विपदीय डेटा के साथ 0s और 1s के रूप में लेबल है , R"1" प्रतिक्रिया की संभावना को मॉडल करेगा जबकि एसएएस "0" प्रतिक्रिया की संभावना को मॉडल करेगा। SAS मॉडल को "1" की संभावना बनाने के लिए आपको अपनी प्रतिक्रिया चर के रूप में लिखनी होगी use(event='1')। बेशक, ऐसा करने के बिना भी मेरा मानना ​​है कि हमें अभी भी यादृच्छिक प्रभाव के समान अनुमानों की उम्मीद करनी चाहिए, साथ ही साथ उनके संकेतों के साथ एक ही निश्चित प्रभाव का अनुमान भी उलटा होगा।
जेक वेस्टफॉल

1
@ EricaN एक बात जो आपने अभी मुझे याद दिलाई है, वह यह है कि आपको R से एसएएस में यादृच्छिक प्रभावों की तुलना उस ranef()फ़ंक्शन के उपयोग से करनी चाहिए coef()। पूर्व वास्तविक यादृच्छिक प्रभाव देता है, जबकि बाद वाला यादृच्छिक प्रभाव और निश्चित-प्रभाव वेक्टर देता है। इसलिए यह बहुत कुछ बताता है कि आपके पोस्ट में सचित्र संख्याएँ भिन्न क्यों हैं, लेकिन अभी भी एक पर्याप्त विसंगति शेष है जिसे मैं पूरी तरह से समझा सकता हूं।
जेक वेस्टफॉल

जवाबों:


11

ऐसा प्रतीत होता है कि मुझे जांग एट अल 2011 के अनुसार, यादृच्छिक ढलानों को पैकेजों के बीच समान होने की उम्मीद नहीं करनी चाहिए। अपने पेपर में विभिन्न सांख्यिकीय पैकेजों का उपयोग करते हुए द्विआधारी प्रतिक्रियाओं के लिए सामान्यीकृत रैखिक मिश्रित-प्रभाव मॉडल पर , वे वर्णन करते हैं:

सार:

सामान्यीकृत रैखिक मिश्रित-प्रभाव मॉडल (GLMM) एक अनुदैर्ध्य सेटिंग के लिए पार-अनुभागीय डेटा के लिए मॉडल का विस्तार करने के लिए एक लोकप्रिय प्रतिमान है। जब द्विआधारी प्रतिक्रियाओं को मॉडलिंग करने के लिए लागू किया जाता है, तो एक पैकेज के भीतर विभिन्न सॉफ्टवेयर पैकेज और यहां तक ​​कि अलग-अलग प्रक्रियाएं काफी भिन्न परिणाम दे सकती हैं। इस रिपोर्ट में, हम सांख्यिकीय दृष्टिकोणों का वर्णन करते हैं जो इन विभिन्न प्रक्रियाओं को रेखांकित करते हैं और सहसंबद्ध बाइनरी प्रतिक्रियाओं के लिए उपयुक्त होने पर उनकी ताकत और कमजोरियों पर चर्चा करते हैं। फिर हम कुछ लोकप्रिय सॉफ्टवेयर पैकेजों में कार्यान्वित इन प्रक्रियाओं को सिम्युलेटेड और वास्तविक अध्ययन डेटा पर लागू करके इन विचारों को स्पष्ट करते हैं। हमारे सिमुलेशन परिणाम में विचार की जाने वाली अधिकांश प्रक्रियाओं के लिए विश्वसनीयता की कमी का संकेत मिलता है, जो व्यवहार में ऐसे लोकप्रिय सॉफ्टवेयर पैकेजों को लागू करने के लिए महत्वपूर्ण प्रभाव डालता है।

मुझे आशा है कि @BenBolker और टीम R के लिए एक वोट के रूप में अनुभवजन्य मानक त्रुटियों और गॉस-हरमाइट क्वाड्रैटर क्षमता को कई यादृच्छिक ढलान शर्तों के साथ मॉडल में शामिल करने के लिए वोट के रूप में विचार करेगी, क्योंकि मैं आर इंटरफ़ेस पसंद करता हूं और लागू करने में सक्षम होना पसंद करूंगा। उस कार्यक्रम में कुछ और विश्लेषण। खुशी से, भले ही आर और एसएएस में यादृच्छिक ढलानों के लिए तुलनीय मूल्य नहीं हैं, समग्र रुझान समान हैं। आपके इनपुट के लिए सभी को धन्यवाद, मैं वास्तव में समय और विचार की सराहना करता हूं जो आपने इसमें डाला है!


क्षमा करें: "मानक मानक त्रुटि" क्या है? क्या आपका मतलब विचरण घटकों की मानक त्रुटियों से है? या आप सैंडविच मानक त्रुटियों का मतलब है?
बेन बोल्कर

क्षमा करें ... अनुभवजन्य / सैंडविच एसई का मतलब है। मैंने अपनी प्रतिक्रिया संपादित की है।
नोवा

@BenBolker क्या यह कभी शामिल हुआ?
लेपिडोप्टेरिस्ट

नहीं। मैं यह जानने की कोशिश कर रहा हूं कि मैं इस तरह से विकास का समर्थन करने जा रहा हूं, क्योंकि यह तकनीकी रूप से मेरे शोध कार्यक्रम का हिस्सा नहीं है ...
बेन बोल्कर

4

एक उत्तर और टिप्पणी / अधिक प्रश्नों का मिश्रण:

मैंने तीन अलग-अलग ऑप्टिमाइज़र विकल्पों के साथ 'टॉय' डेटा सेट फिट किया। (* नोट 1: यह संभवतः तुलनात्मक उद्देश्यों के लिए अधिक उपयोगी होगा कि समूहन चर को कम करने के बजाय प्रत्येक वर्ष और आईडी से एक छोटा सा डेटा सेट करके बनाया जाए। जैसा कि हम जानते हैं कि GLMM नहीं करेगा। विशेष रूप से इस तरह के एक छोटी संख्या में समूह चर चर के साथ। आप ऐसा कुछ के माध्यम से कर सकते हैं:

library(plyr)
subdata <- ddply(fulldata,c("year","id"),
    function(x) x[sample(nrow(x),size=round(nrow(x)*0.1)),])

बैच फिटिंग कोड:

Ntoy <- readRDS("Newton_toy.RDS")
library(lme4)
fitfun <- function(opt) {
    tt <- system.time(fit1 <- glmer(use ~  ps + th + rs + hw +
                                    (1 + ps + th + rs + hw |id/year),
                                    family = binomial, data = Ntoy,
                                    control=glmerControl(optimizer=opt),
                                    verbose=100))
    return(list(time=tt,fit=fit1))
}

opts <- c("nloptwrap","nlminbwrap","bobyqa")
## use for() instead of lapply so we can checkpoint more easily
res <- setNames(vector("list",length(opts)),opts)
for (i in opts) {
    res[[i]] <- fitfun(i)
    save("res",file="Newton_batch.RData")
}

फिर मैंने नए सत्र में परिणामों को पढ़ा:

load("Newton_batch.RData")
library(lme4)

बीता हुआ समय और विचलन:

cbind(time=unname(sapply(res,function(x) x$time["elapsed"])),
          dev=sapply(res,function(x) deviance(x$fit)))
##                time      dev
## nloptwrap  1001.824 6067.706
## nlminbwrap 3495.671 6068.730
## bobyqa     4945.332 6068.731

ये डिविज़न ओपी द्वारा आर (6101.7) से रिपोर्ट किए गए डिविज़न से काफी नीचे हैं, और ओपी द्वारा एसएएस (6078.9) से रिपोर्ट किए गए से थोड़ा नीचे हैं, हालांकि पैकेजों में डिवियनों की तुलना करना हमेशा समझदारी नहीं होती है।

मुझे वास्तव में आश्चर्य हुआ कि एसएएस केवल 100 फ़ंक्शन मूल्यांकन में परिवर्तित हुआ!

ओपी के अनुभव के अनुरूप, मैकबुक प्रो पर 17 मिनट ( nloptwrap) से 80 मिनट ( bobyqa) तक की समय सीमा । डीवाइस के लिए थोड़ा बेहतर है nloptwrap

round(cbind(sapply(res,function(x) fixef(x$fit))),3)
##             nloptwrap nlminbwrap bobyqa
## (Intercept)    -5.815     -5.322 -5.322
## ps             -0.989      0.171  0.171
## th             -0.033     -1.342 -1.341
## rs              1.361     -0.140 -0.139
## hw             -2.100     -2.082 -2.082

उत्तर काफी भिन्न दिखाई देते हैं nloptwrap- हालाँकि मानक त्रुटियाँ काफी बड़ी हैं ...

round(coef(summary(res[[1]]$fit)),3)
##             Estimate Std. Error z value Pr(>|z|)
## (Intercept)   -5.815      0.750  -7.750    0.000
## ps            -0.989      1.275  -0.776    0.438
## th            -0.033      2.482  -0.013    0.989
## rs             1.361      2.799   0.486    0.627
## hw            -2.100      0.490  -4.283    0.000

(यहाँ कोड कुछ चेतावनी देता है year:idकि मुझे नीचे ट्रैक करना चाहिए)

जारी रहती है ... ?


यदि मैंने आपको पूर्ण डेटासेट भेजा तो यह अधिक उपयोगी होगा? एकमात्र समस्या यह है कि अभिसरण पूरे डेटासेट के साथ लगभग 9 घंटे लेता है, इसलिए नमूने के संबंध में आपका सुझाव एक अच्छा है। मैंने डेटा को एक लॉग ट्रांसफ़ॉर्मेशन के साथ बदलने की कोशिश की, लेकिन द्विपदीय अवशिष्ट प्लॉट अभी भी बदसूरत है - क्या आपको लगता है कि अवशिष्ट प्लॉट इन डेटा के साथ समस्या का हिस्सा बताते हैं? अंत में - आपके परिणाम एसएएस में आर के समान थे?
Nova
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.