É possível a interação entre duas variáveis ​​contínuas?

27

Todas as minhas variáveis ​​são contínuas. Não há níveis. É possível ter interação entre as variáveis?

TheCloudlessSky
fonte

Respostas:

31

Sim, porque não? A mesma consideração que para variáveis ​​categóricas se aplicaria neste caso: O efeito de no resultado Y não é o mesmo, dependendo do valor de X 2 . Para ajudar a visualizá-lo, você pode pensar nos valores obtidos por X 1 quando X 2 assume valores altos ou baixos. Ao contrário das variáveis ​​categóricas, aqui a interação é apenas representada pelo produto de X 1 e X 2 . Note que é melhor centralizar suas duas variáveis ​​primeiro (para que o coeficiente de X 1 seja lido como o efeito de X 1 quando XX1YX2X1X2X1X2X1X1 está na média da amostra).X2

Como gentilmente sugerido por @whuber, uma maneira fácil de ver como varia com Y em função de X 2 quando um termo de interação é incluído, é escrever o modelo E ( Y | X ) = β 0 + β 1 X 1 + β 2 X 2 + β 3 X 1 X 2 .X1YX2E(Y|X)=β0+β1X1+β2X2+β3X1X2

Em seguida, pode-se ver que o efeito de um aumento de uma unidade na quando X 2 é realizada constante pode ser expressa como: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

Você pode dar uma olhada em Regressão múltipla: interações de teste e interpretação , por Leona S. Aiken, Stephen G. West e Raymond R. Reno (Sage Publications, 1996), para uma visão geral dos diferentes tipos de efeitos de interação na regressão múltipla. . (Este provavelmente não é o melhor livro, mas está disponível no Google)

Aqui está um exemplo de brinquedo em 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)

onde a saída realmente lê:

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 

E aqui está como os dados simulados se parecem:

texto alternativo

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)

texto alternativo

chl
fonte
5
(+1) Se você tiver tempo e inclinação, poderá reforçar esta resposta expandindo sua alegação de que incluir X1 * X2 faz com que o efeito de X1 em Y varie com X2. Especificamente, um modelo Y = b0 + b1 * X1 + b2 * X2 + b3 * (X1 * X2) + erro também pode ser visto como tendo o formato Y = b0 + (b1 + b3 * X2) * X1 + b2 * X2 + erro, mostrando exatamente como o coeficiente de X1 - que é igual a b1 + b3 * X2 - varia com X2 (e, simetricamente, o coeficiente de X2 varia com X1). Essa é uma forma simples e natural de "interação".
whuber
1
@chl - Obrigado pela resposta. O problema que tenho é que tenho um grande n(11K) e estou usando o MiniTab para fazer um gráfico de interações e leva uma eternidade para calcular, mas não mostra nada. Só não tenho certeza de como vejo se há interação com esse conjunto de dados.
TheCloudlessSky
3
@TheCloudlessSky: Uma abordagem é dividir os dados em compartimentos de acordo com os valores de X1. Plote Y versus X2 bin por bin, procurando alterações na inclinação à medida que os compartimentos variam. Faça o mesmo com os papéis de X1 e X2 invertidos.
whuber
3
@chl A tela da treliça é uma boa ilustração. Fatiar uma variável em quantis de intervalo igual é atraente. Existem outras abordagens. Por exemplo, Tukey recomendou cortar pela metade as caudas: ou seja, corte os valores de X2 em metades na mediana, depois fatie essas metades pelas suas medianas, depois fatie a metade inferior do grupo mais baixo na sua mediana e a metade superior da mais alta grupo em sua mediana e assim por diante, continuando enquanto os novos grupos tiverem dados suficientes.
whuber
1
@whuber Esse é novamente um bom ponto. Vou dar uma olhada na possível implementação do R ou tentar por mim mesmo.
chl