วิธีเพิ่มความสามารถในการทำซ้ำในระยะยาวของการวิจัย (โดยเฉพาะการใช้ R และ Sweave)


31

บริบท: เพื่อตอบคำถามก่อนหน้าเกี่ยวกับการวิจัยที่ทำซ้ำได้Jake เขียน

ปัญหาหนึ่งที่เราค้นพบเมื่อสร้าง JASA archive ของเราคือเวอร์ชันและค่าเริ่มต้นของแพ็คเกจ CRAN เปลี่ยนไป ดังนั้นในที่เก็บถาวรนั้นเรายังรวมรุ่นของแพ็คเกจที่เราใช้ ระบบที่ใช้ vignette อาจจะแตกเป็นเสี่ยง ๆ เมื่อคนเปลี่ยนแพ็คเกจของพวกเขา (ไม่แน่ใจว่าจะรวมแพ็คเกจเพิ่มเติมภายในแพ็คเกจที่เป็น Compendium) ได้อย่างไร

ในที่สุดฉันสงสัยว่าจะทำอย่างไรเมื่อตัว R เปลี่ยนไป มีวิธีการผลิตพูดว่าเครื่องเสมือนจริงที่สร้างสภาพแวดล้อมการคำนวณทั้งหมดที่ใช้สำหรับกระดาษเช่นที่เครื่องเสมือนไม่ใหญ่หลวงหรือไม่?

คำถาม:

  • กลยุทธ์ที่ดีในการสร้างความมั่นใจว่าการวิเคราะห์ข้อมูลที่ทำซ้ำได้นั้นสามารถทำซ้ำได้ในอนาคต (เช่นห้าสิบหรือยี่สิบปีหลังจากการตีพิมพ์)?
  • อะไรคือกลยุทธ์ที่ดีในการเพิ่มความสามารถในการทำซ้ำอย่างต่อเนื่องเมื่อใช้ Sweave และ R

ดูเหมือนว่าจะเกี่ยวข้องกับปัญหาของการทำให้มั่นใจว่าโครงการการวิเคราะห์ข้อมูลที่ทำซ้ำได้จะทำงานในเครื่องของผู้อื่นที่มีค่าเริ่มต้นแพ็คเกจที่แตกต่างกันเล็กน้อย ฯลฯ


คุณได้พิจารณาการทดสอบหน่วยด้วย RUnit เพื่อตรวจสอบพฤติกรรมทางทฤษฎีหรือไม่

คำตอบ:


18

ในบางระดับสิ่งนี้เป็นไปไม่ได้ พิจารณากรณีของข้อผิดพลาด Pentium floating point ที่มีชื่อเสียง: คุณไม่เพียง แต่ต้องอนุรักษ์โมเดลของคุณข้อมูลพารามิเตอร์แพ็คเกจของคุณแพ็กเกจภายนอกแพ็คเกจทั้งหมดระบบโฮสต์หรือภาษา (พูด R) และระบบปฏิบัติการ .. . รวมทั้งอาจเป็นไปได้ที่ฮาร์ดแวร์ทั้งหมดจะทำงาน ตอนนี้ให้พิจารณาว่าผลลัพธ์บางอย่างอาจเป็นแบบจำลองและจำเป็นต้องมีคลัสเตอร์ของเครื่อง ...

นั่นเป็นเพียงเล็กน้อยสำหรับการปฏิบัติ

จากที่กล่าวมาฉันคิดว่าโซลูชันที่เป็นประโยชน์มากขึ้นของการกำหนดเวอร์ชันโค้ดของคุณ (และอาจรวมถึงข้อมูลของคุณ) ในการควบคุมแก้ไขจัดเก็บเวอร์ชันของซอฟต์แวร์ที่เกี่ยวข้องทั้งหมดและทำให้สามารถทำซ้ำผลลัพธ์ได้โดยใช้สคริปต์ระดับสูง ดีพอ "ประนีประนอม

ไมล์สะสมของคุณอาจแตกต่างกันไป สิ่งนี้ยังแตกต่างกันในสาขาวิชาหรืออุตสาหกรรม แต่จำไว้ว่าคนชราเห็นเกี่ยวกับความเป็นไปไม่ได้ของระบบที่จะเข้าใจผิดได้: คุณแค่สร้างคนโง่ขึ้น


1
(+1) ฉันเห็นด้วยกับคุณเท่านั้น โดยเฉพาะเกี่ยวกับอาร์ดูเหมือนว่ายากมากที่จะทำให้แน่ใจว่า (a) การคำนวณบางอย่างจะยังคงทำซ้ำได้หลังจากอัปเดตแพคเกจ (ซึ่งเกิดขึ้นกับฉันเมื่อเร็ว ๆ นี้) และ (b) ไม่มีความขัดแย้งกับการพึ่งพาอาศัย สำหรับlme4)
chl

13

ขั้นตอนแรกในการทำซ้ำคือการทำให้แน่ใจว่าข้อมูลอยู่ในรูปแบบที่ง่ายสำหรับนักวิจัยในอนาคตที่จะอ่าน ไฟล์แบนเป็นตัวเลือกที่ชัดเจนที่นี่ (Fairbairn ในการกด)

เพื่อให้โค้ดมีประโยชน์ในระยะยาวอาจเป็นสิ่งที่ดีที่สุดที่ต้องทำคือเขียนเอกสารที่ชัดเจนซึ่งอธิบายถึงสิ่งที่โค้ดทำและวิธีการทำงานเพื่อที่ว่าหากห่วงโซ่เครื่องมือของคุณหายไปการวิเคราะห์ของคุณสามารถนำมาใช้ใหม่ได้ .

  • แฟร์แบร์ (ในข่าว) แอดเวนต์ของการจัดเก็บข้อมูลที่ได้รับคำสั่ง Evolution DOI: 10.1111 / j.1558-5646.2010.01182.x

1
ตกลงข้อมูลที่เป็นของแข็งและเมตาดาต้าก่อน
mindless.panda

11

กลยุทธ์หนึ่งเกี่ยวข้องกับการใช้cacherแพคเกจ

  • Peng RD, Eckel SP (2009) "การวิจัยแบบกระจายซ้ำโดยใช้การคำนวณแบบแคช" การคำนวณ IEEE ทางวิทยาศาสตร์และวิศวกรรม, 11 (1), 28–34 ( PDF ออนไลน์ )
  • ดูบทความเพิ่มเติมใน เว็บไซต์ของ Roger Peng

การสนทนาและตัวอย่างเพิ่มเติมสามารถพบได้ในหนังสือ:

อย่างไรก็ตามฉันไม่มีประสบการณ์โดยตรงเกี่ยวกับประสิทธิภาพในการสร้างความมั่นใจในการทำซ้ำอย่างต่อเนื่อง


7

หากคุณสนใจเส้นทางเครื่องเสมือนฉันคิดว่ามันน่าจะเป็นไปได้ด้วยการแจกจ่าย linux ขนาดเล็กที่มีรุ่น R และแพ็คเกจที่ติดตั้งไว้ มีการรวมข้อมูลพร้อมกับสคริปต์และจัดเก็บข้อมูลทั้งหมดในไฟล์กล่องเสมือน

สิ่งนี้ไม่ได้แก้ไขปัญหาฮาร์ดแวร์ที่กล่าวถึงก่อนหน้านี้เช่นข้อผิดพลาดของ CPU ของ Intel


4

ฉันขอแนะนำสองสิ่งเพิ่มเติมจากคำตอบที่ยอดเยี่ยมที่มีอยู่แล้ว

  • ที่จุดสำคัญในรหัสของคุณให้ทิ้งข้อมูลปัจจุบันเป็นไฟล์แบบแฟลตตั้งชื่ออย่างเหมาะสมและอธิบายไว้ในความคิดเห็นดังนั้นจึงเน้นว่าหากแพ็คเกจหนึ่งมีผลลัพธ์ที่แตกต่างกันซึ่งมีการแนะนำความแตกต่างไว้ ไฟล์ข้อมูลเหล่านี้รวมถึงอินพุตดั้งเดิมและผลลัพธ์ที่ได้ควรรวมอยู่ใน 'ชุดการทำซ้ำการวิจัย' ของคุณ

  • รวมถึงบางส่วนของแพคเกจการทดสอบที่เกี่ยวข้องภายในรหัสของคุณตัวอย่างเช่นใช้สิ่งที่ต้องการTestThat ส่วนที่ยากคือการทดสอบขนาดเล็กที่ทำซ้ำได้ซึ่งมีแนวโน้มที่จะเน้นการเปลี่ยนแปลงใด ๆ ในสิ่งที่แพ็คเกจทำซึ่งเกี่ยวข้องกับการวิเคราะห์ของคุณ อย่างน้อยนี้จะเน้นไปที่บุคคลอื่นที่มีความแตกต่างในสภาพแวดล้อม


1

คำแนะนำที่ดีฉันมีหลายสิ่งหลายอย่างให้ตรวจสอบตอนนี้

โปรดจำไว้ว่าการพิจารณาที่สำคัญอย่างหนึ่งคือการทำให้แน่ใจว่างานนั้น "ถูกต้อง" ตั้งแต่แรก นี่คือบทบาทที่เครื่องมือเช่นเล่นSweaveโดยการเพิ่มโอกาสที่คุณทำและสิ่งที่คุณพูดว่าคุณเป็นสิ่งเดียวกัน


1
โครงการเกาะสุมาตราเป็นสิ่งหนึ่งที่อาจจะช่วยเกินไป: neuralensemble.org/trac/sumatra/wiki คุณสามารถใช้อินเตอร์เฟสบรรทัดคำสั่งเพื่อเรียกใช้โค้ดของคุณเป็น R หรืออย่างอื่น มี Python API อยู่ด้วยเช่นกัน มีการโพสต์บล็อกที่ดีเกี่ยวกับ R-bloggers ที่พูดคุยเกี่ยวกับเครื่องมือ R-centric สำหรับการวิจัยที่ทำซ้ำได้และกล่าวถึงการใช้สุมาตราด้วยเช่นกัน r-bloggers.com/managing-a-statistical-analysis-project- –-guidelines และแนวปฏิบัติที่ดีที่สุด /
Josh Hemann
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.