Làm thế nào để tăng khả năng tái sản xuất dài hạn của nghiên cứu (đặc biệt là sử dụng R và Sweave)


31

Bối cảnh: Trả lời câu hỏi trước đó về nghiên cứu tái sản xuất Jake đã viết

Một vấn đề chúng tôi phát hiện ra khi tạo kho lưu trữ JASA của chúng tôi là các phiên bản và mặc định của các gói CRAN đã thay đổi. Vì vậy, trong kho lưu trữ đó, chúng tôi cũng bao gồm các phiên bản của các gói mà chúng tôi đã sử dụng. Hệ thống dựa trên họa tiết có thể sẽ bị hỏng khi mọi người thay đổi gói của họ (không chắc chắn làm thế nào để bao gồm các gói bổ sung trong gói đó là Compendium).

Cuối cùng, tôi tự hỏi phải làm gì khi bản thân R thay đổi. Có cách nào để sản xuất một máy ảo tái tạo toàn bộ môi trường tính toán được sử dụng cho một tờ giấy sao cho máy ảo không lớn?

Câu hỏi:

  • Các chiến lược tốt để đảm bảo rằng phân tích dữ liệu có thể tái tạo là có thể tái tạo trong tương lai (giả sử, năm, mười hoặc hai mươi năm sau khi xuất bản)?
  • Cụ thể, các chiến lược tốt để tối đa hóa khả năng tái tạo liên tục khi sử dụng Sweave và R là gì?

Điều này dường như có liên quan đến vấn đề đảm bảo rằng một dự án phân tích dữ liệu có thể tái tạo sẽ chạy trên máy của người khác với các mặc định, gói, v.v.


Bạn đã xem xét Thử nghiệm đơn vị với RUnit để xác minh hành vi lý thuyết chưa?

Câu trả lời:


18

Ở một mức độ nào đó, điều này trở nên không thể. Hãy xem xét trường hợp của lỗi điểm nổi Pentium nổi tiếng: bạn không chỉ cần bảo tồn mô hình, dữ liệu, tham số, gói của bạn, tất cả các gói bên ngoài, hệ thống máy chủ hoặc ngôn ngữ (giả sử, R) cũng như HĐH .. cộng với khả năng phần cứng tất cả chạy trên. Bây giờ hãy xem xét rằng một số kết quả có thể dựa trên mô phỏng và yêu cầu một cụm máy cụ thể ...

Đó chỉ là một chút cho thực tế.

Như đã nói, tôi nghĩ các giải pháp thực tế hơn về phiên bản mã của bạn (và có thể cả dữ liệu của bạn) trong kiểm soát sửa đổi, lưu trữ các phiên bản của tất cả các phần mềm có liên quan và có thể sao chép kết quả bằng cách chạy một tập lệnh cấp cao nhất có thể là một " đủ tốt "thỏa hiệp.

Số dặm của bạn có thể thay đổi. Điều này cũng khác nhau giữa các ngành hoặc ngành. Nhưng hãy nhớ những điều cũ đã thấy về sự bất khả thi của các hệ thống hoàn hảo: bạn chỉ tạo ra những kẻ ngốc thông minh hơn.


1
(+1) Tôi chỉ có thể đồng ý với bạn. Về R cụ thể, có vẻ rất khó để đảm bảo rằng (a) một số tính toán sẽ vẫn có thể sao chép được sau khi cập nhật gói (xảy ra với tôi gần đây) và (b) không có xung đột với phụ thuộc sẽ xuất hiện vào một ngày nào đó (ví dụ: cho lme4).
chl

13

Bước đầu tiên trong khả năng tái tạo là đảm bảo dữ liệu ở định dạng dễ đọc cho các nhà nghiên cứu trong tương lai. Các tập tin phẳng là sự lựa chọn rõ ràng ở đây (Fairbairn trên báo chí).

Để làm cho mã trở nên hữu ích trong thời gian dài, có lẽ điều tốt nhất cần làm là viết tài liệu rõ ràng giải thích cả mã làm gì và cách thức hoạt động, để nếu chuỗi công cụ của bạn biến mất, phân tích của bạn có thể được thực hiện lại trong một số hệ thống trong tương lai .


1
Đồng ý, dữ liệu vững chắc và siêu dữ liệu đầu tiên.
mindless.panda

11

Một chiến lược liên quan đến việc sử dụng cachergói.

  • Bành RD, Eckel SP (2009). "Nghiên cứu có thể tái tạo phân tán bằng cách sử dụng các tính toán được lưu trong bộ nhớ cache", Điện toán của IEEE về Khoa học và Kỹ thuật, 11 (1), 28 cạn34. ( PDF trực tuyến )
  • xem thêm các bài viết trên trang web của Roger Peng

Thảo luận thêm và các ví dụ có thể được tìm thấy trong cuốn sách:

Tuy nhiên, tôi không có kinh nghiệm đầu tiên về hiệu quả của nó trong việc đảm bảo khả năng tái sản xuất liên tục.


7

Nếu bạn quan tâm đến tuyến máy ảo, tôi nghĩ rằng nó có thể thực hiện được thông qua một bản phân phối linux nhỏ với phiên bản cụ thể của R và các gói được cài đặt. Dữ liệu được bao gồm, cùng với các tập lệnh và đóng gói toàn bộ trong một tệp hộp ảo .

Điều này không khắc phục được các vấn đề phần cứng được đề cập trước đó như lỗi CPU Intel.


4

Tôi sẽ đề nghị hai điều ngoài những câu trả lời xuất sắc đã có;

  • Tại các điểm chính trong mã của bạn, loại bỏ dữ liệu hiện tại dưới dạng tệp phẳng, được đặt tên và mô tả phù hợp trong các nhận xét, do đó, nhấn mạnh nếu một gói đã tạo ra các kết quả khác nhau trong đó các khác biệt đã được đưa ra. Các tệp dữ liệu này, cũng như đầu vào ban đầu và đầu ra kết quả phải được bao gồm trong 'bộ nghiên cứu có thể tái tạo' của bạn

  • Bao gồm một số thử nghiệm các gói liên quan trong mã của bạn, ví dụ như sử dụng cái gì đó như TestThat . Phần khó là thực hiện các thử nghiệm nhỏ, có thể lặp lại có khả năng làm nổi bật bất kỳ thay đổi nào trong gói mà liên quan đến phân tích của bạn. Điều này ít nhất sẽ làm nổi bật với một người khác rằng có một số khác biệt trong môi trường.


1

Đề xuất tốt, tôi có rất nhiều điều để xem xét bây giờ.

Hãy nhớ rằng, một cân nhắc cực kỳ quan trọng là đảm bảo rằng tác phẩm là "chính xác" ngay từ đầu. Đây là vai trò mà các công cụ như Sweave đóng, bằng cách tăng cơ hội những gì bạn đã làm và những gì bạn nói bạn đã làm, là điều tương tự.


1
Dự án Sumatra cũng là một dự án có thể giúp ích: neuralensemble.org/trac/sumatra/wiki . Bạn có thể sử dụng giao diện dòng lệnh của nó để chạy mã của mình, ở dạng R hoặc một cái gì đó khác. Có một API Python cho nó quá. Có một bài đăng blog rất hay trên các blogger R thảo luận về các công cụ R-centric cho nghiên cứu tái tạo, và nó cũng đề cập đến việc sử dụng Sumatra. r-bloggers.com/managing-a-statistic-analysis-project- Từ-hướng dẫn-và-thực hành tốt nhất /
Josh Hemann
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.