मैं GLMM में निश्चित प्रभावों की गणना को कैसे तेज कर सकता हूं?


9

मैं एक सिमुलेशन अध्ययन कर रहा हूं जिसमें सामान्यीकृत रैखिक मिश्रित मॉडल (वास्तव में, निश्चित प्रभावों के लिए दो अनुमानों का उत्पाद, एक GLMM से और एक LMM से एक) से प्राप्त बूटस्ट्रैपिंग अनुमान की आवश्यकता होती है। अच्छी तरह से अध्ययन करने के लिए हर बार 1000 या 1500 बूटस्ट्रैप प्रतिकृति के साथ लगभग 1000 सिमुलेशन की आवश्यकता होगी। यह मेरे कंप्यूटर (कई दिनों) पर महत्वपूर्ण समय लेता है।

How can I speed up the computation of these fixed effects?

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

M=α0+α1X+ϵ1
Y=β0+β1X+β2M+ϵ2
Y
α1β2
    stat=function(dat){
        a=fixef(lmer(M~X+(X|person),data=dat))["X"]
        b=fixef(glmer(Y~X+M+(X+M|person),data=dat,family="binomial"))["M"]
        return(a*b)
    }

मुझे लगता है कि मैं के लिए एक ही अनुमान प्राप्त अगर मैं सिर्फ एक रेखीय मॉडल के रूप में यह फिट है, ताकि कुछ समय की बचत होती है, लेकिन एक ही चाल लिए काम नहीं करता ।α1β2

क्या मुझे केवल तेज कंप्यूटर खरीदने की आवश्यकता है? :)


1
@ बीआर बोतल की गर्दन यहाँ क्या है? मूल रूप से क्या समय लग रहा है Rprof
suncoolsu

1
एक तरीका सिर्फ GLMM के "मिश्रित" भाग को अनदेखा करना है। बस एक साधारण GLM फिट, अनुमान ज्यादा परिवर्तन नहीं होगा, लेकिन उनके मानक त्रुटियों शायद होगा
probabilityislogic

@probabilityislogic। आपकी टिप्पणी के अलावा, मुझे यह भी लगता है कि क्या उत्तर भिन्न होगा, यह समूह के आकार और समूह में व्यक्तिगत व्यवहार पर निर्भर करता है। जैसा कि गेलमैन और हिल कहते हैं: मिश्रित प्रभाव मॉडल परिणाम पूलिंग और कोई पूलिंग के बीच होगा। (ओबव। यह बायेसियन पदानुक्रमित मॉडल के लिए है, लेकिन मिश्रित मॉडल ऐसा करने का एक शास्त्रीय तरीका है।)
suncoolsu

@probabilityislogic: यह LMM के लिए काम करता है, लेकिन यह GLMM के लिए विफल प्रतीत होता है (जिसका अर्थ है कि मैंने एक ही डेटा पर अतिरिक्त M के साथ और उसके बिना मॉडल चलाए और काफी भिन्न परिणामों के साथ समाप्त हुआ)। जब तक, निश्चित रूप से, ग्लेमर के कार्यान्वयन में एक त्रुटि है।
बीआर

@suncoolsu: अड़चन GLMM का अनुमान है, जो कुछ सेकंड (विशेषकर कई यादृच्छिक प्रभावों के साथ) हो सकता है। लेकिन ऐसा 1000 * 1000 बार करें, और यह 280 घंटे की गणना है। एक GLM फिट होने में लगभग 1/100 समय लगता है।
बीआर

जवाबों:


4

शुरुआती मूल्यों को निर्दिष्ट करने में मदद करनी चाहिए, हालांकि यह जानना मुश्किल है कि कितना है। जैसा कि आप सिमुलेशन और बूटस्ट्रैपिंग कर रहे हैं, आपको 'सही' मान या अन-बूटस्ट्रैप्ड अनुमान या दोनों जानना चाहिए। के start =विकल्प में उन का उपयोग करने का प्रयास करें glmer

आप यह देखने पर भी विचार कर सकते हैं कि क्या अभिसरण की घोषणा के लिए सहिष्णुता आपकी आवश्यकता से अधिक कठोर हैं। मैं स्पष्ट नहीं हूँ कि उन्हें lme4प्रलेखन से कैसे बदला जाए ।


4

नया कंप्यूटर खरीदने से पहले दो अन्य संभावनाओं पर भी विचार करें।

  1. समानांतर कंप्यूटिंग - बूटस्ट्रैपिंग समानांतर में चलाना आसान है। यदि आपका कंप्यूटर यथोचित रूप से नया है, तो संभवतः आपके पास चार कोर हैं। आर में मल्टीकोर लाइब्रेरी पर एक नज़र डालें ।
  2. क्लाउड कंप्यूटिंग भी एक संभावना है और यथोचित सस्ता है। मेरे पास सहकर्मी हैं जिन्होंने आर स्क्रिप्ट चलाने के लिए अमेज़ॅन क्लाउड का उपयोग किया है। उन्होंने पाया कि यह काफी लागत प्रभावी था।

1
जवाब के लिए धन्यवाद। किसी तरह, मैंने इस तथ्य की अनदेखी की है कि मेरे पास दो कोर हैं (मेरा कंप्यूटर बहुत नया नहीं है)। मुझे बहुत समय पहले मल्टीकोर पर ध्यान देना चाहिए था।
BR

2

यह संभवतः एक तेज कंप्यूटर हो सकता है। लेकिन यहां एक तरकीब है जो काम कर सकती है।

का एक साथ उत्पन्न करें , लेकिन केवल पर सशर्त , तो बस सिम्युलेटेड मान पर OLS या LMM करें ।YYY

मान लीजिए कि आपका लिंक फंक्शन । यह कहता है कि आपको से मान की प्रायिकता कैसे मिलती है , और लॉजिक फंक्शन सबसे अधिक संभावना है ।g(.)Y=1Yg(z)=log(z1z)

इसलिए यदि आप लिए एक बर्नौली नमूना वितरण मान लेते हैं , और फिर संभाव्यता के लिए पहले jeffreys का उपयोग करते हैं, तो आपको लिए एक बीटा पोस्टीरियर मिलता है। । इससे अनुकरण प्रकाश की तरह होना चाहिए, और यदि यह नहीं है, तो आपको एक तेज कंप्यूटर की आवश्यकता है। इसके अलावा, नमूने स्वतंत्र हैं, इसलिए एमसीएमसी जैसे किसी भी "अभिसरण" निदान की जांच करने की आवश्यकता नहीं है, और आपको संभवतः कई नमूनों की आवश्यकता नहीं है - 100 आपके मामले के लिए ठीक काम कर सकते हैं। यदि आपके पास द्विपद , तो बस साथ उपरोक्त पोस्ट में , प्रत्येक लिए द्विपद के परीक्षणों की संख्या ।YYBernoulli(p)pBeta(Yobs+12,1Yobs+12)Ys1niYi

तो आपके पास नकली मूल्यों का एक सेट है । आप फिर इन सभी मूल्यों के लिए लिंक फ़ंक्शन लागू करते हैं, । LMM को फिट करें , जो शायद GLMM प्रोग्राम से तेज है। आप मूल बाइनरी मानों को अनदेखा कर सकते हैं (लेकिन उन्हें हटाएं नहीं!), और बस "सिमुलेशन मैट्रिक्स" ( , जहां नमूना आकार है, और सिमुलेशन की संख्या है) के साथ काम करें।psimYsim=g(psim)YsimN×SNS

इसलिए आपके कार्यक्रम में, मैं फ़ंक्शन को फ़ंक्शन के साथ बदल , और एक एकल संयोजन के साथ, आप इसके बाद किसी प्रकार का लूप बनाएंगे जो प्रत्येक अनुकार में फ़ंक्शन को लागू करता है और फिर लेता है औसत के अनुमान के रूप में । कुछ ऐसा है जैसे gmler()lmer()Ylmer()b

a=
b=0
do s=1,,S
best=lmer(Ys)
b=b+1s(bestb)
end
return(ab)

अगर मुझे कुछ स्पष्ट करने की आवश्यकता है, तो मुझे बताएं


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