Reproduzierbare Veröffentlichungen

Für verlässliche Wissenschaft sind reproduzierbare Veröffentlichungen essenziell - aber oft sind sie nicht gegeben12. Dieser 5-Minuten-Vortrag motiviert, wieso Reproduzierbarkeit so wichtig ist, und zeigt eine Lösung zum wirklich reproduzierbaren Veröffentlichen - die er auch selbst nutzt. Ich habe ihn in einem Seminar zum wissenschaftlichen Präsentieren gehalten.

Reproduzierbare Veröffentlichungen

PDF-version (for printing)

Release (to download)

orgmode-version (for editing)

repository (for forking)

Falscher Anreiz

  • Die Versuchung
    • „Haben Sie einmal ein Paper mit per Skript erstellten Grafiken veröffentlicht?“
    • „Haben Sie Skripte und Daten veröffentlicht?“
    • „Warum erfinden Sie die Daten nicht? Das wäre weniger Arbeit…“

    „Niemals! Das verbietet die wissenschaftliche Integrität!“

  • Doch es passiert - leider
    • Einstieg: „passte ich den Untersuchungsentwurf an“.
    • Dietrich Stapel: „Es war grau und es war üblich“.
    • Sturz: „erfindet die Daten“.
    • „Forscher gratulieren“.
    • „Drei [seiner] Doktoranden sind Ungereimtheiten […] aufgefallen“.

    [Quarks & Co., 2013-06-04]

Herausforderungen

  • Wissenschaft
    • referenzierbar?
    • vertrauenswürdig?
    • prüfbar?
    • wiederholbar?

    Vertrauen in andere durch saubere Veröffentlichungen.

  • Forschende
    • „Welche Daten nutze ich?“
    • „Liefere ich alle Daten?“
    • „Wie habe ich das Paper damals erstellt?“

    Vertrauen in die eigene Veröffentlichung.

Ansatz

Anforderungen an ein System

  • Diagramme und Tabellen aus aktuellen Daten
  • Benötigte Daten und Skripte beilegen
  • Automatisiert mit Selbsttest

Realisierung

Eine Lösung: org-mode + autotools

  • Emacs Org-Mode
    #+BEGIN_SRC python
      import pylab
      data = pylab.genfromtxt(
          "data.txt")
      pylab.plot(data)
      pylab.savefig(
          "image.png")
      print "#+caption: desc"
      print "[[./image.png]]"
    #+END_src
    
  • GNU autotools distcheck
    autoreconf -i && \
    ./configure && \
    make distcheck
    

    → repro-pub-0.1.tar.gz (repro-pub-0.5.0.tar.gz)

    dist-tarball.png

Analog

Versuchsaufbau exakt beschreiben.

Abschluss

Danke für Ihre Aufmerksamkeit!

Bitte stellen Sie Ihre Fragen

Quellen

  • Kontakt

    arne.babenhauserheide@kit.edu oder arne_bab@web.de

Appendix

Hier genutzte Werkzeuge

  • Autoconf (configure.ac)
  • Automake (Makefile.am)
  • Emacs + org-mode (vortrag.org)

configure.ac

dnl run `autoreconf -i` to generate a configure script. 
dnl Then run ./configure to generate a Makefile.
dnl Finally run make to generate the project.
AC_INIT([Repro Pub], [0.5.0], 
        [arne.babenhauserheide@kit.edu])
# Check for programs I need for my build
AC_CANONICAL_TARGET
AC_ARG_VAR([emacs], [How to call Emacs.])
AC_CHECK_TARGET_TOOL([emacs], [emacs], [no])
AS_IF([test "x$emacs" = "xno"],
      [AC_MSG_ERROR([cannot find Emacs.])])
# Run automake
AM_INIT_AUTOMAKE([foreign])
AM_MAINTAINER_MODE([enable])
AC_CONFIG_FILES([Makefile])
AC_OUTPUT

Makefile.am (1/2)

# basic definitions
vortrag = vortrag.pdf
vortrag_DATA = vortrag.org data.txt dist-tarball.png
vortragdir = .
# dist_pkgdata_DATA = rohdaten 
EXTRA_DIST = ${vortrag_DATA} ${vortrag}
# kill editor backups and latex stuff
MOSTLYCLEANFILES = \\\#* *~ *.bak *.vrb *.bbl \
                   *.blg *_flymake.*
CLEANFILES = ${vortrag}
DISTCLEANFILES = ${CLEANFILES} \\\#* *~ *.bak *.vrb *.bbl \
                               *.blg *_flymake.* auto/*el

all : ${vortrag}

Makefile.am (2/2)

# emacs org-mode beamer build instructions
${vortrag} : ${vortrag_DATA}
    if test "$<" != "$(notdir $<)"; then \
            cp -u "$<" "$(notdir $<)"; fi
    echo yes | @emacs@ --batch --load "~/.emacs" \
               --visit "$(notdir $<)" \
               --funcall org-beamer-export-to-pdf
    if test "$<" != "$(notdir $<)"; \
       then rm -f "$(notdir $<)"; \
            rm -f $(basename $(notdir $<)).tex \
                  $(basename $(notdir $<)).tex~ \
                  auto/$(basename $(notdir $<)).el; \
       else rm -f $(basename $<).tex \
                  $(basename $<).tex~ \
                  auto/$(basename $<).el; \
    fi

  1. Gerade haben Biologen gezeigt3, dass die Verfügbarkeit der Rohdaten von alten Veröffentlichungen jedes Jahr um 17% fällt. Das heißt, schon nach 4 Jahren gibt es für die Hälfte der Veröffentlichungen keine Daten mehr. Die hier gezeigte Methode macht es sehr einfach sicherzustellen, dass alle für die Veröffentlichung notwendigen Daten mitveröffentlicht werden - und erzeugt automatisch eine Archivdatei dafür. 

  2. Leider ist die durch die politisch gesetzten Rahmenbedingungen erzwungene Konkurrenzsituation für reproduzierbare Veröffentlichungen hinderlich, denn wer seine Daten und Skripte veröffentlicht - eigentlich alle Programme, die er oder sie nutzte - verspielt die Möglichkeit, sich ein Monopol auf die Daten aufzubauen, das die nächsten Veröffentlichungen sichern könnte. Sobald die Daten draußen sind, können andere damit arbeiten - und nur die schnellsten können veröffentlichen (ja, das System ist dumm…). Zusätzlich stehen sauberer Veröffentlichung oft „IP“-Regeln entgegen - also der Wunsch der Uni, ihre Ergebnisse zu monopolisieren. Zum Glück gibt es mit Open Access inzwischen eine Bewegung gegen solche schädlichen Regelungen - aber der Kampf wird wohl noch lange andauern. Immerhin stehen hier Misstrauen, Gier und leider berechtigte Sorgen um die eigene Zukunft gegen wissenschaftliche Integrität. 

  3. The Availability of Research Data Declines Rapidly with Article Age - Zeitungsartikel dazu: The Vast Majority of Raw Data From Old Scientific Studies May Now Be Missing

AnhangGröße
repro-pub-0.5.0.pdf229.72 KB
repro-pub-0.5.0.org7.4 KB
repro-pub-thumb-0.5.0.png16.88 KB
repro-pub-0.5.0.tar_.gz354.19 KB
dist-tarball.png47.6 KB
Inhalt abgleichen
Willkommen im Weltenwald!
((λ()'Dr.ArneBab))



Beliebte Inhalte

sn.1w6.org news