在lm中以不同的方式编写交互作用术语?


42

我有一个问题,即在回归模型中指定交互的最佳方法是什么。考虑以下数据:

d <- structure(list(r = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
     1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("r1","r2"),
     class = "factor"), s = structure(c(1L, 1L, 1L, 1L, 1L, 
     2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L), 
    .Label = c("s1","s2"), class = "factor"), rs = structure(c(1L, 1L,
     1L,1L, 1L,2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L),
    .Label = c("r1s1","r1s2", "r2s1", "r2s2"), class = "factor"), 
     y = c(19.3788027518437, 23.832287726332, 26.2533235300492,
     15.962906892112, 24.2873740664331, 28.5181676764727, 25.2757801195961,
     25.3601044326474, 25.3066440027202, 24.3298865128677, 32.5684219007394,
     31.0048406654209, 31.671238316086, 34.1933764518288, 36.8784821769123,
     41.6691435168277, 40.4669714825801, 39.2664137501106, 39.4884849591932,
     49.247505535468)), .Names = c("r","s", "rs", "y"), 
     row.names = c(NA, -20L), class = "data.frame")

通过交互方式指定模型的两种等效方法是:

lm0 <- lm(y ~ r*s, data=d)
lm1 <- lm(y ~ r + s + r:s, data=d)

我的问题是,是否可以考虑具有相同交互级别的新变量(rs)来指定交互:

lm2 <- lm(y ~ r + s + rs, data=d)

这种方法有哪些优点/缺点?为什么这两种方法的结果不同?

summary(lm1)

lm(formula = y ~ r + s + r:s, data = d, x = TRUE)
            coef.est coef.se
(Intercept) 21.94     1.46  
rr2         11.32     2.07  
ss2          3.82     2.07  
rr2:ss2      4.95     2.92  
---
n = 20, k = 4
residual sd = 3.27, R-Squared = 0.87


summary(lm2)

lm(formula = y ~ r + s + rs, data = d, x = TRUE)
            coef.est coef.se
(Intercept) 21.94     1.46  
rr2         11.32     2.07  
ss2          8.76     2.07   # ss2 coef is different from lm1
rsr1s2      -4.95     2.92  
---
n = 20, k = 4
residual sd = 3.27, R-Squared = 0.87

您的意思rs是定义为interaction(r, s)
chl

也许您可以向我们展示创建rsr1s2的代码?
jbowman 2011年

rs因子是手动定义的(仅粘贴因子r和s)。参见数据集。
曼努埃尔·拉蒙

1
我的猜测是相关的变量的方式relationated见attr(terms(lm1),"factors")attr(terms(lm2),"factors")
擦伤的

Answers:


8

结果有所不同,因为lm通过交互建立模型的方式与您自己建立模型的方式不同。如果您查看残差sd,它是相同的,这表示(不是确定地)底层模型是相同的,只是(对lm内部)表示不同。

如果您将交互定义为paste(d$s, d$r)而不是paste(d$r, d$s)参数,则估计值将以有趣的方式再次更改。

请注意,在lm1的模型摘要中,ss2的系数估计比lm2的摘要要低4.94,而rr2:ss2的系数为4.95(如果打印到小数点后3位,则差值消失了)。这是项的内部重新排列的另一个指示。

我自己想不到有什么好处,但是可能会有一个模型更复杂的模型,您不想要完整的交互作用术语,而是只希望两个或多个因素之间“交叉”的某些术语。


我看到像lm2中那样定义交互作用的唯一优点是,可以很容易地对交互作用项进行多次比较。我不太了解的是,如果原则上看来这两种方法相同,为什么会得到不同的结果。
曼努埃尔·拉蒙

5
x1,x2(1,x1,x2,x1x2)(x1,x2,x1x2,(1x1)(1x2)

因此,尽管不同,但这两种方法都是正确的,不是吗?
曼努埃尔·拉蒙

对。从数学上讲,各种公式中自变量的矩阵只是彼此的线性变换,因此,如果一个人知道如何实际建立两个模型,则可以从另一个模型的参数估计中计算出一个模型的参数估计。
jbowman 2011年

9

如果查看模型矩阵,可能会更好地理解此行为。

 model.matrix(lm1 <- lm(y ~ r*s, data=d))
 model.matrix(lm2 <- lm(y ~ r + s + rs, data=d))

当您查看这些矩阵时,可以将其星座图s2=1与其他变量进行比较(即,何时s2=1,其他变量取哪些值?)。您将看到这些星座略有不同,这仅表示基本类别不同。其他所有内容本质上都是相同的。特别要注意的是,在你的lm1,对系数ss2等于系数ss2+rsr1s2lm2,即3.82 = 8.76-4.95,短舍入误差。

例如,执行以下代码将为您提供与使用R的自动设置完全相同的输出:

  d$rs <- relevel(d$rs, "r1s1")
  summary(lm1 <- lm(y~ factor(r) + factor(s) + factor(rs), data=d))

这也为您的问题提供了一个快速答案:更改因素设置方式的真正唯一原因是为了提供清晰的说明。考虑以下示例:假设您将假人的工资退还给高中毕业的假人,该假人与指示您是否属于少数群体的因素相互作用。

wage=α+β edu+γ eduminority+ϵ

ββ+γ

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.