计算和比较每组回归交互的系数估计值
Calculate and compare coefficient estimates from a regression interaction for each group
A) 我对连续变量 (Var1
) 对以四个不同组为条件的连续因变量 (DV
) 的影响感兴趣,这些组由两个双变量变量 ( 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]
但这似乎过于艰巨而且容易出错。什么是更有效的解决方案?
我想要的输出是 Var1
对 Dummy1
和 Dummy2
的每种可能组合的估计效果。
B) 一旦我知道每个组的 Var1
的估计效果大小,我如何测试任何两个是否在统计上彼此不同?我假设 linearHypothesis()
函数可以提供帮助,但我不知道如何做。谢谢!
完全交互的模型相当于 运行 对每个数据子集的回归,因此如果您的意图确实是:
My desired output is the estimated effect of Var1 for each possible
combination of Dummy1 and 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
对应的是每组中的斜率系数,是Var1
对Dummy1
和Dummy2
.
每种可能组合的预估效果
注意fit
中Var1
的系数与第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")
A) 我对连续变量 (Var1
) 对以四个不同组为条件的连续因变量 (DV
) 的影响感兴趣,这些组由两个双变量变量 ( 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]
但这似乎过于艰巨而且容易出错。什么是更有效的解决方案?
我想要的输出是 Var1
对 Dummy1
和 Dummy2
的每种可能组合的估计效果。
B) 一旦我知道每个组的 Var1
的估计效果大小,我如何测试任何两个是否在统计上彼此不同?我假设 linearHypothesis()
函数可以提供帮助,但我不知道如何做。谢谢!
完全交互的模型相当于 运行 对每个数据子集的回归,因此如果您的意图确实是:
My desired output is the estimated effect of Var1 for each possible combination of Dummy1 and 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
对应的是每组中的斜率系数,是Var1
对Dummy1
和Dummy2
.
注意fit
中Var1
的系数与第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")