Jaki jest przykład idealnej kolinearności pod względem macierzy projektowej ?
Chciałbym przykład, w którym nie można oszacować, ponieważ nie jest odwracalny.
Jaki jest przykład idealnej kolinearności pod względem macierzy projektowej ?
Chciałbym przykład, w którym nie można oszacować, ponieważ nie jest odwracalny.
Odpowiedzi:
Oto przykład z 3 zmiennymi, , i , powiązanymi równaniem
gdzie
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ść.
Możemy napisać model jako
gdzie:
Więc mamy
Teraz obliczamy wyznacznik :
W R możemy to pokazać w następujący sposób:
> x1 <- c(1,2,3)
utworzyć x2
wielokrotnośćx1
> x2 <- x1*2
tworzyć Y, liniowej kombinacji x1
, x2
a 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 x2
współ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 <- model.matrix(m0))
(Intercept) x1 x2
1 1 1 2
2 1 2 4
3 1 3 6
Więc jest
> (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
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!
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 ajest stałą skalarną, a następnie jest liniową kombinacją zmiennych równą zero.
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,, 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.
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 - ˉ x 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ęduIixijest 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.
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ą „red
green
i blue
byłyby zmiennymi binarnymi, przechowywanymi jak 1
dla „tak” i 0
dla „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 green
oznaczałby zmianę średniej odpowiedzi związanej z przejściem z czerwonego wazonu na zielony, utrzymując stałe inne zmienne objaśniające.
large + medium + small = 1
1(large) + 1(medium) + 1(small) - 1(red) - 1(green) - 1(blue) = 0
red=0
green=1
blue = 1(1) - 1(red) - 1(green) = 1 - 0 - 1 = 0
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 = 0
iState = California
Przykłady danych z kodem R.
zobacz 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
# 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
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).