Jak zwiększyć długoterminową odtwarzalność badań (szczególnie przy użyciu R i Sweave)

31

Kontekst: W odpowiedzi na wcześniejsze pytanie dotyczące powtarzalnych badań Jake napisał

Jednym z problemów, który odkryliśmy podczas tworzenia naszego archiwum JASA, była zmiana wersji i domyślnych pakietów CRAN. Tak więc w tym archiwum uwzględniamy również wersje używanych pakietów. System oparty na winietach prawdopodobnie się zepsuje, gdy ludzie zmienią swoje paczki (nie jestem pewien, jak dołączyć dodatkowe paczki do paczki, którą jest Kompendium).

Wreszcie zastanawiam się, co robić, gdy zmienia się sam R. Czy istnieją sposoby na stworzenie, powiedzmy, maszyny wirtualnej, która odtwarza całe środowisko obliczeniowe używane na papierze, tak aby maszyna wirtualna nie była ogromna?

Pytanie:

  • Jakie są dobre strategie zapewniające powtarzalność analizy danych w przyszłości (powiedzmy pięć, dziesięć lub dwadzieścia lat po publikacji)?
  • W szczególności, jakie są dobre strategie maksymalizacji bieżącej odtwarzalności przy użyciu Sweave i R?

Wydaje się, że jest to związane z kwestią zapewnienia, że ​​projekt odtwarzalnej analizy danych będzie działał na czyimś komputerze z nieco innymi wartościami domyślnymi, pakietami itp.

Jeromy Anglim
źródło
Czy zastanawiałeś się nad testami jednostkowymi za pomocą RUnit, aby zweryfikować zachowanie teoretyczne?

Odpowiedzi:

18

Na pewnym poziomie staje się to niemożliwe. Rozważ przypadek słynnego błędu zmiennoprzecinkowego Pentium: musisz nie tylko zachować swoje modele, dane, parametry, pakiety, wszystkie pakiety zewnętrzne, system hosta lub język (powiedzmy R), a także system operacyjny. oraz potencjalnie sprzęt, na którym wszystko działało. Rozważmy teraz, że niektóre wyniki mogą być oparte na symulacji i wymagać określonego klastra maszyn ...

To tylko trochę za praktyczność.

Biorąc to pod uwagę, myślę, że bardziej pragmatyczne rozwiązania wersjonowania kodu (a może także danych) w kontroli wersji, przechowywania wersji całego odpowiedniego oprogramowania i umożliwienia odtwarzania wyników poprzez uruchomienie pojedynczego skryptu najwyższego poziomu mogą być „ wystarczająco dobry „kompromis.

Twój przebieg może się różnić. Różni się to również w zależności od dyscypliny lub branży. Ale pamiętajcie starą wersję o niemożliwości niezawodnych systemów: po prostu tworzysz mądrzejszych głupców.

Dirk Eddelbuettel
źródło
1
(+1) Mogę się tylko z tobą zgodzić. Jeśli chodzi o R, bardzo trudno jest zapewnić, aby (a) niektóre obliczenia pozostały odtwarzalne po aktualizacji pakietu (co zdarza mi się ostatnio), oraz (b) pewnego dnia nie wystąpi żaden konflikt z zależnościami (tak było np. dla lme4).
chl
13

Pierwszym krokiem w odtwarzalności jest upewnienie się, że dane są w formacie łatwym do odczytania dla przyszłych badaczy. Pilniki płaskie są tutaj oczywistym wyborem (Fairbairn w druku).

Aby kod był użyteczny na dłuższą metę, być może najlepszą rzeczą do zrobienia jest napisanie przejrzystej dokumentacji wyjaśniającej zarówno działanie kodu, jak i sposób jego działania, tak aby w przypadku zaniku łańcucha narzędzi analiza mogła zostać ponownie zaimplementowana w przyszłym systemie .

M. Adams
źródło
1
Uzgodnione, najpierw solidne dane i metadane.
mindless.panda
11

Jedna strategia obejmuje korzystanie z cacherpakietu.

  • Peng RD, Eckel SP (2009). „Rozproszone, powtarzalne badania z wykorzystaniem obliczeń buforowanych”, IEEE Computing in Science and Engineering, 11 (1), 28–34. ( PDF online )
  • zobacz także więcej artykułów na stronie Rogera Penga

Dalszą dyskusję i przykłady można znaleźć w książce:

Nie mam jednak doświadczenia z pierwszej ręki na temat jego skuteczności w zapewnianiu ciągłej odtwarzalności.

Jeromy Anglim
źródło
7

Jeśli interesuje Cię trasa maszyny wirtualnej, myślę, że byłoby to wykonalne poprzez małą dystrybucję linux z zainstalowaną konkretną wersją R i pakietów. Dane są dołączone, wraz ze skryptami i spakowane w całość wirtualnego pudełka .

Nie omija to wspomnianych wcześniej problemów sprzętowych, takich jak błąd procesora Intel.

bezmyślna panda
źródło
4

Poleciłbym dwie rzeczy oprócz doskonałych odpowiedzi, które już istnieją;

  • W kluczowych punktach kodu zrzuć bieżące dane w postaci płaskiego pliku, odpowiednio nazwanego i opisanego w komentarzach, podkreślając w ten sposób, czy jeden pakiet przyniósł odmienne wyniki, jeśli różnice zostały wprowadzone. Te pliki danych, a także oryginalne dane wejściowe i wynikowe dane wyjściowe powinny zostać uwzględnione w „powtarzalnym zestawie badawczym”

  • Dołącz niektóre testy odpowiednich pakietów do swojego kodu, na przykład używając czegoś takiego jak TestThat . Trudność polega na wykonywaniu małych, powtarzalnych testów, które prawdopodobnie uwidocznią wszelkie zmiany w tym, co robi pakiet, które dotyczą Twojej analizy. Oznaczałoby to przynajmniej innej osobie, że istnieje pewna różnica w środowiskach.

PaulHurleyuk
źródło
1

Dobre sugestie, mam teraz wiele rzeczy do zbadania.

Pamiętaj, że niezwykle ważne jest upewnienie się, że praca jest „poprawna”. To jest rola, jaką odgrywają narzędzia takie jak Sweave , zwiększając szanse, że to, co zrobiłeś i co powiedziałeś, że to samo.

Ken Williams
źródło
1
Pomocny może być również projekt Sumatra: neuralensemble.org/trac/sumatra/wiki . Możesz użyć jego interfejsu wiersza poleceń, aby uruchomić kod, być w R lub coś innego. Jest w nim również interfejs API Pythona. Jest ładny post na blogu o R-blogerach, omawiający narzędzia R-centryczne do powtarzalnych badań, a także wspomina o użyciu Sumatry. r-bloggers.com/managing-a-statystyczny-analysis-project- –-guidelines-and-best-praktyk /
Josh Hemann