लंबे समय तक अनुसंधान की प्रतिलिपि प्रस्तुत करने योग्यता में वृद्धि कैसे करें (विशेष रूप से आर और स्वेव का उपयोग करके)


31

संदर्भ: प्रजनन अनुसंधान के बारे में पहले के एक प्रश्न के उत्तर में जेक ने लिखा था

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

अंत में, मुझे आश्चर्य है कि जब आर खुद बदलता है तो मुझे क्या करना है। क्या उत्पादन करने के तरीके हैं, कहते हैं, एक आभासी मशीन जो कागज के लिए उपयोग किए जाने वाले संपूर्ण कम्प्यूटेशनल वातावरण को पुन: पेश करती है जैसे कि वर्चुअल मशीन विशाल नहीं है?

सवाल:

  • यह सुनिश्चित करने के लिए अच्छी रणनीतियाँ हैं कि भविष्य में प्रतिलिपि प्रस्तुत करने योग्य डेटा विश्लेषण प्रतिलिपि प्रस्तुत करने योग्य है (जैसे, प्रकाशन के पांच, दस, या बीस साल बाद)?
  • विशेष रूप से, स्वेव और आर का उपयोग करते समय चल रहे प्रतिलिपि प्रस्तुत करने की क्षमता को अधिकतम करने के लिए अच्छी रणनीति क्या है?

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


क्या आपने सैद्धांतिक व्यवहार को सत्यापित करने के लिए RUnit के साथ यूनिट परीक्षण पर विचार किया है?

जवाबों:


18

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

यह व्यावहारिक होने के लिए बस थोड़ा सा है।

उस के साथ, मुझे लगता है कि संशोधन के नियंत्रण में आपके कोड (और शायद आपके डेटा) के संस्करण के अधिक व्यावहारिक समाधान, सभी प्रासंगिक सॉफ़्टवेयर के संस्करणों को संग्रहीत करना और एकल शीर्ष-स्तरीय स्क्रिप्ट चलाकर परिणामों को पुन: उत्पन्न करना संभव हो सकता है " बहुत अच्छा ”समझौता।

आपकी माइलेज भिन्न हो सकती है। यह भी विषयों या उद्योग में भिन्न होता है। लेकिन मूर्खतापूर्ण प्रणालियों की असंभवता के बारे में देखा गया पुराना याद रखें: आप केवल चालाक मूर्ख बनाते हैं।


1
(+1) मैं केवल आपसे सहमत हो सकता हूं। आर के बारे में विशेष रूप से, यह सुनिश्चित करना बहुत मुश्किल लगता है कि (ए) कुछ गणना पैकेज (जो हाल ही में मेरे साथ होती है) को अपडेट करने के बाद पुन: पेश की जाएगी, और (बी) निर्भरता के साथ कोई संघर्ष एक दिन सामने नहीं आएगा (यह मामला था जैसे, के लिए lme4)।
च्ल

13

प्रतिलिपि प्रस्तुत करने योग्यता में पहला कदम यह सुनिश्चित कर रहा है कि डेटा एक प्रारूप में है जो भविष्य के शोधकर्ताओं के लिए पढ़ना आसान है। यहां फ्लैट फाइलें स्पष्ट पसंद हैं (फेयरबैर्न प्रेस में)।

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


1
सहमत, ठोस डेटा और मेटाडेटा पहले।
नासमझ।पंडा

11

एक रणनीति में cacherपैकेज का उपयोग करना शामिल है ।

  • पेंग आरडी, एकेल एसपी (2009)। आईईईई कम्प्यूटिंग इन साइंस एंड इंजीनियरिंग, 11 (1), 28-34, "कैश्ड कंप्यूटेशन्स का उपयोग करके पुनरुत्पादित शोध वितरित किया गया।" ( पीडीएफ ऑनलाइन )
  • रोजर पेंग की वेबसाइट पर और अधिक लेख देखें

आगे की चर्चा और उदाहरण पुस्तक में मिल सकते हैं:

हालाँकि, मेरे पास पहले से चल रहे प्रजनन को सुनिश्चित करने में इसकी प्रभावशीलता का अनुभव नहीं है।


7

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

यह पहले इंटेल CPU बग जैसे हार्डवेयर समस्याओं के आसपास नहीं मिलता है।


4

मैं पहले से मौजूद उत्कृष्ट उत्तरों के अलावा दो चीजों को फिर से शामिल करूंगा;

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

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


1

अच्छा सुझाव, मुझे अब देखने के लिए बहुत सारी चीजें मिली हैं।

याद रखें, एक अत्यंत महत्वपूर्ण विचार यह सुनिश्चित कर रहा है कि पहली जगह में काम "सही" है। यह भूमिका है कि Sweave जैसे उपकरण खेलते हैं, इस संभावना को बढ़ाकर कि आपने क्या किया, और आपने जो कहा, वही किया।


1
सुमात्रा परियोजना वह है जो मदद की भी हो सकती है: neuralensemble.org/trac/sumatra/wiki । आप अपने कोड को चलाने के लिए कमांड लाइन इंटरफेस का उपयोग कर सकते हैं, आर या कुछ और में हो सकते हैं। इसमें पायथन एपीआई भी है। आर-ब्लॉगर्स पर एक अच्छा ब्लॉग पोस्ट है जिसमें आर्युवेदिक अनुसंधान के लिए आर-केंद्रित उपकरणों पर चर्चा की गई है, और इसमें सुमात्रा का भी उपयोग करने का उल्लेख है। r-bloggers.com/managing-a-statistical-analysis-project- --guidelines और सर्वोत्तम प्रथाओं /
जोश Hemann
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.