¿Hay ejemplos de paquetes R que cambien dramáticamente entre versiones de manera que los resultados de una función estadística sean significativamente diferentes?

8

Estoy tratando de entender cómo la gente usa los paquetes R y me preguntaba si hay casos documentados en los que los paquetes R hayan producido diferentes respuestas.

Aclaración: La motivación detrás de esta pregunta proviene de un esfuerzo en el que estoy involucrado, donde el objetivo es comprender la importancia de la procedencia en los métodos analíticos y cómo facilita la investigación reproducible. Si bien R es importante en la comunidad científica en la actualidad, y los paquetes de R están versionados en CRAN, sin información detallada [especialmente los números de versión], alguien que intente reproducir un cuerpo de trabajo en el futuro podría llegar a una conclusión diferente de que el trabajo original ( incluso con los datos originales).

Ejemplo: el documento de John Doe dice "utilizamos R 2.3.1 y el paquete glmulti para adaptarnos a nuestros modelos". Dentro de 10 años, alguien podría usar una nueva versión de glmulti (nadie sabe qué versión se usó en el original), lo que podría producir una conclusión muy diferente. Mi pregunta: ¿Ya hay ejemplos de que tal cosa suceda? La versión 2 o el paquete R produce un resultado muy diferente que la versión 1.

Maiasaura
fuente
1
La pregunta es un poco vaga. ¿Puedes enfocarlo un poco más?
Dirk Eddelbuettel
Sí, aclaré la pregunta.
Maiasaura

Respuestas:

6

He tenido problemas con el paquete glmnetsobre las versiones. Si mal no recuerdo, iba de la versión 1.5 a la 1.6, pero puedo estar un poco apagado.

Los creadores / mantenedores de paquetes cambiaron el orden de las clases de sus objetos (por lo que se convirtió en c("lognet", "glmnet")lugar de c("glmnet", "lognet"), o podría haber sido al revés). Por supuesto, también cambiaron todas sus funciones S3 para manejar esto adecuadamente (por ejemplo predict.lognet).

El problema con esto era: un objeto que había creado con una versión glmnetanterior no era compatible con las nuevas funciones (ya que el despacho funcionaba al revés). La mayoría de la gente no estaría en ese lugar (¿quién guarda un glmnetobjeto para su uso posterior?), Pero yo sí.

Eso sí: este es un paquete muy poderoso, desarrollado por personas extremadamente inteligentes, por lo que podría pasarle a cualquiera :-)

Nick Sabbe
fuente
1
Para responder quién salva objetos: lo hago. :)
Iterator
8

Esto variará de paquete a paquete, pero la respuesta general es . Las salidas pueden variar, e incluso el uso básico también (argumentos de entrada / salida). Por eso, cuando hago un análisis importante, siempre me gusta documentar con qué versiones se usaron version()y sessionInfo(). Incluso si las cosas cambian, las versiones antiguas se conservan en CRAN, por lo que puede obtener las versiones antiguas si las necesita.

John Colby
fuente
1
+1 Gran consejo. He estado en una clase de tutoría R antes donde el código del instructor fue escrito usando una versión anterior de R que tenían las computadoras del laboratorio del campus y me llevó 30 minutos de depuración descubrir qué cambió en las versiones puntuales y cómo el código del curso tenía que ser modificado. Si bien algunos programas son quizás demasiado obedientes a la compatibilidad con versiones anteriores, nunca me ha sorprendido que esto sea una crítica de R.
Josh Hemann
1
@JohnColby es correcto: es muy importante poder reproducir su configuración, incluidos los números de versión del paquete y las cosas que a menudo se pasan por alto, como los argumentos pasados ​​a las funciones (trato de usar siempre argumentos con nombre), el número aleatorio semilla, las diversas dependencias externas y más. En cuanto a si algún paquete ha afectado los resultados, la respuesta es sí, y más amplio de lo que cabría esperar: incluso los paquetes básicos de E / S pueden afectar los resultados si pierde datos. :) Puede perder datos o los datos pueden modificarse de alguna manera si el comportamiento predeterminado de carga de archivos ha cambiado.
Iterator
3

Solo un punto rápido:

  • El ecosistema del paquete R es muy grande y depende realmente del autor individual, ya sea que pretendan mantener la compatibilidad con versiones anteriores.
  • Personalmente, no he tenido ningún problema con los paquetes base R que cambian de una manera que condujo a problemas de compatibilidad hacia atrás. En general, esta es una razón por la que prefiero usar paquetes base R.
Jeromy Anglim
fuente
2

En mi experiencia, la mayoría de los cambios crean el tipo habitual de problemas de computación / programación. Las funciones quedan obsoletas, los argumentos son diferentes, etc. Por ejemplo, ya me ocurrió que el código dejaría de funcionar porque algunas funciones requerían un argumento adicional. Esto puede ser molesto, pero el problema es obvio y generalmente no es demasiado difícil de resolver.

Algunos paquetes podrían mantenerse mejor a ese respecto, pero se aplican las "reglas" habituales del software libre: debe ver que es producido por voluntarios, a menudo estadísticos que tienen otras funciones y no desarrolladores de software profesionales a tiempo completo, y si la calidad y la confiabilidad es importante para usted, debe evitar cualquier cosa con un número de versión como 0.xy usar solo paquetes maduros con una comunidad activa de usuarios y desarrolladores.

Nunca me he encontrado con una actualización que resulte en cambios insidiosos de resultados estadísticos (por ejemplo, cambiar el método predeterminado en alguna función, cambiar el grado de libertad y el valor p mientras produce resultados superficialmente similares). Sin embargo, supongo que debe suceder, al menos a través de correcciones de errores (pero he leído en alguna parte que Microsoft realmente agregó código en sus nuevos productos para emular algunos errores más antiguos para evitar romper la compatibilidad con los programas que dependen de estos errores). Tal vez, algunos mantenedores nos pueden dar algunas ideas sobre la forma en que se manejan estas cosas para sus paquetes.

Gala
fuente