È possibile l'interazione tra due variabili continue?


Risposte:


31

Si perché no? La stessa considerazione delle variabili categoriali si applicherebbe in questo caso: l'effetto di sull'esito non è lo stesso a seconda del valore di . Per aiutarti a visualizzarlo, puoi pensare ai valori presi da quando assume valori alti o bassi. Contrariamente alle variabili categoriali, qui l'interazione è rappresentata dal prodotto di e . Da notare, è meglio centrare prima le due variabili (in modo tale che il coefficiente per dire legga come l'effetto di quando è alla sua media campionaria).X1YX2X1X2X1X2X1X1X2

Come gentilmente suggerito da @whuber, un modo semplice per vedere come varia con in funzione di quando è incluso un termine di interazione, è scrivere il modello .X1YX2E(Y|X)=β0+β1X1+β2X2+β3X1X2

Quindi, si può vedere che l'effetto di un aumento di un'unità di quando viene mantenuto costante può essere espresso come: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

Allo stesso modo, l'effetto quando viene aumentato di un'unità mentre si tiene costante è . Ciò dimostra perché è difficile interpretare gli effetti di ( ) e ( ) isolatamente. Ciò sarà persino più complicato se entrambi i predittori sono altamente correlati. È anche importante tenere presente l'assunto di linearità che viene fatto in un modello così lineare.X2X1β2+β3X1X1β1X2β2

Puoi dare un'occhiata alla regressione multipla: test e interpretazione delle interazioni , di Leona S. Aiken, Stephen G. West e Raymond R. Reno (Sage Publications, 1996), per una panoramica dei diversi tipi di effetti di interazione nella regressione multipla . (Questo probabilmente non è il miglior libro, ma è disponibile tramite Google)

Ecco un esempio di giocattolo in 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)

dove l'output effettivamente legge:

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 

Ed ecco come appaiono i dati simulati:

testo alternativo

Per illustrare il secondo commento di @ whuber, puoi sempre guardare le variazioni di in funzione di a diversi valori di (ad esempio, tercili o decili); i display a traliccio sono utili in questo caso. Con i dati sopra, procederemo come segue: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)

testo alternativo


5
(+1) Se hai il tempo e l'inclinazione potresti rafforzare questa risposta espandendo la tua affermazione secondo cui l'inclusione di X1 * X2 fa sì che l'effetto di X1 su Y vari con X2. In particolare, un modello Y = b0 + b1 * X1 + b2 * X2 + b3 * (X1 * X2) + può anche essere visto come avente la forma Y = b0 + (b1 + b3 * X2) * X1 + b2 * X2 + errore, mostrando esattamente come il coefficiente di X1 - che equivale a b1 + b3 * X2 - varia con X2 (e, simmetricamente, il coefficiente di X2 varia con X1). Questa è una forma semplice e naturale di "interazione".
whuber

1
@chl - Grazie per la risposta. Il problema che ho è che ho un grande n(11K) e sto usando MiniTab per fare un diagramma di interazioni e ci vuole un'eternità per calcolare ma non mostra nulla. Non sono sicuro di come vedo se c'è interazione con questo set di dati.
TheCloudlessSky il

3
@TheCloudlessSky: un approccio consiste nel suddividere i dati in bin in base ai valori di X1. Traccia Y contro X2 bin per bin, cercando le variazioni di pendenza al variare dei contenitori. Fai lo stesso con i ruoli di X1 e X2 invertiti.
whuber

3
@chl Il display a traliccio è una bella illustrazione. Affettare una variabile in quantili a intervallo uguale è interessante. Ci sono altri approcci. Ad esempio, Tukey ha raccomandato di tagliare dimezzando le code: ovvero, tagliare i valori X2 a metà nella mediana, quindi tagliare quelle metà per la loro mediana, quindi tagliare la metà inferiore del gruppo più basso alla sua mediana e la metà superiore della più alta gruppo alla sua mediana, e così via, continuando fino a quando i nuovi gruppi avranno abbastanza dati.
whuber

1
@whuber Anche questo è un buon punto. Daremo un'occhiata alla possibile implementazione di R o la proverò da solo.
chl,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.