5

当我估计一个模型在两个变量之间具有交互作用时,两个变量没有作为独立变量进入模型,并且当这些变量之一是虚拟(“逻辑”类)变量时,R“翻转”虚拟变量的符号. 也就是说,当虚拟变量为 FALSE 时,它报告交互项系数的估计值,而不是当它为 TRUE 时。这是一个例子:

data(trees)
trees$dHeight <- trees$Height > 76
trees$cGirth  <- trees$Girth - mean(trees$Girth)
lm(Volume ~ Girth +  Girth:dHeight, data = trees)  # estimate is for  Girth:dHeightTRUE
lm(Volume ~ Girth + cGirth:dHeight, data = trees)  # estimate is for cGirth:dHeightFALSE    

为什么最后一行中的回归会产生一个交互作用的估计值dHeight是 FALSE 而不是 TRUE?(我希望 R 在 dHeight 为 TRUE 时报告估计值。)

这不是一个大问题,但我想更好地理解为什么 R 正在做它正在做的事情。我知道relevel()and contrasts(),但我看不出它们在这里会有所作为。

4

2 回答 2

3

dHeightlogical。_ 在model此强制为一个因子,并且级别按字典顺序排序(即 F 在 T 之前)。

正如@Hongooi 的回答中所述,您无法估计 4 个参数,因此 R 将按照它们出现的顺序拟合这些术语(在 TRUE 之前为 FALSE)

如果您想先强制R拟合该TRUE值,则可以将模型拟合到!dHeight

lm(formula = Volume ~ Girth + cGirth:!dHeight, data = trees)

请注意,这!dHeightFALSE相当于dHeightTRUE

您还将注意到,在这种简单的情况下,您只是更改系数上的符号,因此您适合的模型并不重要。


编辑一个更好的方法

R 可以识别它cGirth并且Girth是共线的,因此我们可以拟合记忆a/b扩展为a + a:b

lm(formula = Volume ~ Girth + cGirth/dHeight, data = trees)
Coefficients:
       (Intercept)               Girth              cGirth  cGirth:dHeightTRUE  
           -27.198               4.251                  NA               1.286

这为系数提供了易于解释的名称,并且R显然无法返回系数cGirth


R当它们都是作为“主要效应”或独立术语的模型时,可以分辨Girth并且是共线的。cGirth

没有办法在拟合时R应该能够判断并且是共线的,并且鉴于这是合乎逻辑的,我们希望成为您拟合的系数。(如果你真的想要,你可以编写自己的公式解析器来做到这一点)Girth + cGirth:dHeightcGirthGirthdHeightcGirthdHeightTRUE

另一种适合您想要的模型并且没有任何共线项的方法是使用

lm(formula = Volume ~ Girth + I(cGirth*dHeight), data = trees)

强制dHeight转换为数字 ( TRUE becomes 1)。


编辑工作重点。

当你适合~Girth + Girth:dHeight

你的意思是Girth+ 调整有一个主要影响dHeight。R 将因子的第一水平视为参考水平。的斜率dHeightFALSE只是 的值Girth,然后您可以调整 when dHeight == TRUE(Girth:dHeightTRUE)。

当您适合时~Girth + cGirth:dHeight-R没有一个读心解析器可以分辨出给定的内容cGirth并且Girth当您适合这两个术语的交互时是共线的,它将假定第二个级别dHeight现在是参考级别)

想象一下,如果你有一个完全不相关的变量Girth

例如

set.seed(1)
trees$cG <- runif(nrow(trees))

然后当你拟合时Girth + cG:dHeight,你会得到 4 个估计的参数

lm(formula = Volume ~ Girth + cG:dHeight, data = trees)

Call:
lm(formula = Volume ~ Girth + cG:dHeight, data = trees)

Coefficients:
    (Intercept)            Girth  cG:dHeightFALSE   cG:dHeightTRUE  
      -31.79645          4.79435         -5.92168          0.09578  

这是明智的。

R处理时Girth + cGirth:dHeight,它会扩展(首先是因子的第一级)1 + Girth + cGirth:dHeightFALSE + cGirth:dHeightTRUE- 并且会发现它无法估计所有 4 个参数,并且会估计前 3 个参数。

于 2013-07-19T03:35:12.143 回答
1

R 并没有像这样翻转虚拟变量上的符号。当您适合~ Girth + cGirth:dHeight时,该cGirth变量与截距项混淆。您可以通过删除拦截来查看发生了什么:

> lm(Volume ~ -1 + Girth + cGirth:dHeight, data = trees)

Call:
lm(formula = Volume ~ -1 + Girth + cGirth:dHeight, data = trees)

Coefficients:
              Girth  cGirth:dHeightFALSE   cGirth:dHeightTRUE  
              2.199                2.053                3.339  
于 2013-07-19T02:35:29.547 回答