Przesiewowa (multi)kolinearność w modelu regresji

Mam nadzieję, że to nie będzie pytanie "pytaj i odpowiadaj"... here goes: (multi)kolinearność odnosi się do bardzo wysokich korelacji między predyktorami w modelu regresji. Jak je leczyć... cóż, czasami nie trzeba "leczyć" koliniowości, ponieważ nie wpływa to na sam model regresji, ale interpretację efektu poszczególnych predyktorów.

Jednym ze sposobów na wykrycie koliniowości jest umieszczenie każdego predyktora jako zmiennej zależnej, A innych predyktorów jako niezależnych zmienne, określić R2, i jeśli jest większy niż .9 (lub .95), możemy uznać predyktor za zbędny. Jest to jedna "metoda"... a co z innymi podejściami? Niektóre z nich są czasochłonne, jak wykluczenie predykatorów z modelu i obserwowanie zmian współczynnika b - powinny być zauważalnie różne.

Oczywiście zawsze musimy pamiętać o konkretnym kontekście / celu analizy... Czasami jedynym lekarstwem jest powtórzenie badania, ale w tej chwili interesują mnie różne sposoby z badań przesiewowych redundantnych predyktorów, gdy (multi)koliniowość występuje w modelu regresji.

Author: dbliss, 2010-06-15

5 answers

Funkcja kappa() może pomóc. Oto symulowany przykład:

> set.seed(42)
> x1 <- rnorm(100)
> x2 <- rnorm(100)
> x3 <- x1 + 2*x2 + rnorm(100)*0.0001    # so x3 approx a linear comb. of x1+x2
> mm12 <- model.matrix(~ x1 + x2)        # normal model, two indep. regressors
> mm123 <- model.matrix(~ x1 + x2 + x3)  # bad model with near collinearity
> kappa(mm12)                            # a 'low' kappa is good
[1] 1.166029
> kappa(mm123)                           # a 'high' kappa indicates trouble
[1] 121530.7

I idziemy dalej, czyniąc trzeci regresor coraz bardziej kolinearnym:

> x4 <- x1 + 2*x2 + rnorm(100)*0.000001  # even more collinear
> mm124 <- model.matrix(~ x1 + x2 + x4)
> kappa(mm124)
[1] 13955982
> x5 <- x1 + 2*x2                        # now x5 is linear comb of x1,x2
> mm125 <- model.matrix(~ x1 + x2 + x5)
> kappa(mm125)
[1] 1.067568e+16
> 

Użyto przybliżeń, Zobacz help(kappa) Po szczegóły.

 38
Author: Dirk Eddelbuettel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-15 03:06:15

Aby dodać do tego, co Dirk powiedział o metodzie liczby warunkowej, zasadą jest, że wartości CN > 30 indicate severe collinearity. Inne metody, poza numerem warunku, obejmują:

1) wyznacznik kowariancji macierz, która waha się od 0 (doskonała Collinearity) do 1 (No Collinearity)

# using Dirk's example
> det(cov(mm12[,-1]))
[1] 0.8856818
> det(cov(mm123[,-1]))
[1] 8.916092e-09

2) używając faktu, że wyznacznik macierzy diagonalnej jest iloczynem wartości własnych = > obecność jednej lub więcej małych wartości własnych wskazuje na koliniowość

> eigen(cov(mm12[,-1]))$values
[1] 1.0876357 0.8143184

> eigen(cov(mm123[,-1]))$values
[1] 5.388022e+00 9.862794e-01 1.677819e-09

3) Wartość współczynnika inflacji wariancji (VIF). VIF dla predyktora i wynosi 1 / (1-R_i^2), gdzie R_i^2 jest R^2 z regresji predyktora i wobec pozostałych predyktorów. Kolinearność występuje wtedy, gdy VIF dla co najmniej jednej zmiennej niezależnej jest duża. Zasada kciuka: VIF > 10 is of concern. Dla implementacji w R zobacz tutaj . Chciałbym również skomentować, że użycie R^2 do określania koliniowości powinno iść w parze z wizualnym badaniem rozrzutu, ponieważ pojedynczy outlier może "powodować" kolinearność tam, gdzie nie istnieje, lub może ukrywać kolinearność tam, gdzie istnieje.

 33
Author: George Dontas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-16 09:14:50

Może Ci się spodobać karta referencyjna Vito Ricciego " funkcje R do analizy regresji" http://cran.r-project.org/doc/contrib/Ricci-refcard-regression.pdf

Zwięźle wymienia wiele przydatnych funkcji związanych z regresją w R, w tym funkcje diagnostyczne. W szczególności wymienia funkcję vif z pakietu car, która może oceniać wielokolinearność. http://en.wikipedia.org/wiki/Variance_inflation_factor

Rozważanie wielokolinearności często idzie ręka w rękę z zagadnieniami oceny zmiennego znaczenia. Jeśli dotyczy to ciebie, może sprawdź pakiet relaimpo: http://prof.beuth-hochschule.de/groemping/relaimpo/

 17
Author: Jeromy Anglim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-15 09:08:29

Zobacz także punkt 9.4 w tej książce: praktyczna regresja i Anova za pomocą R [[6]}.

Kolinearność można wykryć na kilka sposobów:

  1. Badanie macierzy korelacji predyktorów ujawni Duże koliniarności pary.

  2. Regresja x_i dla wszystkich innych predyktorów daje R^2_i. Repeat dla wszystkich predyktorów. R^2_i bliskie Jedynce oznacza problem - można znaleźć kombinację liniową.

  3. Zbadaj wartości własne t(X) %*% X, gdzie X oznacza macierz modelu; małe wartości własne wskazują problem. 2-normalną liczbę warunkową można przedstawić jako stosunek największej do najmniejszej niezerowej wartości pojedynczej macierzy ($\kappa = \sqrt{\lambda_1/\lambda_p}$; zobacz ?kappa); \kappa >= 30 jest uważany za duży.

 8
Author: rcs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-26 01:44:47

Ponieważ na razie nie ma wzmianki o VIF, dodam swoją odpowiedź. Współczynnik inflacji wariancji>10 zwykle wskazuje na poważną redundancję między zmiennymi predykcyjnymi. VIF wskazuje Współczynnik, o który wariancja współefektywności zmiennej zwiększyłaby się, gdyby nie była wysoce skorelowana z innymi zmiennymi.

vif() jest dostępny w pakiecie cars i stosowany do obiektu klasy (lm). Zwraca vif X1, x2 . . . xn w obiekcie lm(). Dobrym pomysłem jest wykluczenie zmiennych z vif >10 lub wprowadzenie przekształceń do zmiennych z vif>10.

 7
Author: vagabond,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-25 20:50:05