Як збільшити довгострокову відтворюваність досліджень (особливо з використанням R та Sweave)


31

Контекст: У відповідь на попереднє запитання про відтворювані дослідження Джейк писав

Однією з проблем, які ми виявили під час створення нашого архіву JASA, було те, що змінилися версії та типові параметри CRAN-пакетів. Отже, в цей архів ми також включаємо версії пакетів, які ми використовували. Система, що базується на віньєтці, ймовірно, зламається, коли люди змінюють свої пакети (не впевнені, як включити додаткові пакети до пакету, який є Компендіумом).

Нарешті, мені цікаво, що робити, коли змінюється сам R. Чи існують способи виготовлення, скажімо, віртуальної машини, яка відтворює все обчислювальне середовище, що використовується для паперу, таким чином, щоб віртуальна машина не була величезною?

Питання:

  • Які хороші стратегії для забезпечення відтворення аналізу даних, які можна відтворити в майбутньому (скажімо, через п’ять, десять чи двадцять років після публікації)?
  • Зокрема, які хороші стратегії для досягнення максимальної тривалості відтворюваності під час використання Sweave та R?

Це, мабуть, пов’язане з проблемою забезпечення того, щоб проект аналізу даних, що відтворюється, запускався на чужому апараті з дещо іншими за замовчуванням, пакетами тощо.


Чи розглядаєте Ви тестування з RUnit для перевірки теоретичної поведінки?

Відповіді:


18

На якомусь рівні це стає неможливим. Розглянемо випадок знаменитої помилки Pentium з плаваючою точкою: вам потрібно не тільки зберігати свої моделі, свої дані, параметри, ваші пакунки, всі зовнішні пакети, хост-систему чи мову (скажімо, R), а також ОС. плюс додатково обладнання, на якому все працювало. Тепер розглянемо, що деякі результати можуть бути засновані на моделюванні та потребують певної групи машин ...

Це просто трохи для того, щоб бути практичним.

Зважаючи на це, я думаю, що більш прагматичні рішення щодо версії вашого коду (а може бути, і ваших даних) у контролі редагувань, зберіганні версій усього відповідного програмного забезпечення та дозволяють відтворити результати за допомогою єдиного сценарію верхнього рівня " досить хороший "компроміс.

Ваш пробіг може відрізнятися. Це також відрізняється в різних галузях та галузях. Але пам’ятайте старе бачення про неможливість безпроблемних систем: ви просто створюєте розумніших дурнів.


1
(+1) Я можу погодитися лише з вами. Що стосується конкретно R, здається, дуже важко забезпечити, що (a) деякі обчислення залишаться відтвореними після оновлення пакету (що трапляється зі мною недавно), і (b) одного дня не виникне конфлікт із залежностями (це було, наприклад, для lme4).
chl

13

Першим кроком у відтворюваності є переконання, що дані у форматі, який легко читати майбутнім дослідникам. Тут виразний вибір плоских файлів (Fairbairn in press).

Щоб зробити код корисним у довгостроковій перспективі, мабуть, найкраще це написати чітку документацію, яка пояснює і те, що робить код, і як він працює, так що якщо ланцюг інструментів зникне, ваш аналіз може бути повторно доповнений у будь-якій майбутній системі .


1
Перше узгоджено, суцільні дані та метадані.
mindless.panda

11

Одна стратегія передбачає використання cacherпакету.

  • Peng RD, Eckel SP (2009). "Розподілені відтворювані дослідження з використанням кешованих обчислень", IEEE Computing in Science and Engineering, 11 (1), 28–34. ( PDF онлайн )
  • дивіться також інші статті на веб-сайті Роджера Пенга

Подальше обговорення та приклади можна знайти в книзі:

Однак у мене немає досвіду його ефективності щодо забезпечення постійної відтворюваності.


7

Якщо вас цікавить маршрут віртуальної машини, я думаю, що це було б можливим через невеликий дистрибутив Linux з встановленою конкретною версією R та пакетами. Дані включаються разом із сценаріями та пакують все у віртуальний файл вікна .

Це не дозволяє вирішити згадані раніше проблеми з обладнанням, такі як помилка процесора Intel.


4

Я б рекомендував дві речі, крім відмінних відповідей, які вже є;

  • У ключових моментах вашого коду скидайте поточні дані у вигляді плоского файлу, відповідного імені та опису в коментарях, таким чином підкреслюючи, чи один пакет дав різні результати там, де були введені відмінності. Ці файли даних, а також оригінальний вхід та отриманий результат повинні бути включені до вашого "набору відтворюваних досліджень"

  • Включіть тестування відповідних пакетів у свій код, наприклад, використовуючи щось на зразок TestThat . Важка частина - це зробити невеликі, відтворювані тести, які, ймовірно, висвітлюють будь-які зміни в тому, що робиться в пакеті, що стосується вашого аналізу. Це хоча б підкреслить іншій людині, що є певна різниця в оточенні.


1

Хороші пропозиції. Зараз у мене є багато цікавого.

Пам'ятайте, одне надзвичайно важливе враження - це переконання, що робота в першу чергу "правильна". Це та роль, яку відіграють такі інструменти, як Sweave , збільшуючи шанси на те, що те, що ти зробив, і те, що ти сказав, що робиш, - те саме.


1
Проект «Суматра» також може допомогти: neuralensemble.org/trac/sumatra/wiki . Ви можете використовувати його інтерфейс командного рядка, щоб запустити код, бути в R або щось інше. Для цього є також API Python. Є приємна публікація в блозі, де R-блогери обговорюють R-орієнтовані інструменти для відтворюваного дослідження, і в ньому також згадується використання Суматри. r-bloggers.com/managing-a-statistic-analysis-project- –-gidelines-and-best-практики /
Джош Хеманн
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.