Wie führt man eine orthogonale Regression (kleinste Quadrate) über PCA durch?


29

Ich benutze immer lm()in R, um eine lineare Regression von auf durchzuführen . Diese Funktion gibt einen Koeffizienten so dassyxβ

y=βx.

Heute habe ich etwas über die kleinsten Fehlerquadrate gelernt und diese princomp()Funktion (Hauptkomponentenanalyse, PCA) kann verwendet werden, um sie auszuführen. Es sollte gut für mich sein (genauer). Ich habe einige Tests durchgeführt mit princomp():

r <- princomp( ~ x + y)

Mein Problem ist: Wie interpretiere ich die Ergebnisse? Wie kann ich den Regressionskoeffizienten erhalten? Mit "Koeffizient" meine ich die Zahl , die ich verwenden muss, um den Wert zu multiplizieren , um eine Zahl in der Nähe von .βxy


Einen Moment Jungs, ich bin ein bisschen verwirrt. Schauen Sie sich: zoonek2.free.fr/UNIX/48_R/09.html Dies nennt sich PCA (Principal Component Analysis, auch bekannt als "orthogonale Regression" oder "senkrechte Quadratsummen" oder "kleinste Quadrate") über TLS mit princomp () Nein?
Dail

Nein; Das sind zwei verschiedene Dinge, siehe Wikipedia-Artikel über PCA. Die Tatsache, dass es hier verwendet wird, ist ein Hack (ich weiß nicht, wie genau, aber ich werde es überprüfen); Deshalb die komplexe Extraktion von Koeffizienten.

1
Eine verwandte Frage: stats.stackexchange.com/questions/2691/… und ein Blog-Beitrag wird von einer der Antworten referenziert: cerebralmastication.com/2010/09/…
Jonathan

Antworten:


48

Ordentliche kleinste Quadrate vs. gesamte kleinste Quadrate

Betrachten wir zunächst den einfachsten Fall nur einer (unabhängigen) Prädiktorvariablen . Der Einfachheit halber seien sowohl als auch zentriert, dh der Achsenabschnitt ist immer Null. Der Unterschied zwischen der Standard-OLS-Regression und der "orthogonalen" TLS-Regression wird in dieser (von mir angepassten) Zahl aus der beliebtesten Antwort im beliebtesten Thread auf PCA deutlich:x yxxy

OLS gegen TLS

OLS passt die Gleichung indem quadratische Abstände zwischen beobachteten Werten und vorhergesagten Werten minimiert werden . TLS passt die gleiche Gleichung an, indem quadratische Abstände zwischen Punkten und deren Projektion auf der Linie minimiert werden. In diesem einfachsten Fall ist die TLS-Linie einfach die erste Hauptkomponente der 2D-Daten. Um zu finden , machen Sie PCA an Punkten, dh konstruieren Sie die Kovarianzmatrix und finden Sie ihren ersten Eigenvektor ; dann ist .y y ( x , y ) , β ( x , y ) 2 × 2 Σ v = ( v x , v y ) β = v y / v xy=βxyy^(x,y)β(x,y)2×2Σv=(vx,vy)β=vy/vx

In Matlab:

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

In R:

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

Übrigens führt dies zu einer korrekten Neigung, selbst wenn und nicht zentriert waren (da die integrierten PCA-Funktionen automatisch die Zentrierung durchführen). Berechnen Sie zum Wiederherstellen des Abschnitts .y β 0 = ˉ y - β ˉ xxyβ0=y¯βx¯

OLS vs. TLS, multiple Regression

Bei einer abhängigen Variablen und vielen unabhängigen Variablen (ebenfalls der Einfachheit halber alle zentriert) passt die Regression zu einer GleichungOLS führt die Anpassung durch, indem die quadratischen Fehler zwischen den beobachteten Werten von und den vorhergesagten Werten minimiert werden . TLS führt die Anpassung durch, indem die quadratischen Abstände zwischen beobachteten Punkten und den nächsten Punkten auf der Regressionsebene / Hyperebene minimiert werden.x i y = β 1 x 1 + + β p x p . y y ( x , y ) R p + 1yxi

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

Beachten Sie, dass es keine "Regressionslinie" mehr gibt! Die obige Gleichung gibt eine Hyperebene an : Es ist eine 2D-Ebene, wenn zwei Prädiktoren vorhanden sind, und eine 3D-Hyperebene, wenn drei Prädiktoren vorhanden sind eine Linie). Dennoch kann die Lösung leicht über PCA erhalten werden.

Wie zuvor wird die PCA an Punkten durchgeführt. Dies ergibt Eigenvektoren in Spalten von . Die ersten Eigenvektoren definieren eine dimensionale Hyperebene , die wir brauchen; der letzte (Nummer ) Eigenvektor ist orthogonal dazu. Die Frage ist, wie die Basis von die durch die ersten Eigenvektoren gegeben ist, in die Koeffizienten transformiert werden kann.p + 1 V p p H p + 1 v p + 1 H p β(x,y)p+1VppHp+1vp+1Hpβ

Beachten Sie, dass wenn wir für alle und nur , dann , dh der Vektor liegt in der Hyperebene . Andererseits wissen wir, dass orthogonal dazu ist. Das heißt, ihr Skalarprodukt muss Null sein:xi=0x k = 1 y = β k ( 0 , ... , 1 , ... , β k ) H H V p + 1 = ( v 1 , ... , v p + 1 )ikxk=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.

In Matlab:

 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);

In R:

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

Dies führt wiederum zu korrekten Steigungen, selbst wenn und nicht zentriert sind (da die integrierten PCA-Funktionen automatisch die Zentrierung durchführen). Berechnen Sie zum Wiederherstellen des Abschnitts .y β 0 = ˉ y - ˉ x βxyβ0=y¯x¯β

Beachten Sie zur Überprüfung der Gesundheit, dass diese Lösung mit der vorherigen Lösung übereinstimmt, wenn nur ein einziger Prädiktor . In der Tat ist dann der -Raum 2D, und wenn der erste PCA-Eigenvektor orthogonal zum zweiten (letzten) ist, gilt .( x , y ) v ( 1 ) y / v ( 1 ) x = - v ( 2 ) x / v ( 2 ) yx(x,y)vy(1)/vx(1)=vx(2)/vy(2)

Closed-Form-Lösung für TLS

Überraschenderweise stellt sich heraus, dass es eine geschlossene Formgleichung für . Das folgende Argument stammt aus Sabine van Huffels Buch "Die kleinsten Quadrate" (Abschnitt 2.3.2).β

Sei und die zentrierten Datenmatrizen. Der letzte PCA-Eigenvektor ist ein Eigenvektor der Kovarianzmatrix von mit einem Eigenwert . Wenn es ein Eigenvektor ist, ist es auch . Schreiben Sie die Eigenvektorgleichung auf: Xyvp+1[Xy]σp+12( XX Xy yX yy ) ( β - 1 ) = σ 2vp+1/vp+1=(β1)

(XXXyyXyy)(β1)=σp+12(β1),
Wenn wir das Produkt auf der linken Seite berechnen, erhalten wir sofort das was stark an den bekannten OLS-Ausdruck
βTLS=(XXσp+12I)1Xy,
βOLS=(XX)1Xy.

Multivariate multiple Regression

Dieselbe Formel kann auf den multivariaten Fall verallgemeinert werden, aber selbst um zu definieren, was multivariates TLS tut, wäre etwas Algebra erforderlich. Siehe Wikipedia zu TLS . Multivariate OLS-Regression entspricht einer Reihe von univariaten OLS-Regressionen für jede abhängige Variable, im TLS-Fall ist dies jedoch nicht der Fall.


1
Ich kenne R nicht, wollte aber dennoch R-Schnipsel zum späteren Nachschlagen bereitstellen. Es gibt hier viele Leute, die sich mit R auskennen. Bitte zögern Sie nicht, meine Snippets bei Bedarf zu bearbeiten! Vielen Dank.
Amöbe sagt Reinstate Monica

Netter Beitrag, aber wenn ich fragen darf, was garantiert, dass der Vektor in der Hyperebene liegt? (0,,1,,βk)
JohnK

@ JohnK, ich bin nicht sicher, was genau unklar ist. Wie ich geschrieben habe, seien alle bis auf gleich Null . Wenn Sie dies mit , erhalten Sie . Der Punkt liegt also auf der Hyperebene, die durch die Gleichung . x k = 1 y = & Sigma; β j x j y = β k1 = β k ( 0 , ... , 1 , ... β k ) y = & Sigma; β j x jxixk=1y=βjxjy=βk1=βk(0,,1,βk)y=βjxj
Amöbe sagt Reinstate Monica

Ich scheine diesen Teil falsch verstanden zu haben, aber jetzt ist es klar. Danke auch für die Klarstellung.
JohnK

2
In R bevorzugen Sie möglicherweise "eigen (cov (cbind (x, y))) $ vectors" gegenüber "prcomp (cbind (x, y)) $ rotation", da erstere für größere Vektoren viel schneller ist.
Thomas Browne

9

Basierend auf der naiven GNU Octave-Implementierung, die hier zu finden ist , könnte so etwas (Salzkorn, es ist spät) funktionieren.

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

princompführt eine Hauptkomponentenanalyse anstelle der Regression der kleinsten Quadrate durch. Soweit ich weiß, gibt es weder eine R-Funktion noch ein Paket, das TLS unterstützt. es gibt höchstens Deming-Regression bei MethComp .
Betrachten Sie dies jedoch als einen Vorschlag, der sich höchstwahrscheinlich nicht lohnt.


Ich dachte, Deming im MethComp-Paket wäre TLS - was ist der Unterschied?
mark999

Sie müssen das Fehlerverhältnis für x und y angeben. reines TLS optimiert dies.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.