R脚本和RMD文件之间的lm()输出不一致



问题:

以下代码:

lm(mpg ~ factor(am), data = mtcars)

应该产生以下输出(让我们称之为输出1(,这是我在r Studio中从r脚本运行它时得到的:

Call:
lm(formula = mpg ~ factor(am), data = mtcars)
Coefficients:
(Intercept)  factor(am)1  
17.147        7.245  

然而,如果我从Rmd文件(也在R Studio中(运行它,我"有时"会得到不同的输出,使用完全相同的代码。让我们把这个输出称为2:

Call:
lm(formula = mpg ~ factor(am), data = mtcars)
Coefficients:
(Intercept)  factor(am)1  
20.770       -3.622  

如果在从Rmd文件获得输出2之后,我返回到R脚本,那么我继续获得输出2而不是输出1,并且再次获得输出1的唯一方法是关闭R Studio并再次仅打开R脚本。

为什么输出1对我有意义

17.147是配备自动变速器的汽车组(参考组(的平均mpg,7.245是配备手动变速器的车辆组的平均mpg增量(加起来为24.392(

这可以通过进行确认

tapply(mtcars$mpg, mtcars$am, mean)
0        1 
17.14737 24.39231 

我觉得输出2有什么奇怪的地方

除了这是完全相同的命令行的不同结果之外,20.770并没有告诉我任何信息(我相信(。尽管它接近整个样本的平均英里/加仑,但事实并非如此。将-3.622与20.770加在一起,可以得出17.147的平均速度,这是自动变速器汽车组的平均速度;将3.622与20.770相加,可以得出24.392的平均速度。

尽管输出2与输出1不同,而且不一致,因为我永远不知道我会得到哪一个,但我还没有看到第三个或更多的变体。

其他详细信息:

在任何情况下,我都不会加载任何包,也不会运行任何额外的命令行
mtcars数据集包含在基本R中。
我有R版本3.6.3、R Studio版本1.2.5033和Windows 10。

感谢您对@r2evans和@rawr的评论,他们为我指明了正确的方向。事实证明,问题是Rmd文件正在更改设置区块中的选项{r setup, include=FALSE},这意味着它在我第一次执行该Rmd文件中的任何块时被执行。

我没有注意到这一点,因为有问题的代码在一个单独的块中,而这是我直接执行的。我以前从未使用/见过设置块。

导致lm((函数在因子变量中表现不同的设置块中的特定代码是:

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

当默认值为:时

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

以防这对任何人都有帮助。如果你觉得我需要编辑主题、问题或答案,以便对其他人有所帮助,请告诉我。

最新更新