为什么在包含R中的因子的Anova中删除变量不会降低自由度?

时间:2017-06-20 15:03:31

标签: r regression anova r-factor

我正在尝试在不同模型之间进行ANCOVA(ANOVA和线性回归之间的混合),我遇到了一些问题。我想我把它缩小到一个关于ANOVA的问题(或者我不理解或做错的事情):为了在两个模型之间进行比较,它们需要具有不同的残差Df(自由度)。

举个例子,让我们考虑一下R:

中的mtcars数据
\\developmentServer\website1\charts\

所以,我刚刚做的是创建两个模型来预测drat值。第一个采用因子(Df =水平数 - 1 = 5)和截距(Df = 1总是)的变量,因此使用6个Df。 我删除了第二个模型中的截距,所以我只有变量。我希望这个变量只使用5个Df,但显然并非如此,因为Anova说有6个。

我的问题是:为什么最后的Df 6而不是5?我想这与变量有因素的事实有关,但我不明白为什么。是否不可能比较涉及这种变量的两个模型?

编辑:谢谢你的回答。我想我误解了理论而不是R,现在它更清楚了

1 个答案:

答案 0 :(得分:2)

您的两个模型基本上是相同的模型,但在第二个模型中,您强制拦截为零。删除截距并不会改变自由度,因为它会导致factored_variable获得参数估计的所有6个级别,而不是6-1 = 5级factored_variable加上截距。

要看模型在其他方面是等价的(并且每个模型等同于回归模型),我们将创建等效的线性回归模型,然后查看系数。

aov1 <- aov(drat ~ factored_variable , data = test_data)
aov2 <- aov(drat ~ factored_variable - 1, data = test_data)

lm1 = lm(drat ~ factored_variable , data = test_data)
lm2 = lm(drat ~ factored_variable - 1 , data = test_data)

现在查看四个模型的系数,如下面的代码和输出所示。 aov1lm1估算factored_variable的截距加5个系数。缺失类别factored_variable(&#34;参考&#34;类别)的系数是截距。其他系数是该类别与参考类别之间的差异。 aov2lm2估算每个factored_variable类别的绝对系数,而不是相对于参考类别的系数。

coefs = data.frame(aov1=coef(aov1), aov2=coef(aov2), lm1=coef(lm1), lm2=coef(lm2))
                                         aov1     aov2         lm1      lm2
(Intercept)/factored_variable1     3.68142857 3.681429  3.68142857 3.681429
factored_variable2                 0.01757143 3.699000  0.01757143 3.699000
factored_variable3                -0.61142857 3.070000 -0.61142857 3.070000
factored_variable4                -0.08542857 3.596000 -0.08542857 3.596000
factored_variable6                -0.06142857 3.620000 -0.06142857 3.620000
factored_variable8                -0.14142857 3.540000 -0.14142857 3.540000

请注意,模型对lm1 / aov1lm2 / aov2各自具有相同的系数。对于模型aov1lm1,如果将每个factored_variable的系数添加到截距,您还会看到系数与{{1}的系数相同}和lm2。在每种情况下,模型都在估计六个参数。