2013-04-21 5 views
5

देता है मैं आर में इस बाद के वितरण की गणना करने की कोशिश कर रहा हूं। समस्या यह है कि संख्यात्मक, जो डबरन (p_i, y_i) < 1 का गुच्छा का उत्पाद है, भी है छोटे। (मेरा एन लगभग 1500 है)। इसलिए, आर 0 से बाहर निकलता है, और सभी \ theta के लिए पूर्ववर्ती मान भी 0.संभावना का उत्पाद बहुत छोटा है - आर केवल 0

स्पष्टीकरण के लिए, प्रत्येक y_i का अपना p_i है, साथ में ये p_i n y के लिए n तत्वों का वेक्टर बनाते हैं। प्रत्येक थेटा के पास पी_आई का अपना एन-एलिमेंट वेक्टर होता है।

enter image description here

(अंश की)

p <- sample(seq(0.001,0.999,by=0.01), 1500, replace=T) 
y <- sample(c(0,1), 1500, replace=T) 
dbern(y, p) # 1500-element vector, each element < 1 
prod(dbern(y, p)) # produces 0 
exp(sum(log(dbern(y, p)))) # produces 0 

संपादित करें (संदर्भ) एक प्रतिलिपि प्रस्तुत करने योग्य उदाहरण: मैं एक बायेसियन परिवर्तन बिंदु विश्लेषण (jstor.org/stable/25791783 कर रहा हूँ - पश्चिमी और Kleykamp 2004)। पेपर में निरंतर वाई के विपरीत, मेरा वाई बाइनरी है, इसलिए मैं अल्बर्ट और चिब (1 99 3) में डेटा एग्मेंटेशन विधि का उपयोग कर रहा हूं। उस विधि के साथ, वाई की संभावना बर्नौली है, पी = सीडीएफ-सामान्य (एक्स'बी) के साथ।

तो पी थैटा पर निर्भर करता है? ऐसा इसलिए है क्योंकि थेटा परिवर्तन बिंदु है। एक्स में से एक समय डमी है - उदाहरण के लिए, थेटा = 10, उदाहरण के लिए, दिन 10 से पहले सभी अवलोकनों के लिए समय = और 0 0 के बाद सभी अवलोकनों के लिए डमी = 1।

इस प्रकार, पी निर्भर करता है एक्स, एक्स थेटा पर निर्भर करता है - इस प्रकार, पी थीटा पर निर्भर करता है।

मुझे उपरोक्त मात्रा की आवश्यकता है क्योंकि गिब्स नमूना में थीटा की पूर्ण सशर्त है।

+3

आपको 'log.likelihood' – Nishanth

+0

के साथ काम करना चाहिए, मैंने कोशिश की। यदि मैं गलत नहीं हूं, तो क्या यह संभावना (0 0) का लॉग लेना है, इन 1500 नकारात्मक संख्याओं को योग करें, फिर एक्सप (योग)? फिर भी, योग इतना नकारात्मक है कि एक्सप (योग) अभी भी 0 हो जाएगा। क्या मैं इसे गलत कर रहा हूं? – Heisenberg

+0

ठीक है, – Nishanth

उत्तर

1

मैं क्रॉस मान्य पर इस प्रश्न पूछा भी, और glen_b मुझे नीचे इस (परीक्षण किया) समाधान दिया:


यह सभी प्रकार के मॉडलों के लिए संभावनाओं की गणना के साथ एक आम समस्या है; आमतौर पर किए गए सामानों के प्रकार लॉग पर काम करना और एक सामान्य स्केलिंग कारक का उपयोग करना है जो मूल्यों को एक और उचित सीमा में लाता है।

इस मामले में, मैं सुझाव चाहते हैं:

चरण 1: एक काफी "विशिष्ट" θ, θ0 उठाओ। Θ = θ0 के लिए संख्यात्मक द्वारा सामान्य शब्द के संख्यात्मक और denominator दोनों के लिए सूत्र को विभाजित करें, ताकि कुछ ऐसा प्राप्त हो सके जो कम प्रवाह की संभावना कम हो।

चरण 2: लॉग स्केल पर काम करें, इसका मतलब है कि संख्याकर्ता लॉग के अंतरों की मात्रा का विस्तार है, और denominator लॉग के मतभेदों के योग का विस्तार है।

एनबी: यदि आपके किसी भी पी 0 या 1 हैं, तो उन्हें अलग से खींचें और उन शर्तों के लॉग न लें; वे मूल्यांकन करने के लिए आसान हैं!

संख्या में सामान्य शब्द आकार में अधिक मामूली हो जाएगा, और इसलिए कई परिस्थितियों में संख्यात्मक और denominator अपेक्षाकृत उचित दोनों हैं।

यदि denominator में कई आकार हैं, तो बड़े जोड़ने से पहले छोटे जोड़ें।

यदि एक या कुछ शब्द भारी रूप से हावी हैं, तो आपको उन अपेक्षाकृत सटीक के लिए गणना करने पर अपना ध्यान केंद्रित करना चाहिए।

5

इस तरह की सटीक समस्याओं से निपटने का एक तरीका लॉग स्पेस में काम करना है। हालांकि यह denominator से एक लॉग-योग-उत्पाद पेश करता है, जो आम तौर पर दर्दनाक हो सकता है।

यदि आप अनुकूलन के प्रयोजनों के लिए पिछला गणना कर रहे हैं, तो ध्यान रखें कि आप denominator को पूरी तरह से छोड़ने में सक्षम हो सकते हैं: आपको argmax खोजने के लिए सामान्यीकृत करने की आवश्यकता नहीं है।

+0

मैंने उपरोक्त मेरी टिप्पणी में लॉग की संभावना की कोशिश की। क्या मैं इसे गलत कर रहा हूँ? – Heisenberg

+0

लॉग स्पेस में काम करने के लिए, शाब्दिक रूप से समीकरण के दोनों किनारों पर 'लॉग' लागू करें और मानक पहचानों का उपयोग करें: अनुपात एक अंतर बन जाता है, उत्पाद रकम बन जाते हैं आदि। ध्यान दें कि लॉग को स्थानांतरित करने के लिए कोई मानक पहचान नहीं है एक योग पिछले। – phs

+0

यह भी ध्यान दें कि आर में अधिकांश पीडीएफ में लॉग तर्क – hadley

3

खैर मैं अपने उदाहरण भाग गया, तो आप कर रहे हैं (उम्मीद के रूप में) 0 हो रही है, क्योंकि वहाँ एक 0

p <- sample(seq(0,1,by=0.01), 1500, replace=T) 
y <- sample(c(0,1), replace=T) 
x <- dbern(y, p) 
any(x == 0) 
## [1] TRUE 
+0

इंगित करने के लिए धन्यवाद। ऐसा इसलिए है क्योंकि मैं [0,1] समावेशी से पी उत्पन्न करता हूं। मेरे असली एप्लिकेशन पी में बिल्कुल 0 या 1 नहीं है। मैंने उपरोक्त कोड संपादित किया है जिसमें पी और 0 में 1 शामिल नहीं है। – Heisenberg

संबंधित मुद्दे