Cara meningkatkan reproduksibilitas penelitian jangka panjang (terutama menggunakan R dan Sweave)

31

Konteks: Menanggapi pertanyaan sebelumnya tentang penelitian yang dapat direproduksi, Jake menulis

Satu masalah yang kami temukan saat membuat arsip JASA kami adalah bahwa versi dan standar paket CRAN berubah. Jadi, dalam arsip itu, kami juga menyertakan versi paket yang kami gunakan. Sistem berbasis sketsa mungkin akan rusak ketika orang mengubah paket mereka (tidak yakin bagaimana memasukkan paket tambahan dalam paket yang merupakan Kompendium).

Akhirnya, saya bertanya-tanya tentang apa yang harus dilakukan ketika R itu sendiri berubah. Adakah cara untuk menghasilkan, katakanlah, mesin virtual yang mereproduksi seluruh lingkungan komputasi yang digunakan untuk kertas sehingga mesin virtual itu tidak besar?

Pertanyaan:

  • Apa strategi yang baik untuk memastikan bahwa analisis data yang dapat direproduksi dapat direproduksi di masa mendatang (katakanlah, lima, sepuluh, atau dua puluh tahun setelah publikasi)?
  • Secara khusus, apa strategi yang baik untuk memaksimalkan reproduktifitas berkelanjutan saat menggunakan Sweave dan R?

Ini tampaknya terkait dengan masalah memastikan bahwa proyek analisis data yang dapat direproduksi akan berjalan pada mesin orang lain dengan standar, paket, dan lain-lain yang sedikit berbeda.

Jeromy Anglim
sumber
Sudahkah Anda mempertimbangkan Pengujian Unit dengan RUnit untuk memverifikasi perilaku teoretis?

Jawaban:

18

Pada tingkat tertentu, ini menjadi tidak mungkin. Pertimbangkan kasus bug floating point Pentium yang terkenal: Anda tidak hanya perlu menghemat model, data, parameter Anda, paket Anda, semua paket eksternal, sistem host atau bahasa (katakanlah, R) serta OS .. plus potensi perangkat kerasnya. Sekarang perhatikan bahwa beberapa hasil mungkin berbasis simulasi dan diperlukan sekelompok mesin tertentu ...

Itu sedikit banyak untuk menjadi praktis.

Dengan itu, saya pikir lebih banyak solusi pragmatis dari versi kode Anda (dan mungkin juga data Anda) dalam kontrol revisi, menyimpan versi semua perangkat lunak yang relevan dan memungkinkan untuk mereproduksi hasil dengan menjalankan satu skrip tingkat atas mungkin merupakan " kompromi yang cukup baik.

Jarak tempuh Anda mungkin beragam. Ini juga berbeda lintas disiplin atau industri. Tapi ingat yang lama melihat tentang ketidakmungkinan sistem yang sangat mudah: Anda hanya menciptakan orang yang lebih pintar.

Dirk Eddelbuettel
sumber
1
(+1) Saya hanya bisa setuju dengan Anda. Tentang R secara khusus, tampaknya sangat sulit untuk memastikan bahwa (a) beberapa perhitungan akan tetap dapat direproduksi setelah memperbarui paket (yang terjadi pada saya baru-baru ini), dan (b) tidak ada konflik dengan dependensi yang akan muncul satu hari (itu adalah kasus misalnya, untuk lme4).
chl
13

Langkah pertama dalam reproduksibilitas adalah memastikan data berada dalam format yang mudah dibaca oleh para peneliti di masa depan. File flat adalah pilihan yang jelas di sini (Fairbairn in press).

Untuk membuat kode bermanfaat dalam jangka panjang, mungkin hal terbaik untuk dilakukan adalah menulis dokumentasi yang jelas yang menjelaskan apa yang dilakukan kode dan juga cara kerjanya, sehingga jika rantai alat Anda hilang, analisis Anda dapat diterapkan kembali di beberapa sistem di masa mendatang. .

M Adams
sumber
1
Setuju, data dan metadata solid terlebih dahulu.
mindless.panda
11

Satu strategi melibatkan penggunaan cacherpaket.

  • Peng RD, Eckel SP (2009). "Penelitian terdistribusi yang dapat direproduksi menggunakan perhitungan cache," IEEE Computing in Science and Engineering, 11 (1), 28-34. ( PDF online )
  • juga melihat lebih banyak artikel di situs web Roger Peng

Diskusi dan contoh lebih lanjut dapat ditemukan dalam buku:

Namun, saya tidak memiliki pengalaman langsung tentang keefektifannya dalam memastikan reproduktifitas berkelanjutan.

Jeromy Anglim
sumber
7

Jika Anda tertarik dengan rute mesin virtual, saya pikir itu akan bisa dilakukan melalui distribusi linux kecil dengan versi spesifik R dan paket yang diinstal. Data disertakan, bersama dengan skrip, dan paket semuanya dalam file kotak virtual .

Ini tidak mengatasi masalah perangkat keras yang disebutkan sebelumnya seperti bug CPU Intel.

mindless.panda
sumber
4

Saya akan merekomendasikan dua hal selain jawaban yang sudah ada;

  • Pada poin-poin penting dalam kode Anda, buang data saat ini sebagai file datar, sesuai namanya dan dijelaskan dalam komentar, sehingga menyoroti jika satu paket telah menghasilkan hasil yang berbeda di mana perbedaan telah diperkenalkan. File data ini, serta input asli dan output yang dihasilkan harus dimasukkan dalam 'set penelitian yang dapat direproduksi' Anda

  • Sertakan beberapa pengujian paket yang bersangkutan dalam kode Anda, misalnya menggunakan sesuatu seperti TestThat . Bagian yang sulit adalah membuat tes kecil yang dapat direproduksi yang cenderung menyoroti setiap perubahan dalam apa yang dilakukan paket yang terkait dengan analisis Anda. Setidaknya ini akan menyoroti kepada orang lain bahwa ada beberapa perbedaan dalam lingkungan.

PaulHurleyuk
sumber
1

Saran bagus, saya punya banyak hal untuk dilihat sekarang.

Ingat, satu pertimbangan yang sangat penting adalah memastikan bahwa pekerjaan itu "benar" sejak awal. Ini adalah peran yang dimainkan oleh alat-alat seperti Sweave , dengan meningkatkan peluang bahwa apa yang Anda lakukan, dan apa yang Anda katakan Anda lakukan, adalah hal yang sama.

Ken Williams
sumber
1
Proyek Sumatra adalah salah satu yang mungkin juga membantu: neuralensemble.org/trac/sumatra/wiki . Anda dapat menggunakan antarmuka baris perintah untuk menjalankan kode Anda, berada di R atau sesuatu yang lain. Ada API Python untuk itu juga. Ada posting blog yang bagus tentang R-blogger yang membahas alat R-centric untuk penelitian yang dapat direproduksi, dan itu menyebutkan menggunakan Sumatra juga. r-bloggers.com/managing-a-statistic-analysis-project- –-guidelines-and-best-practices /
Josh Hemann