Czy standaryzowanie zmiennych niezależnych zmniejsza kolinearność?

13

Natknąłem się na bardzo dobry tekst na Bayes / MCMC. IT sugeruje, że standaryzacja zmiennych niezależnych sprawi, że algorytm MCMC (Metropolis) będzie bardziej wydajny, ale może także zmniejszyć (wiele) kolinearność. Czy to może być prawda? Czy powinienem to robić standardowo (przepraszam).

Kruschke 2011, Doing Bayesian Data Analysis. (AP)

edycja: na przykład

     > data(longley)
     > cor.test(longley$Unemployed, longley$Armed.Forces)

Pearson's product-moment correlation

     data:  longley$Unemployed and longley$Armed.Forces 
     t = -0.6745, df = 14, p-value = 0.5109
     alternative hypothesis: true correlation is not equal to 0 
     95 percent confidence interval:
     -0.6187113  0.3489766 
     sample estimates:
      cor 
     -0.1774206 

     > standardise <- function(x) {(x-mean(x))/sd(x)}
     > cor.test(standardise(longley$Unemployed), standardise(longley$Armed.Forces))

Pearson's product-moment correlation

     data:  standardise(longley$Unemployed) and standardise(longley$Armed.Forces) 
     t = -0.6745, df = 14, p-value = 0.5109
      alternative hypothesis: true correlation is not equal to 0 
     95 percent confidence interval:
      -0.6187113  0.3489766 
      sample estimates:
       cor 
     -0.1774206 

Nie zmniejszyło to korelacji, a zatem ograniczało liniową zależność wektorów.

Co się dzieje?

R

rosser
źródło

Odpowiedzi:

19

To wcale nie zmienia kolinearności między głównymi efektami. Skalowanie też nie. Żadna transformacja liniowa tego nie zrobi. Zmienia się korelacja między głównymi efektami i ich interakcjami. Nawet jeśli A i B są niezależne z korelacją 0, korelacja między A i A: B będzie zależała od czynników skali.

Wypróbuj poniższe w konsoli R. Pamiętaj, że rnormpo prostu generuje losowe próbki z rozkładu normalnego z ustawionymi wartościami populacji, w tym przypadku 50 próbek. scaleFunkcja standaryzuje próbkę do średniej 0 i 1 SD.

set.seed(1) # the samples will be controlled by setting the seed - you can try others
a <- rnorm(50, mean = 0, sd = 1)
b <- rnorm(50, mean = 0, sd = 1)
mean(a); mean(b)
# [1] 0.1004483 # not the population mean, just a sample
# [1] 0.1173265
cor(a ,b)
# [1] -0.03908718

Przypadkowa korelacja jest bliska 0 dla tych niezależnych próbek. Teraz znormalizuj do średniej 0 i SD 1.

a <- scale( a )
b <- scale( b )
cor(a, b)
# [1,] -0.03908718

Ponownie, jest to dokładnie ta sama wartość, mimo że średnia wynosi 0, a SD = 1 dla obu ai b.

cor(a, a*b)
# [1,] -0.01038144

Jest to również bardzo blisko zera (a * b można uznać za termin interakcji)

Zwykle jednak SD i średnia predyktorów różnią się nieco, więc zmieńmy się b. Zamiast pobrać nową próbkę przeskaluję oryginał, baby uzyskać średnią 5, a SD 2.

b <- b * 2 + 5
cor(a, b)
 # [1] -0.03908718

Znów ta znajoma korelacja, którą widzieliśmy przez cały czas. Skalowanie nie ma wpływu na korelację między ai b. Ale!!

cor(a, a*b)
# [1,] 0.9290406

Teraz będzie to miało znaczną korelację, którą można usunąć poprzez centrowanie i / lub standaryzację. Zwykle wybieram tylko centrowanie.

Jan
źródło
1
+1 za wyczerpującą i zrozumiałą odpowiedź (z kodem!)
Peter Flom - Przywróć Monikę
1
Jest to również przydatne, jeśli chcesz dołączyć, powiedzmy, kwadratowy termin.
Aniko,
absolutnie Aniko
John
1
Najlepsza odpowiedź - dzięki za to. Mógłbym również uczynić tę książkę niesprawiedliwą, błędnie ją interpretując, ale być może warto było odsłonić moją ignorancję.
rosser 10.10.11
7

Jak już wspomnieli inni, normalizacja nie ma nic wspólnego z kolinearnością.

Idealna kolinearność

XμXσX

ZX=XμXσX

ma średnią i odchylenie standardowe biorąc pod uwagę właściwości oczekiwanej wartości i wariancji, że , i , , gdzie oznacza rv, a są stałymi.μZ=0σZ=1E(X+a)=E(X)+aE(bX)=bE(X)Var(X+a)=Var(X)Var(bX)=b2Var(X)Xa,b

Mówimy, że dwie zmienne i są idealnie współliniowe, jeśli istnieją takie wartości i któreXYλ0λ1

Y=λ0+λ1X

co następuje, jeśli ma średnią i odchylenie standardowe , to ma średnią i standardowe odchylenie . Teraz, gdy standaryzujemy obie zmienne (usuwamy ich średnie i dzielimy przez standardowe odchylenia), otrzymujemy ...μ X σ X Y μ Y = λ 0 + λ 1 μ X σ Y = λ 1 σ X Z X = Z XXμXσXYμY=λ0+λ1μXσY=λ1σXZX=ZX

Korelacja

Oczywiście idealna kolinearność nie jest czymś, co często byśmy widzieli, ale problemem mogą być również silnie skorelowane zmienne (i są to gatunki spokrewnione z kolinearnością). Czy normalizacja wpływa na korelację? Porównaj następujące wykresy pokazujące dwie skorelowane zmienne na dwóch wykresach przed i po skalowaniu: wprowadź opis zdjęcia tutaj

Można dostrzec różnicę? Jak widać celowo usunąłem etykiety osi, aby przekonać cię, że nie oszukuję, zobacz wykresy z dodanymi etykietami:

wprowadź opis zdjęcia tutaj

Z matematycznego punktu widzenia, jeśli istnieje korelacja

Corr(X,Y)=Cov(X,Y)Var(X)Var(Y)

potem mamy zmienne współliniowe

Corr(X,Y)=E[(XμX)(YμY)]σXσY=E[(XμX)(λ0+λ1Xλ0λ1μX)]σXλ1σX=E[(XμX)(λ1Xλ1μX)]σXλ1σX=E[(XμX)λ1(XμX)]σXλ1σX=λ1E[(XμX)(XμX)]σXλ1σX=E[(XμX)(XμX)]σXσX

teraz, ponieważ ,Cov(X,X)=Var(X)

=Cov(X,X)σX2=Var(X)Var(X)=1

Podczas gdy ze zmiennymi znormalizowanymi

Corr(ZX,ZY)=E[(ZX0)(ZY0)]1×1=Cov(ZX,ZY)=Var(ZX)=1

ponieważ ...ZX=ZY

Na koniec zauważ, że to , o czym mówi Kruschke , to to, że standaryzacja zmiennych ułatwia życie samplerowi Gibbsa i prowadzi do zmniejszenia korelacji między przecięciem i nachyleniem w prezentowanym modelu regresji. Nie twierdzi, że standaryzacja zmiennych zmniejsza kolinearność między zmiennymi.

Tim
źródło
0

Standaryzacja nie wpływa na korelację między zmiennymi. Pozostają dokładnie takie same. Korelacja przechwytuje synchronizację kierunku zmiennych. W standaryzacji nie ma nic, co zmienia kierunek zmiennych.

Jeśli chcesz wyeliminować wielokoliniowość między swoimi zmiennymi, sugeruję zastosowanie analizy głównej składowej (PCA). Jak wiadomo PCA jest bardzo skuteczne w eliminowaniu problemu wielokoliniowości. Z drugiej strony PCA sprawia, że ​​połączone zmienne (główne składniki P1, P2 itd.) Są raczej nieprzejrzyste. Model PCA jest zawsze o wiele trudniejszy do wyjaśnienia niż bardziej tradycyjny model wielowymiarowy.

Sympa
źródło
Nowoczesną alternatywą, często lepszą, jest regularyzacja.
kjetil b halvorsen
Testowałem wybór zmiennych między standardowymi algorytmami krokowymi a LASSO. I LASSO jest w bardzo odległej sekundzie. LASSO karze zmienne wpływy, może wybierać słabe zmienne zamiast silniejszych zmiennych. Może nawet powodować zmiany znaków zmiennych. I, dzieli wszystkie ramy znaczenia statystycznego, przedziały ufności i przedziały prognozowania. LASSO może czasami działać. Ale spójrz bardzo uważnie na wykresy MSE vs. Lambda i współczynniki vs. wykresy Lambda. Tam możesz wizualnie obserwować, czy Twój model LASSO działał.
Sympa
0

Nie zmniejsza kolinearności, może zmniejszać VIF. Zwykle używamy VIF jako wskaźnika obaw o kolinearność.

Źródło: http://blog.minitab.com/blog/adventures-in-statistics-2/what-are-the-effects-of-multicollinearity-and-when-can-i-ignore-them

Bill Chen
źródło
2
Witamy na stronie. Obecnie jest to raczej komentarz niż odpowiedź. Możesz go rozwinąć, być może podając streszczenie informacji pod linkiem, lub możemy przekonwertować go na komentarz. Ponadto moje czytanie powiązanego postu nie jest do końca takie, że standaryzacja zmniejsza VIF bez zmniejszania kolinearności. Ich przykład jest bardzo konkretny i bardziej dopracowany.
gung - Przywróć Monikę
-3

Standaryzacja jest powszechnym sposobem ograniczenia kolinearności. (Powinieneś być w stanie bardzo szybko zweryfikować, czy to działa, wypróbowując go na kilku parach zmiennych). To, czy robisz to rutynowo, zależy od tego, jak duży jest problem kolinearności w twoich analizach.

Edycja: Widzę, że byłem w błędzie. To, co robi standaryzacja, polega jednak na zmniejszeniu kolinearności z warunkami produktu (warunki interakcji).

rolando2
źródło
Hmm, mógłbyś wyjaśnić? Standaryzacja zmienia jedynie średnią i wariancję zmiennej losowej (odpowiednio do 0 i 1). Nie powinno to zmieniać korelacji między dwiema zmiennymi. Widzę, jak standaryzacja może poprawić wydajność obliczeniową, ale nie w jaki sposób zmniejsza wielokolonowość.
Charlie,
Nie, zgubiłem ... jak to może zmienić liniową zależność elementów kolumny w macierzy predyktorów. (Czy nie o to chodzi w kolinearności?)
rosser
Chociaż nie jest prawdą, że normalizacja zmienia kolinearność w czysto matematycznym sensie, może poprawić stabilność numeryczną algorytmów do rozwiązywania układów liniowych. To może być przyczyną zamieszania w tej odpowiedzi.
whuber
Standaryzacja po prostu nie zmniejsza wielokoliniowości. Zwykle wcale nie zmienia to korelacji między zmiennymi.
Sympa,