¿Qué material debo incluir con un artículo de revista (o publicar en línea) para que mi investigación computacional sea reproducible?

23

La reproducibilidad se ha vuelto cada vez más importante en la investigación en ciencias computacionales. (Por ejemplo, vea este artículo de Roger Peng en Science ; también conozco otros artículos y sitios web de este tipo). Sin embargo, no tengo claro cuánta información debo incluir en un artículo de revista (o en línea) para hacer mi investigación computacional es reproducible (suponiendo que no haya otros obstáculos, como los acuerdos de propiedad intelectual). ¿Hay alguna guía por ahí, y si no, la gente podría sugerir qué pasos deberían tomar los investigadores para que su investigación en ciencias computacionales sea reproducible?

De particular uso en las respuestas serían posibles formas de implementar esas sugerencias, básicamente, flujos de trabajo. Los flujos de trabajo que son independientes del sistema o basados ​​en Linux son preferibles. Además, discutir cualquier experiencia personal relevante que haya tenido también sería útil.

En mi caso particular, estoy escribiendo un artículo teórico con un par de cálculos de ejemplo que son lo suficientemente simples como para que se puedan hacer en MATLAB. Creo que, en este caso, incluir el script MATLAB, así como señalar la versión específica de MATLAB en mi máquina, sería suficiente para garantizar la reproducibilidad. Sin embargo, estoy seguro de que existen escenarios más complicados, y sería muy útil conocer los consejos sobre cómo llevar a cabo una investigación reproducible para futuros proyectos.

Geoff Oxberry
fuente

Respuestas:

17

En un orden aproximado de importancia.

Código fuente

  1. Ponga a disposición el código que implementa los aspectos clave de su algoritmo. Incluso si el usuario no puede construirlo o ejecutarlo, puede leer exactamente lo que se hace. He notado varias veces decisiones simples que no fueron documentadas en un documento, pero que un par de minutos con el código fuente respondieron de manera concluyente.
  2. Hazlo ejecutable. Esto implica documentar las versiones de las bibliotecas dependientes y, por lo general, requiere que escriba un código algo portátil. Asegúrese de que se basa en al menos una máquina que no sea la suya (es fácil tener dependencias ocultas si nunca lo ha construido en un entorno limpio).
  3. Especifique la versión del código que se utilizó. Si no es una versión lanzada formalmente (y a veces incluso entonces), documente el SHA1 de la versión. (Esto se aplica de forma más natural a DSCM como Git y Mercurial, pero se puede usar en cualquier lugar). Esta es una forma muy confiable de garantizar que alguien realmente tenga la misma versión del código.
  4. Incluya la configuración y los parámetros del host, incluidos el proveedor del compilador, las versiones y los indicadores de optimización, las bibliotecas del sistema como libc, tipo de CPU y tipo de memoria y topología (especialmente para estudios de rendimiento).

Parámetros de tiempo de ejecución / archivos de entrada

Incluya la especificación de entrada completa. Si fue generado por un script, incluya ese script. Si se trata de datos enormes, documente cómo obtenerlos y procesarlos. Si su algoritmo tiene aleatoriedad, especifique el generador de números aleatorios y la semilla que se utilizó.

Scripts para generar figuras y tablas.

Es muy útil incluir estos scripts, tanto para aclarar cualquier pregunta sobre lo que realmente muestran las figuras como para permitir que el lector experimente cómo cambian las cosas si cambian los parámetros o modifican el algoritmo.

Jed Brown
fuente
¿Qué tan importante sería incluir pruebas unitarias? ¿Qué tan bien debo documentar el código que incluyo para la reproducibilidad?
Geoff Oxberry
Si solo desea reproducir los resultados, no es necesario realizar pruebas unitarias y páginas de manual / manuales de usuario. Si está intentando atraer futuros coautores o usuarios de su software (citas ...), vale la pena escribir el software para reutilizarlo y documentarlo a fondo. Tenga en cuenta que independientemente de si su software está destinado para uso de otros, pruebas y documentación bien puede guardar que el tiempo en el largo plazo, simplemente porque le permite moverse y experimentar con más confianza.
Jed Brown
6

La mayoría de las revistas no están configuradas para esto de ninguna manera formal, pero recientemente hemos fundado el Archivo de Software Numérico que tiene la intención específica de tener el código fuente y todo lo que sea necesario ser parte del artículo. Echa un vistazo: http://journals.tdl.org/ans ¡Las presentaciones son bienvenidas!

Wolfgang Bangerth
fuente
2
Suponiendo que use el proyecto de software para mascotas de algún miembro del consejo editorial . No puedo evitar sentir que este requisito degrada la integridad de la revista.
Jack Poulson
1
@JackPoulson: Este es un punto que hemos discutido extensamente entre los editores, y que hemos discutido con mayor amplitud con otros miembros de la comunidad. Creo que todos entendemos su punto, pero al mismo tiempo, sentimos que no podemos hacerlo de otra manera por dos razones: (i) No sabemos dónde encontrar revisores para el proyecto aleatorio X. (ii) Existe un cierto consenso en la comunidad sobre qué proyectos son de alta calidad y cuáles no; no queríamos que ANS se convirtiera en una salida para cada proyecto de aspirante. Como declaramos en la página web, nos gustaría incluir todos los paquetes de alta calidad eventualmente.
Wolfgang Bangerth
2
¿Por qué razón un revisor tiene que estar familiarizado con el "proyecto aleatorio X" en lugar del "campo aleatorio X"? Menciono esto porque creo que la revista se está perdiendo una clase significativa de documentos, ya que existen limitaciones severas sobre lo que es posible implementar con la lista de paquetes dada. Por ejemplo, no puede haber contribuciones fundamentales a la computación paralela, ya que cualquier cosa que implique sumergirse en llamadas a MPI o, Dios no lo quiera, BLAS o LAPACK, parecería violar los estándares de la revista. Me encantaría hablar sobre esto sin conexión.
Jack Poulson
@JackPoulson: Por lo que puedo decir, si quieres hacer una contribución fundamental a la computación paralela, además de escribir un artículo en otra revista, también puedes escribir un documento de "Introducción a la biblioteca" en ANS para asegurarte de que tu biblioteca esté agregado a la lista aprobada de bibliotecas.
Geoff Oxberry
1
@ GeoffOxberry: Wolfgang y yo tuvimos una conversación amistosa, y la conclusión común fue que la lista de bibliotecas de álgebra lineal debería ampliarse enormemente, pero que el objetivo de la revista es bibliotecas de "alta calidad" en lugar de simplemente reproducibilidad, y Por lo tanto, debe haber algún proceso de investigación.
Jack Poulson el
3

En

Stodden, V. 2009. "El marco legal para la investigación científica reproducible". CiSE . .

Victoria Stodden recomienda publicar el "compendio de investigación" completo, y enumera los siguientes componentes en la pág. 38:

  1. El trabajo de investigación
  2. Los datos , incluida la documentación y el código para procesar los datos.
  3. El experimento : todo el código fuente; documentación, parámetros, configuraciones y dependencias del sistema operativo
  4. Los resultados del experimento : figuras, datos, archivos fuente de ilustración; y documentación y explicación del procesamiento de los resultados experimentales.
  5. Cualquier material auxiliar
David Ketcheson
fuente
2

Al menos, el código fuente y los datos que utilizó para realizar sus experimentos deberían ser accesibles en algún lugar. Agregue instrucciones para construir su código si es necesario. Realmente hay tan pocas revistas de acceso abierto que no hay una regla abierta y establecida.

asmático
fuente
2

Yo trabajo para Elsevier. Mi empresa ha comenzado a usar el marco Collage (desarrollado en respuesta al Gran desafío del papel ejecutable) en números de revistas para permitir a los autores incluir todos los datos y el código necesarios para reproducir los resultados y las cifras en sus documentos. Esta característica facilita a los lectores reproducir los resultados informados en el artículo y reutilizar el material publicado para su propia investigación. Collage admite una amplia variedad de software de código abierto y propietario; Puede encontrar más información en el video informativo aquí y en el sitio web de Collage Authoring Environment .

Hylke Koers
fuente