2012-07-07 21 views
6

इस पोस्ट के शीर्षक के रूप में कहते हैं, जब मैं कोड और डेटा कि BRugsFit (coda=T साथ) का उपयोग कर अनुसंधान से WinBUGS में ठीक से काम चलाने का प्रयास है, मैं इन त्रुटियों को मिलता है:ओपनबीयूजीएस मॉडल पर अभिसरण करने में विफल रहता है जो WinBUGS में अभिसरण करता है। प्रेसिजन सीमा?

Error in glm.fit(x = structure(c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, : 
    NA/NaN/Inf in foreign function call (arg 1) 
In addition: Warning messages: 
1: glm.fit: algorithm did not converge 
2: glm.fit: algorithm did not converge 
3: glm.fit: algorithm did not converge 
4: glm.fit: algorithm did not converge 
5: step size truncated due to divergence 

जब मैं पर tail() करना कोडा ऑब्जेक्ट, मुझे वही संख्याएं मिलती हैं। दूसरी तरफ, जब मैं WinBUGS चलाता हूं, कोडा को सहेजता हूं, और इसे आर में लोड करता हूं, मुझे कुछ स्टोकास्टिक भिन्नता मिलती है जैसे कि मैं अपेक्षा करता हूं, और अभिसरण के बारे में कोई चेतावनी नहीं।

यहां मेरा मॉडल है (यह लॉजिस्टिक-मेकहम वितरण के मानकों के लिए पोस्टरियर्स को खोजने के लिए 'एक चाल' का उपयोग करता है)।

model { 
    for(i in 1:n){ 
      ones[i]<-1; 
      # here I pre-calculate two quantities that occur several times 
      # in the PDF, to save a little processing time 
      expbx[i] <- exp(b*x[i]); expbx1[i]<- 1/(1+sd*(expbx[i]-1)); 
      # below is the actual PDF 
      p[i]<-(c+a*expbx[i]*expbx1[i])*exp(-c*x[i])*pow(expbx1[i],1/s); 
      # the ones trick 
      ones[i]~dbern(p[i]); 
    } 
b~dunif(0,1); d~dexp(1); c~dexp(1); s.raw~dflat(); 
    # a (lambda) parametrized this way because it comes out more accurate 
    # s forced to be > 0 
    a<-b*d; s<-abs(s.raw); 
    # NOT a standard deviation, just s times d, to save processing time 
    sd<-s*d; 
    # I save all the parameters I'm interested in to one vector, for convenient 
    # viewing of them all in the same window. 
    out[1]<-a; out[2]<-b; out[3]<-c; out[4]<-s; out[5]<-d; 
} 

यहाँ मेरी डेटा का एक विशिष्ट उदाहरण है:

list(n= 148 ,x=c(1246,1175,1048,1169,1043,802,543,719,1296,817,1122,542,839,443,1536,700,834,232,596,1096,1118,957,974,1031,1149,1044,1108, 
519,677,569,952,1243,970,1736,1262,1026,979,1543,1029,761,533,540,511,1150,1589,1169,1029,1248,1572,638,731,525,968,1467,1596,1077,712,1603,1 
203,991,37,1775,893,993,913,1487,1186,1381,977,1247,857,786,615,733,1206,1059,1508,569,1205,754,886,1099,843,599,780,1294,1603,1242,883,1320, 
507,1097,1193,218,1362,1181,1118,453,1291,972,787,1061,1097,1100,1117,1174,596,1305,1071,940,919,999,1209,1043,1161,1016,1025,750,423,732, 
1389,907,1184,1275,944,1209,1073,1098,1348,976,817,557,211,961,880,1039,1287,736,1400,1757,1355,977,198,689,853,1251,767,768)) 

... और ठेठ inits

list(d=0.001738,b=0.0009672,c=0.002451,s.raw=0.001511) 
list(d=0.006217,b=0.005596,c=0.00777,s.raw=0.007019) 
list(d=1.504E-05,b=4.825E-06,c=2.172E-07,s.raw=6.104E-05) 
list(d=0.3011,b=0.03552,c=0.1274,s.raw=0.2549) 
(मैं 4 चेन, 20 thinning, बर्निं 2000, 20000 पुनरावृत्तियों का उपयोग करें)

क्या ओपनबीयूजीएस WinBUGS की तुलना में कम महत्वपूर्ण अंकों के लिए बस बंद हो जाता है, और यदि ऐसा है, तो शायद एक सेटिंग है जिसे मैं इसे रोकने से रोकने के लिए बदल सकता हूं?

+1

+1, सिर्फ प्रश्न की श्रेणी के लिए। मुझे किसी को बग्स लगाने का आनंद मिलता है। – duffymo

+2

क्या आपने जेएजीएस की कोशिश की है? आम तौर पर, थोड़ी मुश्किल समस्याओं के लिए, BUGS- जैसे ब्लैक-बॉक्स नमूने बहुत संवेदनशील हो सकते हैं ... –

+0

मैं इसे आज़माने के लिए तैयार हूं। क्या यह अधिक आराम से करता है? WinBUGS के उस सुविधा के बिना कुछ बहुत भयानक autocorrelation है। साथ ही, जेएजीएस में WinBUGS की एकाधिक श्रृंखला कार्यक्षमता को कई जेएजीएस रन करने के रूप में सरल और फिर उन्हें एक कोडा में मैन्युअल रूप से संयोजित करने की प्रतिलिपि बना रहा है? – f1r3br4nd

उत्तर

1

इस मेरे जांच जवाब के कुछ संयोजन हो रहा है ...

  • fg को bugsInits() और bugsData() आदेश के लिए format तर्क की स्थापना।
  • पूर्व वितरण को पैरामीटरेट करना जैसे कि पैरामीटर बहुत छोटा है (लॉग स्केल पर नकारात्मक डबल अंकों में) पारस्परिक (या कुछ अन्य उपयुक्त परिवर्तन) नमूना किया जा रहा है।
  • बस बड़े पतले अंतराल (मेरे मामले में, 80) और पुनरावृत्तियों के बहुत सारे उपयोग का उपयोग करना। ओपनबीयूजीएस वर्तमान में अधिक छूट का समर्थन नहीं करता है, और यही वह है।
  • यदि कुछ चर स्पष्ट हैं, तो निरंतर चर के समान सारांश में उन्हें शामिल करने का प्रयास न करें।

प्रत्युत्तर जो अति-छूट को बंद करने का सुझाव दिया करने के लिए: समस्या यह है कि मैं इसे पर चालू नहीं कर सकता, और इसके बिना, पुनरावृत्तियों हमेशा के लिए लेते हैं। लेकिन यह इस समय एकमात्र विकल्प प्रतीत होता है। मेरी इच्छा है कि WinBUGS मैन्युअल सावधानी के साथ इस सुविधा का उपयोग करके क्या मतलब है इसके बारे में अधिक विशिष्ट था। ओह ठीक है, मुझे लगता है कि अंत में मुझे उनके द्वारा उद्धृत पेपर को पढ़ने की आवश्यकता होगी। लेकिन, चूंकि यह ओपनबीयूजीएस में भी उपलब्ध नहीं है, इस समय यह अर्द्ध-बूट है।

मैं थोड़ी देर के लिए अपना प्रश्न खुला छोड़ दूंगा, अगर किसी के पास आने के लिए बेहतर या अधिक विस्तृत उत्तर है।