计算并比较每个组的回归交互的系数估计值

时间:2016-05-24 15:53:08

标签: r regression interaction coefficients

A)我感兴趣的是连续变量(Var1)对连续因变量(DV)的影响,条件是四个不同的组,由两个双变量变量({{ 1}}和Dummy1)。因此,我进行了三方互动。

Dummy2

我想比较各组之间Var1 <- sample(0:10, 100, replace = T) Dummy1 <- sample(c(0,1), 100, replace = T) Dummy2 <- sample(c(0,1), 100, replace = T) DV <-2*Var1 + Var1*Dummy1 + 2*Var1*Dummy2 + 10*Var1*Dummy1*Dummy2 + rnorm(100) fit <- lm(DV ~ Var1*Dummy1*Dummy2) 的系数。我相信,这可以通过累加相关系数来实现。

Var1

然而,这似乎过于艰巨,容易出错。什么是更有效的解决方案?

我想要的输出是# Group Dummy1 = 0 & Dummy 2 = 0: fit$coefficients[Var1] # Group Dummy1 = 1 & Dummy 2 = 0: fit$coefficients[Var1] + fit$coefficients[Var1:Dummy1] Var1Dummy1的每种可能组合的估计效果。

B)一旦我知道每组Dummy2的估计效果大小,我该如何测试两者在统计上是否彼此不同?我假设Var1函数可以提供帮助,但我无法弄清楚如何。谢谢!

1 个答案:

答案 0 :(得分:2)

完全交互的模型相当于对每个数据子集运行回归,所以如果您的意图确实如此:

  

我想要的输出是Var1对每种可能的估计效果   Dummy1和Dummy2的组合。

然后以下内容可能会有所帮助:

# get your data
set.seed(42)
Var1 <- sample(0:10, 100, replace = T)
Dummy1 <- sample(c(0,1), 100, replace = T)
Dummy2 <- sample(c(0,1), 100, replace = T)
DV <-2*Var1 + Var1*Dummy1 + 2*Var1*Dummy2 + 10*Var1*Dummy1*Dummy2 + rnorm(100)
df <- data.frame(DV, Var1, Dummy1, Dummy2)

首先,请注意

fit <- lm(DV ~ Var1*Dummy1*Dummy2)
fit$coefficients["Var1"]
    Var1 
2.049678 
fit$coefficients["Var1"] + fit$coefficients["Var1:Dummy1"]
    Var1 
2.993598 

现在,让我们估算每组组合的效果:

library(dplyr)
library(broom)

df %>% group_by(Dummy1, Dummy2) %>% do(tidy(lm(DV ~ Var1, data=.)))

Source: local data frame [8 x 7]
Groups: Dummy1, Dummy2 [4]

  Dummy1 Dummy2        term    estimate  std.error    statistic      p.value
   (dbl)  (dbl)       (chr)       (dbl)      (dbl)        (dbl)        (dbl)
1      0      0 (Intercept) -0.03125589 0.33880599  -0.09225307 9.272958e-01
2      0      0        Var1  2.04967796 0.05534155  37.03687553 5.222878e-22
3      0      1 (Intercept) -0.08877431 0.38932340  -0.22802203 8.223492e-01
4      0      1        Var1  3.97771680 0.07046498  56.44955828 8.756108e-21
5      1      0 (Intercept)  0.02582533 0.28189331   0.09161384 9.275272e-01
6      1      0        Var1  2.99359832 0.04622495  64.76153226 4.902771e-38
7      1      1 (Intercept)  0.16562985 0.55143596   0.30036100 7.675439e-01
8      1      1        Var1 14.95581348 0.07582089 197.25189807 5.275462e-30

此处的截距对应于由两个虚拟变量跨越的每个组中的均值(与从完全相互作用的回归模型得到的总体均值的差值相对),Var1对应到每组中的斜率系数,这是Var1Dummy1Dummy2的每种可能组合的估算效果。

请注意Var1fit的系数与第2行中估算的系数的一一对应关系,以及行中Var1的值6对应于值Var1 + Var1:Dummy1。因此,您可以看到使用此方法,您无需手动添加变量。

要测试所有组的斜率系数是否相同,您的初始回归模型最适合。您只需检查summary(fit),看看互动条件是否重要。如果是,那就有区别了。如果不是,那就没有区别了。这将对应于顺序测试。要进行同步测试,您可以使用F测试,如

library(car)
linearHypothesis(fit, c("Var1:Dummy1", "Var1:Dummy2", "Var1:Dummy1:Dummy2"), 
verbose=T, test="F")