Как повысить долгосрочную воспроизводимость исследований (особенно с использованием R и Sweave)

31

Контекст: в ответ на предыдущий вопрос о воспроизводимых исследованиях Джейк написал

Одна проблема, которую мы обнаружили при создании нашего архива JASA, заключалась в том, что версии и значения по умолчанию пакетов CRAN изменились. Итак, в этот архив мы также включили версии пакетов, которые мы использовали. Система, основанная на виньетировании, вероятно, сломается, поскольку люди меняют свои пакеты (не уверен, как включить дополнительные пакеты в пакет, который является Компендиумом).

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

Вопрос:

  • Каковы хорошие стратегии для обеспечения воспроизводимого анализа данных в будущем (скажем, через пять, десять или двадцать лет после публикации)?
  • В частности, каковы хорошие стратегии для максимизации текущей воспроизводимости при использовании Sweave и R?

Похоже, это связано с вопросом о том, что проект анализа воспроизводимых данных будет работать на чужой машине с немного другими настройками по умолчанию, пакетами и т. Д.

Джером англим
источник
Рассматривали ли вы модульное тестирование с RUnit для проверки теоретического поведения?

Ответы:

18

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

Это очень много для практичности.

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

Ваш пробег может варьироваться. Это также отличается в зависимости от дисциплины или отрасли. Но помните старую мысль о невозможности надежных систем: вы просто создаете более умных дураков.

Дирк Эддельбюттель
источник
1
(+1) Я могу только согласиться с вами. Что касается R, в частности, кажется очень трудным гарантировать, что (a) некоторые вычисления останутся воспроизводимыми после обновления пакета (что происходит со мной недавно), и (b) никакой конфликт с зависимостями не возникнет однажды (это имело место, например, для lme4).
ЧЛ
13

Первым шагом в воспроизводимости является обеспечение того, чтобы данные были в формате, который легко читается будущими исследователями. Плоские файлы - очевидный выбор (Фэйрберн в прессе).

Чтобы сделать код полезным в долгосрочной перспективе, возможно, лучше всего написать ясную документацию, которая объясняет, как работает код, а также как он работает, так что если ваша цепочка инструментов исчезнет, ​​ваш анализ может быть повторно реализован в какой-то будущей системе ,

М Адамс
источник
1
Согласованные, надежные данные и метаданные в первую очередь.
mindless.panda
11

Одна стратегия предполагает использование cacherпакета.

  • Пэн Р.Д., Экель С.П. (2009). «Распределенные воспроизводимые исследования с использованием кэшированных вычислений», IEEE Computing in Science and Engineering, 11 (1), 28–34. ( PDF онлайн )
  • также увидеть больше статей на сайте Роджера Пенга

Дальнейшее обсуждение и примеры можно найти в книге:

Тем не менее, у меня нет непосредственного опыта его эффективности в обеспечении непрерывной воспроизводимости.

Джером англим
источник
7

Если вы заинтересованы в маршруте виртуальной машины, я думаю, что это можно сделать с помощью небольшого дистрибутива linux с конкретной версией R и установленными пакетами. Данные включены вместе со сценариями и упаковывают все это в файл виртуальной коробки .

Это не позволяет обойти упомянутые ранее проблемы с оборудованием, такие как ошибка процессора Intel.

mindless.panda
источник
4

Я рекомендовал бы две вещи в дополнение к превосходным ответам, уже присутствующим;

  • В ключевых точках вашего кода выгрузите текущие данные в виде плоского файла с соответствующим именем и описанием в комментариях, таким образом выделяя, если один пакет дал отличающиеся результаты там, где были введены различия. Эти файлы данных, а также исходные данные и полученные результаты должны быть включены в ваш «воспроизводимый набор исследований»

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

PaulHurleyuk
источник
1

Хорошие предложения, у меня есть много вещей, чтобы посмотреть сейчас.

Помните, что одним из чрезвычайно важных соображений является обеспечение того, чтобы работа была «правильной» в первую очередь. Именно эту роль играют такие инструменты, как Sweave , увеличивая вероятность того, что то, что вы сделали, и то, что вы сказали, что сделали, - это одно и то же.

Кен Уильямс
источник
1
Проект Суматра тоже может помочь: neuralensemble.org/trac/sumatra/wiki . Вы можете использовать его интерфейс командной строки для запуска вашего кода, быть в R или что-то еще. Существует также Python API. Есть хорошая запись в блоге о блогерах R, в которой обсуждаются R-ориентированные инструменты для воспроизводимых исследований, а также упоминается использование Суматры. r-bloggers.com/managing-a-statistical-analysis-project- –- Guidelines-and-Best-Practices /
Джош Хеманн