Ist eine Interaktion zwischen zwei stetigen Variablen möglich?

27

Alle meine Variablen sind stetig. Es gibt keine Levels. Ist es möglich, überhaupt eine Interaktion zwischen den Variablen zu haben?

TheCloudlessSky
quelle

Antworten:

31

Ja, warum nicht? In diesem Fall gilt die gleiche Überlegung wie für kategoriale Variablen: Die Auswirkung von auf das Ergebnis Y ist abhängig vom Wert von X 2 nicht gleich . Zur besseren Veranschaulichung können Sie sich die Werte von X 1 vorstellen, wenn X 2 hohe oder niedrige Werte annimmt. Im Gegensatz zu kategorialen Variablen wird die Interaktion hier nur durch das Produkt von X 1 und X 2 dargestellt . Bemerkenswerterweise ist es besser, zuerst die beiden Variablen zu zentrieren (so dass der Koeffizient für beispielsweise X 1 als die Auswirkung von X 1 bei X giltX1Y.X2X1X2X1X2X1X1 liegt im Stichprobenmittel).X2

Wie von @whuber freundlicherweise vorgeschlagen, besteht ein einfacher Weg, um zu sehen, wie mit Y als Funktion von X 2 variiert, wenn ein Interaktionsterm enthalten ist, darin, das Modell E ( Y | X ) = β 0 + β 1 X aufzuschreiben 1 + β 2 X 2 + β 3 X 1 X 2 .X1Y.X2E(Y.|X)=β0+β1X1+β2X2+β3X1X2

Dann ist ersichtlich, dass der Effekt einer Erhöhung von eine Einheit, wenn X 2 konstant gehalten wird, ausgedrückt werden kann als: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

Unter Multiple Regression: Interaktionen testen und interpretieren (Leona S. Aiken, Stephen G. West und Raymond R. Reno (Sage Publications, 1996)) finden Sie einen Überblick über die verschiedenen Arten von Interaktionseffekten bei multipler Regression . (Dies ist wahrscheinlich nicht das beste Buch, aber über Google erhältlich.)

Hier ist ein Spielzeugbeispiel 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)

wo die Ausgabe tatsächlich lautet:

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 

Und so sehen die simulierten Daten aus:

Alt-Text

Y.X2X1

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)

Alt-Text

chl
quelle
5
(+1) Wenn Sie Zeit und Neigung haben, können Sie diese Antwort verstärken, indem Sie Ihre Behauptung erweitern, dass die Einbeziehung von X1 * X2 die Auswirkung von X1 auf Y mit X2 variiert. Insbesondere kann ein Modell Y = b0 + b1 * X1 + b2 * X2 + b3 * (X1 * X2) + Fehler auch als mit der Form Y = b0 + (b1 + b3 * X2) * X1 + b2 * X2 angesehen werden + Fehler, der genau zeigt, wie der Koeffizient von X1 - der b1 + b3 * X2 entspricht - mit X2 variiert (und symmetrisch der Koeffizient von X2 mit X1 variiert). Das ist eine einfache, natürliche Form der "Interaktion".
Whuber
1
@chl - Danke für die Antwort. Das Problem, das ich habe, ist, dass ich ein großes n(11K) habe und MiniTab verwende, um einen Interaktionsplot zu erstellen. Die Berechnung dauert ewig , zeigt aber nichts an. Ich bin mir nur nicht sicher, wie ich sehe, ob es eine Interaktion mit diesem Datensatz gibt.
TheCloudlessSky
3
@TheCloudlessSky: Ein Ansatz besteht darin, die Daten gemäß den Werten von X1 in Klassen aufzuteilen. Zeichnen Sie Y gegen X2 Behälter für Behälter und achten Sie auf Änderungen der Neigung, wenn die Behälter variieren. Machen Sie dasselbe mit vertauschten Rollen von X1 und X2.
whuber
3
@chl Die Gitteranzeige ist eine schöne Illustration. Das Schneiden einer Variablen in Quantile mit gleichem Intervall ist attraktiv. Es gibt andere Ansätze. Zum Beispiel empfahl Tukey das Schneiden durch Halbieren der Schwänze: Das heißt, schneiden Sie die X2-Werte im Median in Hälften, schneiden Sie diese Hälften nach ihren Medianen und schneiden Sie dann die untere Hälfte der niedrigsten Gruppe im Median und die obere Hälfte der höchsten Gruppe im Median usw., solange die neuen Gruppen über genügend Daten verfügen.
whuber
1
@whuber Das ist wieder ein guter Punkt. Ich werde einen Blick auf eine mögliche R-Implementierung werfen oder es selbst versuchen.
Chl