Jaki jest przykład doskonałej wielokoliniowości?

12

Jaki jest przykład idealnej kolinearności pod względem macierzy projektowej ?X

Chciałbym przykład, w którym nie można oszacować, ponieważ nie jest odwracalny.β^=(XX)1XY(XX)

TsTeaTime
źródło
Przejrzałem zalecany post dla Colinearity i uznałem, że to wystarczy, aby zrozumieć, ale prosty przykład z wykorzystaniem danych dodałby jasności.
TsTeaTime
2
Co rozumiesz przez „pod względem X i Y”? Kolinearność istnieje wśród zmiennych X, Y nie ma z tym nic wspólnego.
gung - Przywróć Monikę
1
X
Poprawiłem
1
Jako multikoliniowość w pokazuje w osobliwości możesz także przeczytać to pytanie: stats.stackexchange.com/q/70899/3277 . X XXXX
ttnphns

Odpowiedzi:

10

Oto przykład z 3 zmiennymi, , i , powiązanymi równaniemyx1x2

y=x1+x2+ε

gdzieεN(0,1)

Konkretne dane to

         y x1 x2
1 4.520866  1  2
2 6.849811  2  4
3 6.539804  3  6

Jest więc oczywiste, że jest wielokrotnością stąd mamy idealną kolinearność.x2x1

Możemy napisać model jako

Y=Xβ+ε

gdzie:

Y=[4.526.856.54]

X=[112124136]

Więc mamy

XX=[112124136][111123246]=[61116112131163146]

Teraz obliczamy wyznacznik XX :

detXX=6|21313146|11|11311646|+16|11211631|=0

W R możemy to pokazać w następujący sposób:

> x1 <- c(1,2,3)

utworzyć x2wielokrotnośćx1

> x2 <- x1*2

tworzyć Y, liniowej kombinacji x1, x2a niektóre losowości

> y <- x1 + x2 + rnorm(3,0,1)

obseruj to

> summary(m0 <- lm(y~x1+x2))

nie można oszacować wartości x2współczynnika:

Coefficients: (1 not defined because of singularities)
            Estimate Std. Error t value Pr(>|t|)
(Intercept)   3.9512     1.6457   2.401    0.251
x1            1.0095     0.7618   1.325    0.412
x2                NA         NA      NA       NA

Residual standard error: 0.02583 on 1 degrees of freedom
Multiple R-squared:      1,     Adjusted R-squared:  0.9999 
F-statistic: 2.981e+04 on 1 and 1 DF,  p-value: 0.003687

Matryca modelu to:X

> (X <- model.matrix(m0))

(Intercept) x1 x2
1           1  1  2
2           1  2  4
3           1  3  6

Więc jestXX

> (XXdash <- X %*% t(X))
   1  2  3
1  6 11 16
2 11 21 31
3 16 31 46

który nie jest odwracalny, jak pokazuje

> solve(XXdash)
Error in solve.default(XXdash) : 
  Lapack routine dgesv: system is exactly singular: U[3,3] = 0

Lub:

det (XXdash) [1] 0

Robert Long
źródło
22

Oto kilka dość powszechnych scenariuszy zapewniających doskonałą wielokoliniowość, tj. Sytuacje, w których kolumny macierzy projektowej są liniowo zależne. Przypomnijmy z algebry liniowej, że oznacza to liniową kombinację kolumn macierzy projektowej (których współczynniki nie są równe zeru), która jest równa zeru. Podałem kilka praktycznych przykładów, które pomagają wyjaśnić, dlaczego ta pułapka tak często się zdarza - napotkałem prawie wszystkie!

  1. Jedna zmienna jest wielokrotnością drugiej , niezależnie od tego, czy istnieje termin przechwytujący: być może dlatego, że dwukrotnie zarejestrowałeś tę samą zmienną przy użyciu różnych jednostek (np. „Długość w centymetrach” jest dokładnie 100 razy większa niż „długość w metrach”) lub ponieważ zarejestrowałeś zmienną raz jako liczbę surową i raz jako proporcję lub procent, gdy mianownik jest stały (np. „obszar skolonizowanej szalki Petriego” i „procent skolonizowanej szalki Petriego” będą dokładnymi wielokrotnościami, jeśli obszar każdej szalki Petriego jest taka sama). Mamy kolinearność, ponieważ jeśli gdzie w i x są zmiennymi (kolumny macierzy projektu) i awi=axiwxajest stałą skalarną, a następnie jest liniową kombinacją zmiennych równą zero.1(w)a(x)

  2. Jest to termin przechwytują i jedna zmienna różni się od innej poprzez stałą : to się stanie, jeśli centrum zmienną ( ) i obejmują zarówno surowego X i skoncentrowane w w regresji. Stanie się tak również, jeśli twoje zmienne są mierzone w różnych układach jednostek, które różnią się stałą, np. Jeśli w to „temperatura w stopniach Kelvina”, a x jako „temperatura w ° C”, to w i = x i + 273,15 . Jeśli uznamy termin przechwytywania za zmienną, która zawsze ma wartość 1 (reprezentowana jako kolumna jedności,wi=xix¯xwwxwi=xi+273.151, w macierzy obliczeniowej), wówczas posiadaniewi=xi+kdla pewnej stałejkoznacza, że1(w )-1(x )-k(1 n)jest kombinacją liniowąw,xi1kolumny macierzy projektu, która jest równa zero.1nwi=xi+kk1(w)1(x)k(1n)wx1

  3. Istnieje wyraz przechwytujący, a jedna zmienna jest dana przez afiniczną transformację innej : tzn. Masz zmienne i x , powiązane przez w i = a x i + b, gdzie a i b są stałymi. Dzieje się tak na przykład, jeśli znormalizujesz zmienną jako z i = x i - ˉ xwxwi=axi+bab i obejmują zarówno surowiecXi znormalizowanychZzmiennych w regresji. Dzieje się tak również wtedy, gdy zapisujeszwjako „temperaturę w ° F” ixjako „temperaturę w ° C”, ponieważ te układy jednostek nie mają wspólnego zera, ale są powiązane przezwi=1,8xi+32. Lub w kontekście biznesowym, załóżmy, że istnieje stały kosztb(np obejmujące dostawę) dla każdego zamówienia, a także koszt$na jednostkę sprzedanego; a następnie, jeśli$wagito koszt rzęduIixizi=xix¯sxxzwxwi=1.8xi+32b$a$wiixijest liczbą zamówionych jednostek, mamy . Liniowa kombinacja odsetek wynosi 1 ( w ) - a ( x ) - b ( 1 n ) = 0 . Zauważ, że jeśli a = 1 , to (3) obejmuje (2) jako szczególny przypadek; jeśli b = 0 , to (3) obejmuje (1) jako szczególny przypadek.wi=axi+b1(w)a(x)b(1n)=0a=1b=0

  4. Istnieje pojęcie przechwytywania i suma kilku zmiennych jest stała (np. W słynnej „sztucznej pułapce zmiennych”) : na przykład, jeśli masz „odsetek zadowolonych klientów”, „odsetek niezadowolonych klientów” i „odsetek klientów niezadowolonych ani niezadowolony ”, wówczas te trzy zmienne będą zawsze (z wyjątkiem błędu zaokrąglania) sumować do 100. Jedna z tych zmiennych - lub alternatywnie termin przechwytujący - musi zostać usunięta z regresji, aby zapobiec kolinearności. „Sztuczna pułapka zmiennej” występuje, gdy używasz zmiennych wskaźnikowych (częściej, ale rzadziej nazywanych „manekinami”) dla każdego możliwego poziomu zmiennej kategorialnej. Załóżmy na przykład, że wazony są produkowane w kolorach czerwonym, zielonym lub niebieskim. Jeśli zarejestrowałeś zmienną kategorialną „redgreeni bluebyłyby zmiennymi binarnymi, przechowywanymi jak 1dla „tak” i 0dla „nie”), to dla każdej wazy tylko jedna ze zmiennych byłaby jedna, a zatem red + green + blue = 1. Ponieważ dla terminu przecięcia istnieje wektor jedynek, kombinacja liniowa 1(red) + 1(green) + 1(blue) - 1(1) = 0. Zwykle lekarstwem tutaj jest albo upuścić punkt przechwytywania, albo upuścić jeden ze wskaźników (np. Pominąć red), który staje się poziomem odniesienia lub odniesienia. W tym przypadku współczynnik regresji dla greenoznaczałby zmianę średniej odpowiedzi związanej z przejściem z czerwonego wazonu na zielony, utrzymując stałe inne zmienne objaśniające.

  5. large + medium + small = 11(large) + 1(medium) + 1(small) - 1(red) - 1(green) - 1(blue) = 0u,v,w,xui+vi=k1xi+yi=k2k2(u)+k2(v)k1(w)k1(x)=0

  6. lwppi=2li+2wi1(p)2(l)2(w)=0iui$avi$b$c$xxi=aui+bvi+c1(x)a(u)b(v)c(1n)=0red=0green=1blue = 1(1) - 1(red) - 1(green) = 1 - 0 - 1 = 0

  7. Jedna zmienna jest stała i zerowa , niezależnie od tego, czy istnieje termin przechwytujący: w badaniu obserwacyjnym zmienna będzie stała, jeśli twoja próbka nie wykazuje wystarczającej (żadnej!) Zmienności. Mogą występować różnice w populacji, które nie są rejestrowane w próbie, np. Jeśli istnieje bardzo powszechna wartość modalna: być może wielkość próbki jest zbyt mała i dlatego jest mało prawdopodobne, aby zawierała jakiekolwiek wartości, które różniłyby się od trybu, lub twoje pomiary były niewystarczająco dokładne, aby wykryć małe różnice w trybie. Alternatywnie mogą istnieć teoretyczne powody braku zmienności, szczególnie jeśli studiujesz subpopulację. W badaniu właściwości nowo budowanych w Los Angeles nie byłoby zaskoczeniem, że każdy punkt danych ma AgeOfProperty = 0iState = Californiax1(x)0

  8. xxi=k01(x)k(1n)=0

  9. wi=k10xi=k20k2(w)k1(x)=0

  10. knk>nkkR2kpn

Przykłady danych z kodem R.

XXXdet(XX)XXβ^=(XX)1XyXXXzobacz to pytanie Math SE lub to i jego odwrotność .

(1) Jedna kolumna jest wielokrotnością drugiej

# x2 = 2 * x1
# Note no intercept term (column of 1s) is needed
X <- matrix(c(2, 4, 1, 2, 3, 6, 2, 4), ncol = 2, byrow=TRUE)

X
#     [,1] [,2]
#[1,]    2    4
#[2,]    1    2
#[3,]    3    6
#[4,]    2    4


t(X) %*% X
#     [,1] [,2]
#[1,]   18   36
#[2,]   36   72

round(det(t(X) %*% X), digits = 9)
#0

(2) Pojęcie przechwytywania i jedna zmienna różni się od drugiej stałą

# x1 represents intercept term
# x3 = x2 + 2
X <- matrix(c(1, 2, 4, 1, 1, 3, 1, 3, 5, 1, 0, 2), ncol = 3, byrow=TRUE)

X
#     [,1] [,2] [,3]
#[1,]    1    2    4
#[2,]    1    1    3
#[3,]    1    3    5
#[4,]    1    0    2


t(X) %*% X
#     [,1] [,2] [,3]
#[1,]    4    6   14
#[2,]    6   14   26
#[3,]   14   26   54

round(det(t(X) %*% X), digits = 9)
#0

# NB if we drop the intercept, cols now linearly independent
# x2 = x1 + 2 with no intercept column
X <- matrix(c(2, 4, 1, 3, 3, 5, 0, 2), ncol = 2, byrow=TRUE)

X
#     [,1] [,2]
#[1,]    2    4
#[2,]    1    3
#[3,]    3    5
#[4,]    0    2


t(X) %*% X
#     [,1] [,2]
#[1,]   14   26
#[2,]   26   54
# Can you see how this matrix is related to the previous one, and why?

round(det(t(X) %*% X), digits = 9)
#80
# Non-zero determinant so X'X is invertible

(3) Pojęcie przechwytywania i jedna zmienna jest transformacją afiniczną drugiej

# x1 represents intercept term
# x3 = 2*x2 - 3
X <- matrix(c(1, 2, 1, 1, 1, -1, 1, 3, 3, 1, 0, -3), ncol = 3, byrow=TRUE)

X
#     [,1] [,2] [,3]
#[1,]    1    2    1
#[2,]    1    1   -1
#[3,]    1    3    3
#[4,]    1    0   -3


t(X) %*% X
#     [,1] [,2] [,3]
#[1,]    4    6    0
#[2,]    6   14   10
#[3,]    0   10   20

round(det(t(X) %*% X), digits = 9)
#0

# NB if we drop the intercept, cols now linearly independent
# x2 = 2*x1 - 3 with no intercept column
X <- matrix(c(2, 1, 1, -1, 3, 3, 0, -3), ncol = 2, byrow=TRUE)

X
#     [,1] [,2]
#[1,]    2    1
#[2,]    1   -1
#[3,]    3    3
#[4,]    0   -3


t(X) %*% X
#     [,1] [,2]
#[1,]   14   10
#[2,]   10   20
# Can you see how this matrix is related to the previous one, and why?

round(det(t(X) %*% X), digits = 9)
#180
# Non-zero determinant so X'X is invertible

(4) Pojęcie przechwytywania i suma kilku zmiennych jest stała

# x1 represents intercept term
# x2 + x3 = 10
X <- matrix(c(1, 2, 8, 1, 1, 9, 1, 3, 7, 1, 0, 10), ncol = 3, byrow=TRUE)

X
#     [,1] [,2] [,3]
#[1,]    1    2    8
#[2,]    1    1    9
#[3,]    1    3    7
#[4,]    1    0   10


t(X) %*% X
#     [,1] [,2] [,3]
#[1,]    4    6   34
#[2,]    6   14   46
#[3,]   34   46  294

round(det(t(X) %*% X), digits = 9)
#0

# NB if we drop the intercept, then columns now linearly independent
# x1 + x2 = 10 with no intercept column
X <- matrix(c(2, 8, 1, 9, 3, 7, 0, 10), ncol = 2, byrow=TRUE)

X
#     [,1] [,2]
#[1,]    2    8
#[2,]    1    9
#[3,]    3    7
#[4,]    0   10

t(X) %*% X
#     [,1] [,2]
#[1,]   14   46
#[2,]   46  294
# Can you see how this matrix is related to the previous one, and why?

round(det(t(X) %*% X), digits = 9)
#2000
# Non-zero determinant so X'X is invertible

(4a) Pojęcie przechwytywania za pomocą sztucznej zmiennej pułapki

# x1 represents intercept term
# x2 + x3 + x4 = 1
X <- matrix(c(1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0), ncol = 4, byrow=TRUE)

X
#     [,1] [,2] [,3] [,4]
#[1,]    1    0    0    1
#[2,]    1    1    0    0
#[3,]    1    0    1    0
#[4,]    1    1    0    0
#[5,]    1    0    1    0

t(X) %*% X
#     [,1] [,2] [,3] [,4]
#[1,]    5    2    2    1
#[2,]    2    2    0    0
#[3,]    2    0    2    0
#[4,]    1    0    0    1
# This matrix has a very natural interpretation - can you work it out?

round(det(t(X) %*% X), digits = 9)
#0

# NB if we drop the intercept, then columns now linearly independent
# x1 + x2 + x3 = 1 with no intercept column
X <- matrix(c(0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0), ncol = 3, byrow=TRUE)  

X
#     [,1] [,2] [,3]
#[1,]    0    0    1
#[2,]    1    0    0
#[3,]    0    1    0
#[4,]    1    0    0
#[5,]    0    1    0

t(X) %*% X
#     [,1] [,2] [,3]
#[1,]    2    0    0
#[2,]    0    2    0
#[3,]    0    0    1
# Can you see how this matrix is related to the previous one?

round(det(t(X) %*% X), digits = 9)
#4
# Non-zero determinant so X'X is invertible

(5) Dwa podzbiory zmiennych o ustalonej sumie

# No intercept term needed
# x1 + x2 = 1
# x3 + x4 = 1
X <- matrix(c(0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,1,1,0,1,0,0,1,1,0), ncol = 4, byrow=TRUE)

X
#     [,1] [,2] [,3] [,4]
#[1,]    0    1    0    1
#[2,]    1    0    0    1
#[3,]    0    1    1    0
#[4,]    1    0    0    1
#[5,]    1    0    1    0
#[6,]    0    1    1    0

t(X) %*% X
#     [,1] [,2] [,3] [,4]
#[1,]    3    0    1    2
#[2,]    0    3    2    1
#[3,]    1    2    3    0
#[4,]    2    1    0    3
# This matrix has a very natural interpretation - can you work it out?

round(det(t(X) %*% X), digits = 9)
#0

(6) Jedna zmienna jest liniową kombinacją innych

# No intercept term
# x3 = x1 + 2*x2
X <- matrix(c(1,1,3,0,2,4,2,1,4,3,1,5,1,2,5), ncol = 3, byrow=TRUE)

X
#     [,1] [,2] [,3]
#[1,]    1    1    3
#[2,]    0    2    4
#[3,]    2    1    4
#[4,]    3    1    5
#[5,]    1    2    5

t(X) %*% X
#     [,1] [,2] [,3]
#[1,]   15    8   31
#[2,]    8   11   30
#[3,]   31   30   91

round(det(t(X) %*% X), digits = 9)
#0

(7) Jedna zmienna jest stała i zero

# No intercept term
# x3 = 0
X <- matrix(c(1,1,0,0,2,0,2,1,0,3,1,0,1,2,0), ncol = 3, byrow=TRUE)

X
#     [,1] [,2] [,3]
#[1,]    1    1    0
#[2,]    0    2    0
#[3,]    2    1    0
#[4,]    3    1    0
#[5,]    1    2    0

t(X) %*% X
#     [,1] [,2] [,3]
#[1,]   15    8    0
#[2,]    8   11    0
#[3,]    0    0    0

round(det(t(X) %*% X), digits = 9)
#0

(8) Pojęcie przechwytywania i jedna zmienna stała

# x1 is intercept term, x3 = 5
X <- matrix(c(1,1,5,1,2,5,1,1,5,1,1,5,1,2,5), ncol = 3, byrow=TRUE)

X
#     [,1] [,2] [,3]
#[1,]    1    1    5
#[2,]    1    2    5
#[3,]    1    1    5
#[4,]    1    1    5
#[5,]    1    2    5

t(X) %*% X
#     [,1] [,2] [,3]
#[1,]    5    7   25
#[2,]    7   11   35
#[3,]   25   35  125

round(det(t(X) %*% X), digits = 9)
#0

(9) Dwie stałe zmienne

# No intercept term, x2 = 2, x3 = 5
X <- matrix(c(1,2,5,2,2,5,1,2,5,1,2,5,2,2,5), ncol = 3, byrow=TRUE)

X
#     [,1] [,2] [,3]
#[1,]    1    2    5
#[2,]    2    2    5
#[3,]    1    2    5
#[4,]    1    2    5
#[5,]    2    2    5

t(X) %*% X
#     [,1] [,2] [,3]
#[1,]   11   14   35
#[2,]   14   20   50
#[3,]   35   50  125

round(det(t(X) %*% X), digits = 9)
#0

k>n

# Design matrix has 4 columns but only 3 rows
X <- matrix(c(1,1,1,1,1,2,4,8,1,3,9,27), ncol = 4, byrow=TRUE)

X
#     [,1] [,2] [,3] [,4]
#[1,]    1    1    1    1
#[2,]    1    2    4    8
#[3,]    1    3    9   27

t(X) %*% X
#     [,1] [,2] [,3] [,4]
#[1,]    3    6   14   36
#[2,]    6   14   36   98
#[3,]   14   36   98  276
#[4,]   36   98  276  794

round(det(t(X) %*% X), digits = 9)
#0
Silverfish
źródło
4

Kilka trywialnych przykładów pomocnych w intuicji:

  1. x1x2
    • x1=100x2X
  2. x1=1x2x3
    • x2=95x3+32x1X
  3. x1=1x2x3
    • x2=x35x1X

Istnieje wiele sposobów, dzięki którym jedna kolumna danych będzie liniową funkcją innych danych. Niektóre z nich są oczywiste (np. Metry vs. centymetry), podczas gdy inne mogą być bardziej subtelne (np. Wiek i lata nauki dla młodszych dzieci).

x1Xx21

Matthew Gunn
źródło
1
Przykład dotyczący wieku szkolnego i wieku jest bardzo dobry, choć warto podkreślić, że związek utrzymuje się tylko wtedy, gdy wszyscy są jeszcze w szkole! Logiczne przedłużenie tego ma miejsce, gdy masz wiek, lata nauki i lata pracy, co może kontynuować związek po ukończeniu studiów. (Oczywiście w praktyce takie Współliniowość rzadko bywa idealne - zawsze istnieją wyjątki, takie jak dzieci, które rozpoczęły naukę w różnym wieku, ponieważ pochodzą one z innego kraju. - ale często jest to dość ciężkie)
Silverfish
@Silverfish dobre punkty! Właśnie wprowadziłem kilka zmian / poprawek.
Matthew Gunn