2016-05-24 6 views
0

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() может помочь, но я не могу понять, как это сделать. Благодаря!

+0

вам нужно выполнить 'fit $ rates ['Var1']' с кавычками. – agenis

ответ

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 

Перехват здесь соответствует средству в каждом графе oup, натянутой на две фиктивные переменные (в отличие от разницы этого значения с общим значением, которое вы получаете от полностью взаимодействующей модели регрессии), а Var1 соответствует коэффициенту наклона в каждой группе, что является оценочным эффектом Var1 для каждая возможная комбинация Dummy1 и Dummy2.

Обратите внимание на соответствие один-к-одному коэффициента Var1 в fit, а коэффициент оценивается в строке 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")