Jak przeprowadzić regresję ortogonalną (suma najmniejszych kwadratów) za pomocą PCA?


29

Zawsze używam lm()w R do regresji liniowej na . Ta funkcja zwraca współczynnik taki, żeyxβ

y=βx.

Dzisiaj dowiedziałem się o całkowitej liczbie najmniejszych kwadratów i tej princomp()funkcji (analiza głównego składnika, PCA) można użyć do jej wykonania. To powinno być dla mnie dobre (dokładniejsze). Zrobiłem kilka testów przy użyciu princomp(), takich jak:

r <- princomp( ~ x + y)

Mój problem brzmi: jak interpretować jego wyniki? Jak mogę uzyskać współczynnik regresji? Przez „współczynnik” rozumiem liczbę , której muszę użyć do pomnożenia wartości celu uzyskania liczby zbliżonej do .βxy


Chwilkę, jestem trochę zmieszany. spójrz na: zoonek2.free.fr/UNIX/48_R/09.html Nazywa się to PCA (Principal Component Analysis, inaczej „regresja ortogonalna” lub „prostopadłe sumy kwadratów” lub „suma najmniejszych kwadratów”), więc myślę, że mówimy o TLS z princomp () Nie?
Dail

Nie; to dwie różne rzeczy, zobacz artykuł w Wikipedii o PCA. Fakt, że jest tu używany, to hack (nie wiem jak dokładny, ale zamierzam to sprawdzić); dlatego złożona ekstrakcja współczynników.

1
Powiązane pytanie: stats.stackexchange.com/questions/2691/…, a na blogu znajduje się jedna z odpowiedzi: cerebralmastication.com/2010/09/...
Jonathan

Odpowiedzi:


48

Zwykłe najmniejsze kwadraty vs. suma najmniejszych kwadratów

Rozważmy najpierw najprostszy przypadek tylko jednej zmiennej predykcyjnej (niezależnej) . Dla uproszczenia, niech x i y są wyśrodkowane, tzn. Przecięcie jest zawsze zerowe. Różnica między standardową regresją OLS i „ortogonalną” regresją TLS jest wyraźnie pokazana na tej (dostosowanej przeze mnie) liczbie z najpopularniejszej odpowiedzi w najpopularniejszym wątku na PCA:xxy

OLS vs TLS

OLS dopasowuje się do równania przez minimalizowanie kwadratów odległości pomiędzy obserwowanymi wartościami ý i przewidywanych wartości y . TLS pasuje do tego samego równania, minimalizując kwadratowe odległości między punktami ( x , y ) i ich rzut na linię. W tym najprostszym przypadku linia TLS jest po prostu pierwszym głównym składnikiem danych 2D. Aby znaleźć β , wykonaj PCA w punktach ( x , y ) , tj. Skonstruuj macierz kowariancji 2 × 2 i znajdź pierwszy wektor własnyy=βxyy^(x,y)β(x,y)2×2v = ( v x , v y ) β = v y / v xΣv=(vx,vy) ; następnie .β=vy/vx

W Matlabie:

 v = pca([x y]);    //# x and y are centered column vectors
 beta = v(2,1)/v(1,1);

W R:

 v <- prcomp(cbind(x,y))$rotation
 beta <- v[2,1]/v[1,1]

Nawiasem mówiąc, to wydajność prawidłowe nachylenie nawet jeśli i nie wyśrodkowany (ponieważ wbudowanej funkcji automatycznego wykonywania centrowania PCA). Aby odzyskać przechwycenie, oblicz .y β 0 = ˉ y - β ˉ xxyβ0=y¯βx¯

OLS vs. TLS, regresja wielokrotna

Biorąc pod uwagę zmienną zależną i wiele zmiennych niezależnych (ponownie wszystkie wyśrodkowane dla uproszczenia), regresja pasuje do równaniaOLS dopasowuje się, minimalizując do kwadratu błędy między obserwowanymi wartościami a wartościami przewidywanymi . TLS dopasowuje się, minimalizując kwadratowe odległości między zaobserwowanymi punktami a najbliższymi punktami na płaszczyźnie regresji / hiperpłaszczyźnie.x i y = β 1 x 1 + + β p x p . y y ( x , y ) R s + 1yxi

y=β1x1++βpxp.
yy^(x,y)Rp+1

Zauważ, że nie ma już „linii regresji”! Powyższe równanie określa hiperpłaszczyznę : jest to płaszczyzna 2D, jeśli istnieją dwa predyktory, hiperpłaszczyzna 3D, jeśli istnieją trzy predyktory itp. Tak więc powyższe rozwiązanie nie działa: nie możemy uzyskać rozwiązania TLS, biorąc tylko pierwszy komputer (który jest linia). Mimo to rozwiązanie można łatwo uzyskać za pomocą PCA.

Tak jak poprzednio, PCA wykonuje się na punktach . Daje to wektory w kolumnach . Pierwsze wektory zdefiniować wymiarową hiperpłaszczyznę że musi; ostatni (liczba ) wektor własny jest do niego ortogonalny. Pytanie brzmi, jak przekształcić podstawę podanej przez pierwszych wektorów własnych do współczynników.p + 1 V p p H p + 1 v p + 1 H p β(x,y)p+1VppHp+1vp+1Hpβ

Zauważ, że jeśli ustawimy dla wszystkich i tylko , wtedy , tj. Wektor leży w hiperpłaszczyzna . Z drugiej strony wiemy, że jest do niego ortogonalny. Czyli ich iloczyn iloczynu musi wynosić zero:I k x k = 1 y = β K ( 0 , ... , 1 , ... , β k ) H H V P + 1 = ( V, 1 , ... , v p + 1 )xi=0ikxk=1y^=βk

(0,,1,,βk)H
Hv k + β k v p + 1 = 0 β k = - v k / v p + 1 .
vp+1=(v1,,vp+1)H
vk+βkvp+1=0βk=vk/vp+1.

W Matlabie:

 v = pca([X y]);    //# X is a centered n-times-p matrix, y is n-times-1 column vector
 beta = -v(1:end-1,end)/v(end,end);

W R:

 v <- prcomp(cbind(X,y))$rotation
 beta <- -v[-ncol(v),ncol(v)] / v[ncol(v),ncol(v)]

Ponownie, to otrzymując odpowiednie terenie, nawet w przypadku i nie wycentrowany (ponieważ wbudowanej funkcji automatycznego wykonywania centrowania PCA). Aby odzyskać przechwytywanie, oblicz .y β 0 = ˉ y - ˉ x βxyβ0=y¯x¯β

W ramach kontroli poczytalności zauważ, że to rozwiązanie pokrywa się z poprzednim w przypadku tylko jednego predyktora . Rzeczywiście, wówczas przestrzeń jest 2D, a zatem biorąc pod uwagę, że pierwszy wektor własny PCA jest ortogonalny do drugiego (ostatniego), .( x , y ), V ( 1 ) Y / V ( 1 ) x = - V ( 2 ) x / v ( 2 ) Yx(x,y)vy(1)/vx(1)=vx(2)/vy(2)

Rozwiązanie w formie zamkniętej dla TLS

Nieoczekiwanie okazuje się, że istnieje równanie o zamkniętej formie dla . Poniższy argument pochodzi z książki Sabine van Huffel „Suma najmniejszych kwadratów” (sekcja 2.3.2).β

Niech i będą wyśrodkowanymi macierzami danych. Ostatni wektor własny PCA jest wektorem własnym macierzy kowariancji o wartości własnej . Jeśli jest to wektor własny, to tak samo jest . Zapisywanie równania wektora własnego: Xyvp+1[Xy]σp+12vp+1/vp+1=(β1)

(XXXyyXyy)(β1)=σp+12(β1),
i obliczając produkt po lewej, natychmiast otrzymujemy, że co mocno przypomina znane wyrażenie OLS
βTLS=(XXσp+12I)1Xy,
βOLS=(XX)1Xy.

Wieloczynnikowa regresja wielokrotna

Tę samą formułę można uogólnić na przypadek wielowymiarowy, ale nawet zdefiniowanie działania TLS wielowymiarowego wymagałoby pewnej algebry. Zobacz Wikipedia na TLS . Wielowymiarowa regresja OLS jest równoważna wiązce jednoczynnikowych regresji OLS dla każdej zmiennej zależnej, ale w przypadku TLS tak nie jest.


1
Nie znam R, ale nadal chciałem udostępnić fragmenty R do wykorzystania w przyszłości. Jest tu wielu ludzi biegle posługujących się językiem R. W razie potrzeby możesz edytować moje fragmenty! Dziękuję Ci.
ameba mówi Przywróć Monikę

(0,,1,,βk)

xixk=1y=βjxjy=βk1=βk(0,,1,βk)y=βjxj
ameba mówi Przywróć Monikę

Wydaje mi się, że źle odczytałem tę część, ale teraz jest jasne. Dziękuję również za wyjaśnienie.
JohnK

2
W R możesz preferować „ wektory własne (cov (cbind (x, y)))) $ ” niż „prcomp (cbind (x, y)) $ rotacja”, ponieważ to pierwsze jest znacznie szybsze dla większych wektorów.
Thomas Browne,

9

Oparta na naiwnej realizacji GNU Octave znaleźć tutaj , coś takiego może (przymrużeniem oka, że jest późno) praca.

tls <- function(A, b){

  n <- ncol(A)
  C <- cbind(A, b)

  V <- svd(C)$v
  VAB <- V[1:n, (n+1):ncol(V)]
  VBB <- V[(n+1):nrow(V), (n+1):ncol(V)]
  return(-VAB/VBB)
}

4

princompuruchamia analizę głównych składników zamiast regresji sumy najmniejszych kwadratów. O ile mi wiadomo, nie ma funkcji R ani pakietu, który obsługuje TLS; w MethComp występuje co najwyżej regresja Deminga .
Proszę jednak potraktować to jako sugestię, że najprawdopodobniej nie jest tego warte.


Myślałem, że Deming w pakiecie MethComp to TLS - jaka jest różnica?
mark999

Musisz podać stosunek błędów na xiy; pure TLS to optymalizuje.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.