Czy możliwa jest interakcja między dwiema zmiennymi ciągłymi?

27

Wszystkie moje zmienne są ciągłe. Nie ma poziomów. Jest to możliwe nawet mieć interakcji między zmiennymi?

TheCloudlessSky
źródło

Odpowiedzi:

31

Tak, czemu nie? W takim przypadku zastosowanie miałaby taka sama uwaga, jak w przypadku zmiennych kategorialnych: Wpływ na wynik nie jest taki sam w zależności od wartości . Aby pomóc w wizualizacji, możesz pomyśleć o wartościach pobranych przez gdy przyjmuje wysokie lub niskie wartości. W przeciwieństwie do zmiennych kategorialnych, tutaj interakcja jest reprezentowana przez iloczyn i . Warto zauważyć, że lepiej najpierw wyśrodkować dwie zmienne (aby współczynnik dla powiedzmy odczytywał efekt gdy jest na swojej średniej próbki).X1YX2X1X2X1X2X1X1X2

Jak uprzejmie sugeruje @whuber, łatwym sposobem na sprawdzenie, w jaki sposób zmienia się z jako funkcją gdy uwzględniony jest termin interakcji, należy zapisać model .X1YX2E(Y|X)=β0+β1X1+β2X2+β3X1X2

Następnie można zauważyć, że efekt jednostronnego wzrostu gdy jest utrzymywany na stałym poziomie, można wyrazić jako: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

Podobnie efekt, gdy zostanie zwiększony o jedną jednostkę przy jednoczesnym utrzymaniu stałej to . To pokazuje, dlaczego trudno jest interpretować działanie ( ) i ( ) w oderwaniu. Będzie to nawet bardziej skomplikowane, jeśli oba predyktory będą silnie skorelowane. Ważne jest również, aby pamiętać o założeniu liniowości przyjętym w takim modelu liniowym.X2X1X 1 β 1 X 2 β 2β2+β3X1X1β1X2β2

Możesz zapoznać się z regresją wielokrotną: testowaniem i interpretacją interakcji , autorstwa Leony S. Aiken, Stephena G. Westa i Raymonda R. Reno (Sage Publications, 1996), dla przeglądu różnych rodzajów efektów interakcji w regresji wielokrotnej . (To prawdopodobnie nie jest najlepsza książka, ale jest dostępna za pośrednictwem Google)

Oto przykład zabawki w 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)

gdzie wynik faktycznie brzmi:

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 

A oto jak wyglądają symulowane dane:

alternatywny tekst

Aby zilustrować drugi komentarz @ whubera, zawsze możesz spojrzeć na odmiany jako funkcję przy różnych wartościach (np. Tercile lub decyle); W tym przypadku przydatne są wyświetlacze kratowe. W przypadku powyższych danych postępowalibyśmy w następujący sposób:X 2 X 1YX2X1

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)

alternatywny tekst

chl
źródło
5
(+1) Jeśli masz czas i skłonność, możesz wzmocnić tę odpowiedź, rozszerzając swoje twierdzenie, że włączenie X1 * X2 powoduje, że wpływ X1 na Y zmienia się wraz z X2. W szczególności model Y = b0 + b1 * X1 + b2 * X2 + b3 * (X1 * X2) + błąd można również postrzegać jako mający postać Y = b0 + (b1 + b3 * X2) * X1 + b2 * X2 + błąd, pokazujący dokładnie, jak współczynnik X1 - który jest równy b1 + b3 * X2 - zmienia się z X2 (i symetrycznie współczynnik X2 zmienia się z X1). To prosta, naturalna forma „interakcji”.
whuber
1
@chl - Dziękujemy za odpowiedź. Problem, który mam, polega na tym, że mam duży n(11 KB) i używam MiniTab do wykonania wykresu interakcji, a jego obliczenie trwa wieczność, ale niczego nie pokazuje. Ja po prostu nie wiem, jak widzę, jeśli istnieje interakcja ze zbioru danych.
TheCloudlessSky
3
@TheCloudlessSky: Jednym podejściem jest podzielenie danych na przedziały zgodnie z wartościami X1. Rysuj Y względem X2 bin po bin, szukając zmian nachylenia w zależności od pojemników. Zrób to samo z odwróconą rolą X1 i X2.
whuber
3
@chl Wyświetlanie kratki jest dobrą ilustracją. Krojenie jednej zmiennej w kwantylach o równych odstępach jest atrakcyjne. Istnieją inne podejścia. Np. Tukey zalecił krojenie na pół ogona: to znaczy pokroić wartości X2 na połówki na środkowej, następnie pokroić te połowy na ich środkowe, a następnie pokroić dolną połowę najniższej grupy na jej środkową i górną połowę najwyższej grupa na swojej medianie i tak dalej, dopóki nowe grupy będą miały wystarczającą ilość danych.
whuber
1
@ whuber To znowu dobra uwaga. Przyjrzę się możliwej implementacji R lub wypróbuję ją sam.
chl