क्या Matlab / octave या R मोंटे कार्लो सिमुलेशन के लिए बेहतर अनुकूल है?


14

मैं एक शौक के रूप में आर में मोंटे कार्लो करना शुरू कर दिया, लेकिन अंततः एक वित्तीय विश्लेषक ने मतलाब में प्रवास करने की सलाह दी। मैं एक अनुभवी सॉफ्टवेयर डेवलपर हूं। लेकिन एक मोंटे कार्लो शुरुआत। मैं संवेदनशीलता विश्लेषण के साथ स्थिर मॉडल का निर्माण करना चाहता हूं, बाद में गतिशील मॉडल। अच्छे पुस्तकालयों / एल्गोरिदम की आवश्यकता है जो मेरा मार्गदर्शन करें।

मुझे लगता है कि आर के पास उत्कृष्ट पुस्तकालय हैं, और मुझे संदेह है कि मैथलैब को अनुभवहीन प्रोग्रामर द्वारा आसान पास्कल जैसी भाषा के कारण पसंद किया जाता है। R भाषा योजना पर आधारित है और यह शुरुआती लोगों के लिए कठिन है, लेकिन मेरे लिए नहीं। यदि मैटलैब / ऑक्टेव के संख्यात्मक / पुस्तकालय की ओर से कोई लाभ नहीं है, तो मैं आर के साथ रहना चाहूंगा।


2
R स्कीम पर आधारित है, लेकिन शुरुआती के बहाने बहुत अच्छा है कि यह C आधारित है।

2
> मैं इसे उत्तर के रूप में पोस्ट नहीं करूंगा क्योंकि मेरे मुकाबले इन चीजों में कई लोग अधिक जानकार हैं। हालाँकि, मुझे लगता है कि गति के संबंध में आपको R बेस और मिक्स अच्छे प्रोग्रामर / महान पैकेज के बीच अंतर करना होगा। एक अच्छा प्रोग्रामर कुछ उपकरण जैसे कि मल्टीकोर, GPUtools & magma (जल्द ही लेकिन अभी तक MCMC के लिए उपयोगी नहीं है), Rcpp, ... को बहुत तेज़ कोड बनाने के लिए उपयोग कर सकता है। मुझे नहीं लगता है कि माटलैब केंद्रीय की पेशकश करने के लिए कुछ भी तुलनीय है।
user603

@kwak - मुझे शायद अपना जवाब टिप्पणी के रूप में पोस्ट करना चाहिए था। उसके लिए माफ़ करना।
एम। टिबबिट्स

2
एमटी, वह पागल है - आपका जवाब बहुत अच्छा है। यदि कुछ भी हो, तो क्वाक को उसका उचित उत्तर देना चाहिए। उन लोगों को अधिक जानकार वोट या उत्तर दें जो उन्हें फिट दिखते हैं।
मैट पार्कर

नेक्रोपोस्ट के लिए अग्रिम में माफी। GNU ऑक्टेव वित्तीय पैकेज octave.sourceforge.net/financial अब मोंटे कार्लो सिमुलेशन का समर्थन करता है (0.5.0 के रूप में)। यह MATLAB संस्करण की तुलना में काफी तेज है क्योंकि कोड को लूप के बिना लिखा गया है। बेंचमार्किंग (MATLAB की तुलना में) और एक ट्यूटोरियल के लिए, parsiad.ca/post/simulate-sdes-in-gnu-octave-financial-package देखें । मुझे अपने पूर्वाग्रह का भी प्रचार करना चाहिए, क्योंकि मैं इन विधियों का लेखक हूं।
पारसीड

जवाबों:


17

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

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

हालाँकि, मुझे लगता है कि यदि आप चाहते हैं कि एल्गोरिदम एक उत्पादन वातावरण के भीतर कुशलता से काम करे, तो C ++ जैसी संकलित भाषा में जाना सबसे अच्छा है। मुझे मैटलैब और आर (और उस मामले के लिए एक्सेल) दोनों में सी ++ लपेटने का अनुभव है, लेकिन मुझे आर। अस्वीकरण के साथ बेहतर अनुभव मिला है : एक स्नातक छात्र होने के नाते, मैंने अपने डीएलएस के लिए मैटलैब के हाल के संस्करण का उपयोग नहीं किया है, मैं Matlab 7.1 (जो 4 साल की तरह है) में लगभग विशेष रूप से काम कर रहा हूं। शायद नए संस्करण बेहतर काम करते हैं, लेकिन मैं अपने सिर के ऊपर से दो स्थितियों के बारे में सोच सकता हूं, जहां मतलब के पीछे एक सी ++ डीएलएल ने विंडोज एक्सपी को नीली स्क्रीन के कारण बनाया क्योंकि मैं एक सरणी सीमा के बाहर अनुचित तरीके से चला गया - एक बहुत ही कठिन समस्या डिबग करें यदि आपका कंप्यूटर हर बार उस गलती को रिबूट करता है ...

अंत में, आर समुदाय बहुत तेजी से बढ़ता हुआ दिखाई देता है और मतलाब समुदाय की तुलना में कहीं अधिक गति के साथ। इसके अलावा, जैसा कि यह मुफ़्त है आप भी Godforsaken flexlm लाइसेंस प्रबंधक के साथ सौदा नहीं है।

नोट: मेरा लगभग सारा विकास अभी MCMC एल्गोरिदम में है। मैं G +plg2 का उपयोग करते हुए R में विज़ुअलाइज़ेशन के साथ C ++ के उत्पादन में लगभग 90% करता हूं।

समानांतर टिप्पणियाँ के लिए अद्यतन:

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

मुझे R समानांतर पैकेज के साथ लगभग कोई अनुभव नहीं है।

यह मेरा अनुभव है कि समानांतर कोड C ++ स्तर पर होना चाहिए जहां आपके पास कार्य विघटन और मेमोरी / संसाधन आवंटन के लिए नियंत्रण की बारीक बारीक क्षमता है। मुझे लगता है कि यदि आप उच्च स्तर पर कार्यक्रमों को समानांतर बनाने का प्रयास करते हैं, तो आप अक्सर केवल एक न्यूनतम स्पीडअप प्राप्त करते हैं जब तक कि आपका कोड तुच्छ रूप से विघटित न हो (जिसे डमी-समानांतरवाद भी कहा जाता है)। उन्होंने कहा, आप OpenMP का उपयोग करके C ++ स्तर पर एकल-पंक्ति का उपयोग करके उचित गति प्राप्त कर सकते हैं :

#pragma omp parallel for

अधिक जटिल योजनाओं में सीखने की अवस्था है, लेकिन मुझे वास्तव में पसंद है जहां gpgpu चीजें चल रही हैं। जेएसएम के रूप में इस साल, कुछ लोगों ने आर बोली में जीपीयू के विकास के बारे में बात की थी, इसलिए इसे "गहरे अंत में पैर की उंगलियों" के रूप में बोली जाती है। लेकिन जैसा कि कहा गया है, मेरे पास न्यूनतम अनुभव है - निकट भविष्य में बदलने के लिए।


सी ++ के लिए +1; जबकि C / C ++ को RI में एम्बेड करना बहुत आसान है, अक्सर मेरे कोड को लपेटते हैं और उन्हें R के अंदर चलाते हैं - फिर यह मापदंडों को पास करने के लिए अच्छा है, लाइव विज़ुअलाइज़ेशन करें और स्पष्ट रूप से आउटपुट फ़ाइल प्रारूप के बारे में सोचे बिना परिणामों का विश्लेषण करें।

अच्छे से कहा; MC को अंततः C / C ++ में जाने के लिए एक की आवश्यकता होगी। मुझे टिप्पणी करने के लिए R में पर्याप्त अनुभव नहीं है, लेकिन साझा वस्तु पुस्तकालयों (लिनक्स के तहत) के विभिन्न संस्करणों के कारण Matlab के साथ C / C ++ का उपयोग करते हुए कई सिरदर्द हुए हैं, जो मैं लिंक करना चाहता हूं, उसकी तुलना में Matlab द्वारा निष्पादित किया जा रहा है मेरा कोड।
shabbychef

tibbits: जब आप ओपन का उपयोग करते हुए आरएन कैसे उत्पन्न करते हैं?
csgillespie

अभी, मैं नहीं हूं। मेरे MCMC एल्गोरिदम के सबसे महंगे हिस्से कई संभावना की गणना कर रहे हैं, इसलिए मैं उन्हें यथासंभव एक साथ गुच्छा और समानांतर में उनकी गणना करने की कोशिश करता हूं। लेकिन सभी सेटअप, आरएन पीढ़ी (प्रस्तावों के लिए), एक ही सीपीयू कोर पर किए जाते हैं। समानांतर RNGs के लिए, मैं Mersenne Twister के लिए DC के साथ शुरू करूँगा - लेकिन मैंने व्यक्तिगत रूप से इसे GPU के लिए एक तुच्छ अनुवाद से परे उपयोग नहीं किया है (वास्तव में एक अभ्यास के रूप में)।
एम। टिबबिट्स

15

सच कहूं, तो मुझे लगता है कि आप आर बनाम ... के बारे में यहां कोई भी सवाल पूछेंगे, आर के प्रति पूर्वाग्रह होगा। याद रखें कि आर अब तक का सबसे अधिक इस्तेमाल किया जाने वाला टैग है !

मैं क्या करूं

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

मुझे यह उल्लेख करना चाहिए कि मेरे आवेदन बहुत कम्प्यूटेशनल रूप से गहन हैं।

सिफ़ारिश करना

पूरी तरह से ईमानदार होने के लिए, यह वास्तव में वास्तव में आप क्या करना चाहते हैं पर निर्भर करता है। इसलिए मैं इस प्रश्न पर आपके उत्तर को आपके प्रश्न के आधार पर दे रहा हूं।

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

मुझे लगता है कि यह समस्या आदर्श रूप से आर में प्रोटोटाइपिंग के लिए अनुकूल होगी और सी का उपयोग करते समय (या किसी अन्य संकलित भाषा) की आवश्यकता होगी।

यह कहने पर कि आम तौर पर मोंटे-कार्लो / संवेदनशीलता विश्लेषण में विशेष रूप से उन्नत सांख्यिकीय दिनचर्या शामिल नहीं है - बेशक इसे अन्य उन्नत कार्यक्षमता की आवश्यकता हो सकती है। इसलिए मुझे लगता है कि (अधिक जानकारी के बिना) आप कर सकते हैं किसी भी भाषा में अपना विश्लेषण हैं, लेकिन पूरी तरह से पक्षपाती होने के नाते, मैं आर की सिफारिश करूंगा!


4
मुझे यह पसंद है कि "मेरे वर्तमान कामकाजी अभ्यास को आर को प्रोटोटाइप का उपयोग करना और सी का उपयोग करना है जब मुझे गति को अतिरिक्त बढ़ावा देने की आवश्यकता होती है।" - यह मेरे गरीब अयोग्य स्वयं के नौकरी विवरण और अगले कार्यालय में सी ++ डेवलपर्स की तरह लगता है ... और मुझे लगता है कि यह वास्तव में आर, सी / सी ++ और सांख्यिकीय गणना में एक मुद्दे से जुड़े किसी भी स्थिति को पकड़ता है ।
Stephan Kolassa

9

यद्यपि मैं लगभग विशेष रूप से उपयोग Rकरता हूं, मैं वास्तव में प्रोफाइलर की प्रशंसा करता हूं Matlab
जब आपका कार्यक्रम एक प्रकार का धीमा होता है तो आप सामान्य रूप से जानना चाहते हैं कि अड़चन कहां है। इसे प्राप्त करने के लिए मतलाब का प्रोफाइलर एक महान उपकरण है क्योंकि यह आपको बताता है कि कोड की प्रत्येक पंक्ति पर कितना समय व्यतीत होता है।

कम से कम मेरे लिए, का उपयोग Rprofकरना अतुलनीय रूप से बदतर है। मैं यह पता नहीं लगा सकता कि कौन सी कॉल अड़चन है। उपयोग करने से Rprofआपको यह जानकारी नहीं मिलती है कि प्रत्येक पंक्ति पर कितना समय खर्च होता है, लेकिन प्रत्येक आदिम फ़ंक्शन (या तो) पर कितना समय व्यतीत होता है। हालाँकि, एक ही आदिम कार्यों को बहुत सारे विभिन्न कार्यों द्वारा बुलाया जाता है।

हालांकि मैं सलाह देता हूं R(क्योंकि यह बहुत अच्छा है: नि: शुल्क, अत्यंत शक्तिशाली, ...) अगर आपको पता है कि आपको अपने कोड को बहुत अधिक प्रोफ़ाइल करना है, तो मैटलैब बेहतर है। और निष्पक्ष होने के लिए, मतलाब में (हालांकि, बेहद क़ीमती) मल्टीकोर और समानांतर कंप्यूटिंग टूलबॉक्स हैं।


4
मैं @ हेनरिक से पूरी तरह सहमत हूं। यदि आप प्रोफाइलिंग के बारे में चिंतित हैं, तो Matlab के पास एक उत्कृष्ट प्रोफाइलिंग टूल है (यहां तक ​​कि संस्करण 7.1 में भी वापस !!)। वांछित होने के लिए दूसरे पर निर्भरता बहुत कुछ छोड़ देती है। मैं प्रत्येक कमांड को लूप के लिए कई बार निष्पादित करके और system.timeविभिन्न संस्करणों के बीच अंतर की तुलना करके प्रोफाइलिंग को समाप्त करता हूं । यहाँ एक दिलचस्प मामला अध्ययन है
एम। टिबबिट्स

2

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


2

मेरी राय में, मतलाब एक बदसूरत भाषा है। शायद यह अब तक अपने मूल में डिफ़ॉल्ट तर्क और नामांकित तर्क दिए गए हैं, लेकिन कई उदाहरण आपको ऑनलाइन मिलते हैं "यदि 6 तर्क हैं, तो यह है, और यदि 5 तर्क हैं तो यह और ..." और नामित तर्क बस हैं वैक्टर के साथ बारी-बारी से तार (नाम) और मान। यह इतना 1970 है कि मैं बस इसका इस्तेमाल नहीं कर सकता।

आर के पास इसके मुद्दे हो सकते हैं, और यह भी पुराना है, लेकिन यह एक नींव (योजना / लिस्प) पर बनाया गया था जो कि आगे की ओर देख रहा था और तुलना में अच्छी तरह से आयोजित किया गया था।

अगर आपने लूप्स आदि के साथ कोड करना पसंद किया है, तो मतलाब बहुत तेज है और इसमें डिबगिंग की बेहतर सुविधा है। और अधिक इंटरैक्टिव ग्राफिक्स। दूसरी ओर, आपके कोड / पुस्तकालयों के दस्तावेजीकरण के लिए जो बीतता है, वह R की तुलना में हंसी का पात्र होता है और आप Matlab का उपयोग करने के लिए एक अच्छा पैसा देते हैं।

सभी आई.एम.ओ.

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.