Die PLS-Regression beruht auf iterativen Algorithmen (z. B. NIPALS, SIMPLS). Ihre Beschreibung der Hauptideen ist richtig: Wir suchen einen (PLS1, eine Antwortvariable / mehrere Prädiktoren) oder zwei (PLS2, mit verschiedenen Modi, mehreren Antwortvariablen / mehreren Prädiktoren) Vektoren von Gewichten, (und v ) Zum Beispiel, um eine lineare Kombination der ursprünglichen Variablen zu bilden, so dass die Kovarianz zwischen Xu und Y (Yv, für PLS2) maximal ist. Konzentrieren wir uns darauf, das erste Gewichtungspaar zu extrahieren, das der ersten Komponente zugeordnet ist. Formal lautet das Kriterium zur Optimierung
max cov ( X u , Y v )uv
In Ihrem Fall Y ist univariate, so dass es zu maximierenbeträgt
COV ( X u , y ) ≡ Var ( X u ) 1 / 2 × cor ( X u , y ) × Var ( y ) 1 / 2 ,
maxcov(Xu,Yv).(1)
Y
Da
Var ( y ) hängt nicht von
u , müssen wir maximieren
Var ( X u ) 1 / 2 × cor ( X u , y ) . Überlegen wir uns, wo die Daten individuell standardisiert sind (ich habe anfangs den Fehler gemacht, Ihre Linearkombination anstelle von
x 1 und
x 2 separat zuskalieren!), So dass
Var ( x 1 )cov(Xu,y)≡Var(Xu)1/2×cor(Xu,y)×Var(y)1/2,st.∥u∥=1.
Var(y)uVar(Xu)1/2×cor(Xu,y)X=[x_1;x_2]
x1x2 ; Jedoch
Var ( X u ) ≠ 1 undabhängig von
u . Zusammenfassend lässt sich sagen, dass die
Maximierung der Korrelation zwischen der latenten Komponente und der Antwortvariablen nicht zu den gleichen Ergebnissen führtVar(x1)=Var(x2)=1Var(Xu)≠1u .
Ich sollte Arthur Tenenhaus danken der mich in die richtige Richtung wies.
pls. regression
pls.pcr
u , aber der ChemometrieVignette bietet auch eine gute Diskussion (S. 26-29). Von besonderer Bedeutung ist auch die Tatsache, dass die meisten PLS-Routinen (zumindest die, die ich in R kenne) davon ausgehen, dass Sie nicht standardisierte Variablen bereitstellen, da die Zentrierung und / oder Skalierung intern erfolgt (dies ist besonders wichtig, wenn Sie beispielsweise eine Kreuzvalidierung durchführen ).
u′u=1u
u=X′y∥X′y∥.
Mit einer kleinen Simulation kann es wie folgt erhalten werden:
set.seed(101)
X <- replicate(2, rnorm(100))
y <- 0.6*X[,1] + 0.7*X[,2] + rnorm(100)
X <- apply(X, 2, scale)
y <- scale(y)
# NIPALS (PLS1)
u <- crossprod(X, y)
u <- u/drop(sqrt(crossprod(u))) # X weights
t <- X%*%u
p <- crossprod(X, t)/drop(crossprod(t)) # X loadings
Sie können die obigen Ergebnisse ( u=[0.5792043;0.8151824]
insbesondere) mit den Ergebnissen von R-Paketen vergleichen. Wenn Sie beispielsweise NIPALS aus dem Chemometrics- Paket verwenden (eine andere mir bekannte Implementierung ist im mixOmics- Paket verfügbar ), erhalten Sie Folgendes :
library(chemometrics)
pls1_nipals(X, y, 1)$W # X weights [0.5792043;0.8151824]
pls1_nipals(X, y, 1)$P # X loadings
Ähnliche Ergebnisse würden mit plsr
und seinem Standard-Kernel-PLS-Algorithmus erzielt :
> library(pls)
> as.numeric(loading.weights(plsr(y ~ X, ncomp=1)))
[1] 0.5792043 0.8151824
u Länge 1 hat.
Vorausgesetzt, Sie ändern Ihre Funktion, um sie auf eine lesbare zu optimieren
f <- function(u) cov(y, X%*%(u/sqrt(crossprod(u))))
und u
danach normalisieren (u <- u/sqrt(crossprod(u))
), du solltest näher an der obigen Lösung sein.
maxu′X′Yv,
uX′Y
svd(crossprod(X, y))$u
Im allgemeineren Fall (PLS2) kann man zusammenfassend sagen, dass die ersten kanonischen PLS-Vektoren die beste Approximation der Kovarianzmatrix von X und Y in beide Richtungen sind.
Verweise
- Tenenhaus, M (1999). L'approche PLS . Revue de Statistique Appliquée , 47 (2), 5-40.
- ter Braak, CJF und de Jong, S. (1993). Die objektive Funktion der partiellen Regression der kleinsten Quadrate . Journal of Chemometrics , 12, 41–54.
- Abdi, H (2010). Partielle Regression der kleinsten Quadrate und Projektion auf die latente Strukturregression (PLS-Regression) . Wiley Interdisciplinary Reviews: Computational Statistics , 2, 97-106.
- Boulesteix, AL und Strimmer, K (2007). Partial Least Squares: ein vielseitiges Tool zur Analyse hochdimensionaler Genomdaten . Briefings in Bioinformatics , 8 (1), 32-44.
pls
In diesem JSS-Dokument finden Sie einen guten Überblick über das Paket und die PLS-Regression .