为什么summary()会为模型输出不同的标签因子级别,具体取决于以前的命令?

时间:2012-11-05 01:47:14

标签: r

我正在开发一个大型R项目,以执行对常见数据集的不同分析。我为每个分析构建了几个单独的脚本,以及按顺序调用每个脚本的高级脚本。每个脚本都首先调用擦除内存的init.R脚本(rm(list=ls(all=TRUE)))。

我最近发现summary()(我认为coef())会产生不同的输出,具体取决于脚本的顺序。在使用lm()gam()mgcv包)拟合模型的脚本中,如果首先运行这些模型,则在“新鲜”R会话中,summary()输出会列出因子完整的标签。

但是,如果我首先运行其他脚本,它们使用简单的嵌套aov()函数并使用其他一些包生成一些图形和其他输出,那么请重新运行前面提到的脚本summary()而不是生成具有使用数字标记的因子水平的输出('编码'值,而不是实际因子水平标签)。

不幸的是,这不是我可以使用最小的工作示例轻松“重现”的东西,因为我还没有完全确定我的脚本中这种行为的变化。我在快速测试中证实了一些事情:

    使用rm(list=ls())在脚本之间清除
  • 内存,因此内存中不应有任何内容导致此更改。
  • summary()本身不会改变:模型拟合函数实际上会产生略微不同的输出(如all.equal()确认的那样),这更令人不安。以不同顺序运行脚本时生成的保存对象在加载时可靠地生成相同的输出,但该输出根据用于生成拟合模型对象的脚本的顺序而不同(即使在每个脚本之间清除了内存)。
    • 根据脚本的顺序,summary( lm(...) )还会输出不同的模型术语估计值,但相同的残差摘要,R ^ 2和整体F检验。非常离奇。
  • 我无法通过删除先前脚本中加载的包来恢复默认(所需)行为。加载包的顺序是否重要?
  • 退出并重新启动R后,
  • 恢复默认行为

理想情况下,我希望我的项目能够依次简单地source()每个脚本来重现所有结果和输出,但是这个奇怪的'bug'(在我的代码中 - 我不是在指责它R)表示输出不一致,取决于顺序:(

除了可能改变模型拟合函数的工作方式的对象或包之外还有其他任何东西,或者在传入的数据帧中存储因子级别吗?

修改

我意识到上述问题的答案是对比选项(见下文)。新问题:

如何将options()重置为默认设置,即R启动时使用的值? '出厂默认'是 options(contrasts=c("contr.treatment","contr.poly")))但我想知道是否有办法重新启动内部默认值(如果它们不是'工厂新鲜'。

1 个答案:

答案 0 :(得分:1)

在比较输出后,我意识到我正在观察不同的对比,并记得“违规”脚本改变了默认的对比选项:

options(contrasts=c("contr.sum","contr.poly"))

所以,这解释了上面的所有困惑。希望能拯救别人一些拉毛。 新问题:

如何将options()重置为默认设置,即R启动时使用的值?