Возможно ли взаимодействие между двумя непрерывными переменными?

27

Все мои переменные являются непрерывными. Там нет уровней. Возможно ли даже иметь взаимодействие между переменными?

TheCloudlessSky
источник

Ответы:

31

Да, почему бы и нет? В этом случае будет применяться то же соображение, что и для категориальных переменных: влияние на результат не одинаково в зависимости от значения . Чтобы помочь визуализировать это, вы можете думать о значениях, принятых когда принимает высокие или низкие значения. В отличие от категориальных переменных, здесь взаимодействие просто представлено произведением и . Следует отметить, что лучше сначала расположить две переменные по центру (чтобы коэффициент, скажем, читался как эффект когда находится в среднем по выборке).X1YX2X1X2X1X2X1X1X2

Как любезно предложено @whuber, простой способ увидеть, как изменяется в зависимости от как функции когда включается член взаимодействия, - это записать модель .X1YX2E(Y|X)=β0+β1X1+β2X2+β3X1X2

Затем можно видеть, что эффект увеличения единицу, когда поддерживается постоянным, может быть выражен как:X1X2

E(Y|X1+1,X2)E(Y|X1,X2)=β0+β1(X1+1)+β2X2+β3(X1+1)X2(β0+β1X1+β2X2+β3X1X2)=β1+β3X2

Аналогично, эффект, когда увеличивается на одну единицу при константы равен . Это показывает, почему трудно интерпретировать эффекты ( ) и ( ) изолированно. Это будет даже сложнее, если оба предиктора сильно коррелируют. Также важно учитывать предположение о линейности, которое делается в такой линейной модели.X2X1β2+β3X1X1β1X2β2

Вы можете взглянуть на Множественную регрессию: тестирование и интерпретацию взаимодействий Леоны С. Айкен, Стивена Г. Уэста и Рэймонда Р. Рено (Sage Publications, 1996), чтобы получить обзор различных видов эффектов взаимодействия в множественной регрессии. , (Возможно, это не самая лучшая книга, но она доступна через Google)

Вот игрушечный пример в R:

library(mvtnorm)
set.seed(101)
n <- 300                      # sample size
S <- matrix(c(1,.2,.8,0,.2,1,.6,0,.8,.6,1,-.2,0,0,-.2,1), 
            nr=4, byrow=TRUE) # cor matrix
X <- as.data.frame(rmvnorm(n, mean=rep(0, 4), sigma=S))
colnames(X) <- c("x1","x2","y","x1x2")
summary(lm(y~x1+x2+x1x2, data=X))
pairs(X)

где вывод фактически читает:

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) -0.01050    0.01860  -0.565    0.573    
x1           0.71498    0.01999  35.758   <2e-16 ***
x2           0.43706    0.01969  22.201   <2e-16 ***
x1x2        -0.17626    0.01801  -9.789   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Residual standard error: 0.3206 on 296 degrees of freedom
Multiple R-squared: 0.8828, Adjusted R-squared: 0.8816 
F-statistic: 743.2 on 3 and 296 DF,  p-value: < 2.2e-16 

А вот как выглядят смоделированные данные:

альтернативный текст

Чтобы проиллюстрировать второй комментарий @ whuber, вы всегда можете посмотреть на вариации как функцию от при различных значениях (например, терцили или децили); решетчатые дисплеи полезны в этом случае. С данными выше, мы будем действовать следующим образом:YX2X1

library(Hmisc)
X$x1b <- cut2(X$x1, g=5) # consider 5 quantiles (60 obs. per group)
coplot(y~x2|x1b, data=X, panel = panel.smooth)

альтернативный текст

хл
источник
5
(+1) Если у вас есть время и желание, вы можете усилить этот ответ, расширив свое утверждение о том, что включение X1 * X2 приводит к тому, что влияние X1 на Y зависит от X2. В частности, модель Y = b0 + b1 * X1 + b2 * X2 + b3 * (X1 * X2) + ошибка также может рассматриваться как имеющая форму Y = b0 + (b1 + b3 * X2) * X1 + b2 * X2 + ошибка, точно показывающая, как коэффициент X1, который равен b1 + b3 * X2, изменяется в зависимости от X2 (и, симметрично, коэффициент X2 изменяется в зависимости от X1). Это простая, естественная форма «взаимодействия».
whuber
1
@chl - Спасибо за ответ. Проблема, которая у меня есть, заключается в том, что у меня большой n(11 КБ) и я использую MiniTab для построения графика взаимодействий, и для его расчета требуется вечность, но он ничего не показывает. Я просто не уверен, как я вижу , есть ли взаимодействие с этим набором данных.
TheCloudlessSky
3
@TheCloudlessSky: Один из подходов состоит в том, чтобы разделить данные на бункеры в соответствии со значениями X1. График Y по сравнению с бункером X2 за бином, ища изменения наклона при изменении бункеров. Сделайте то же самое с ролями X1 и X2 в обратном порядке.
whuber
3
@chl Дисплей с решеткой - хорошая иллюстрация. Нарезка одной переменной в равных интервалах квантилей привлекательна. Есть и другие подходы. Например, Тьюки рекомендуется нарезкой по сокращению вдвое хвостов: то есть, нарезать значения X2 на две половины по медиане, а затем разрезать эти половинки по их медианам, а затем разрезать нижнюю половину самой низки группы на своем среднем и верхняя половину из самых высоких медиана группы и т. д. продолжается до тех пор, пока у новых групп достаточно данных.
whuber
1
@whuber Это снова хороший момент. Я посмотрю на возможную реализацию R или попробую сам.
ЧЛ