是否有 R 包在版本之间发生显着变化的例子,使得统计函数的结果显着不同?

机器算法验证 r
2022-03-21 12:05:11

我试图了解人们如何使用 R 包,并想知道是否有记录的案例 R 包产生了不同的答案。

澄清:这个问题背后的动机来自我参与的一项工作,其目标是了解分析方法中出处的重要性以及它如何促进可重复性研究。虽然 R 目前在科学界很重要,并且 R 包在 CRAN 中进行了版本化,但没有详细信息 [尤其是版本号],将来试图复制大量工作的人可能会得出不同的结论,即原始工作 (即使使用原始数据)。

示例:John Doe 的论文说“我们使用 R 2.3.1 并封装 glmulti 以适应我们的模型”。10 年后,有人可能会使用新版本的 glmulti(没有人知道原始版本中使用的是什么版本),这可能会产生截然不同的结论。我的问题:是否已经有这种事情发生的例子?版本 2 或 R 包产生的结果与版本 1 大不相同。

4个回答

这将因包而异,但一般答案是yes输出可能会有所不同,甚至是基本用法(输入/输出参数)。这就是为什么当我进行重要分析时,我总是喜欢记录与version()和一起使用的版本sessionInfo()即使情况发生变化,旧版本也会保留在 CRAN 上,因此您可以在需要时获取旧版本。

glmnet在版本包上遇到了问题。如果我没记错的话,它是从 1.5 版升级到 1.6 版,但我可能有点偏离了。

包创建者/维护者改变了他们对象的类的顺序(所以它变成c("lognet", "glmnet")c("glmnet", "lognet")- 或者它可能是相反的)。当然,他们还更改了所有 S3 函数以正确处理此问题(例如predict.lognet)。

这样做的问题是:您使用旧版本创建的对象glmnet与新功能不兼容(因为调度以相反的方式工作)。大多数人不会在那个地方(谁保存了一个glmnet对象以备后用?),但我是。

请注意:这是一个非常强大的软件包,由非常聪明的人开发,所以它可能发生在任何人身上 :-)

简单说一下:

  • R 包生态系统非常大,这完全取决于作者个人,他们是否打算保持向后兼容性。
  • 我个人对基本 R 包以导致向后兼容性问题的方式更改没有任何问题。一般来说,这是我更喜欢使用基本 R 包的原因之一。

以我的经验,大多数更改都会产生通常的计算/编程类型的问题。函数被弃用,参数不同等。例如,我已经发生过代码将停止工作,因为某些函数需要额外的参数。这可能很烦人,但问题很明显,通常不太难解决。

一些软件包在这方面可以得到更好的维护,但免费软件的通常“规则”适用:你必须看到它是由志愿者制作的——通常是有其他职责的统计学家,而不是全职的专业软件开发人员——如果质量和可靠性对你来说很重要,你应该避免使用像 0.x 这样的版本号,只使用具有活跃用户和开发人员社区的成熟包。

我从未遇到过会导致统计结果发生隐性变化的更新(例如,在某些函数中切换默认方法,更改自由度和 p 值,同时产生表面上相似的结果)。我想它必须发生,至少通过错误更正(但我在某处读到微软实际上在其新产品中添加了代码以模拟一些旧错误以避免破坏与依赖这些错误的程序的兼容性)。也许,一些维护者可以让我们了解他们的包处理这些事情的方式。