uv
maxcov(Xu,Yv).(1)
YVar ( y ) u Var ( X u ) une / deux × cor ( X u , ycov(Xu,y)≡Var(Xu)1/2×cor(Xu,y)×Var(y)1/2,st.∥u∥=1.
Puisque ne dépend pas de , nous devons maximiser . Considérons , où les données sont standardisées individuellement (j'ai fait l'erreur de mettre à l'échelle votre combinaison linéaire au lieu de et séparément!), De sorte que ; cependant, et dépend de . En conclusion,
maximiser la corrélation entre la composante latente et la variable de réponse ne donnera pas les mêmes résultatsVar(y)uVar(Xu)1/2×cor(Xu,y)X=[x_1;x_2]
x1x2Var(x1)=Var(x2)=1Var(Xu)≠1u.
Je dois remercier Arthur Tenenhaus qui m'a pointé dans la bonne direction.
L'utilisation de vecteurs de poids unitaire n'est pas restrictive et certains packages ( pls. regression
dans plsgenomics , basés sur le code du package précédent de Wehrens) renverront des pls.pcr
vecteurs de poids non standardisés (mais avec des composants latents toujours de la norme 1), si demandé. Mais la plupart des packages PLS renverront normalisé , y compris celui que vous avez utilisé, notamment ceux implémentant l'algorithme SIMPLS ou NIPALS; J'ai trouvé un bon aperçu des deux approches dans la présentation de Barry M. Wise, Propriétés de la régression des moindres carrés partiels (PLS), et des différences entre les algorithmes , mais la chimiométrieula vignette offre également une bonne discussion (pp. 26-29). Le fait que la plupart des routines PLS (au moins celle que je connais dans R) supposent que vous fournissez des variables non standardisées car le centrage et / ou la mise à l'échelle sont gérés en interne est particulièrement important (cela est particulièrement important lors de la validation croisée, par exemple). ).
Étant donné la contrainte , le vecteur estu′u=1u
u=X′y∥X′y∥.
En utilisant une petite simulation, elle peut être obtenue comme suit:
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
Vous pouvez comparer les résultats ci-dessus ( u=[0.5792043;0.8151824]
en particulier) avec ce que les packages R donneraient. Par exemple, en utilisant NIPALS du chimiométrie package ( une autre mise en œuvre que je sais est disponible dans le mixOmics package), on obtiendrait:
library(chemometrics)
pls1_nipals(X, y, 1)$W # X weights [0.5792043;0.8151824]
pls1_nipals(X, y, 1)$P # X loadings
Des résultats similaires seraient obtenus avec plsr
son algorithme PLS de noyau par défaut:
> library(pls)
> as.numeric(loading.weights(plsr(y ~ X, ncomp=1)))
[1] 0.5792043 0.8151824
Dans tous les cas, on peut vérifier que est de longueur 1.u
À condition de changer votre fonction pour optimiser celle qui lit
f <- function(u) cov(y, X%*%(u/sqrt(crossprod(u))))
et normalisez u
ensuite ( u <- u/sqrt(crossprod(u))
), vous devriez être plus proche de la solution ci-dessus.
Sidenote : Comme le critère (1) est équivalent à
peut être trouvé comme le vecteur singulier gauche de la SVD de correspondant à la plus grande valeur propre:u X ′ Y
maxu′X′Yv,
uX′Y
svd(crossprod(X, y))$u
Dans le cas plus général (PLS2), une façon de résumer ce qui précède est de dire que les premiers vecteurs canoniques PLS sont la meilleure approximation de la matrice de covariance de X et Y dans les deux directions.
Les références
- Tenenhaus, M (1999). L'approche PLS . Revue de Statistique Appliquée , 47 (2), 5-40.
- ter Braak, CJF et de Jong, S (1993). La fonction objective de la régression des moindres carrés partiels . Journal of Chemometrics , 12, 41–54.
- Abdi, H (2010). Régression des moindres carrés partiels et projection sur la régression de la structure latente (régression PLS) . Wiley Interdisciplinary Reviews: Computational Statistics , 2, 97-106.
- Boulesteix, AL et Strimmer, K (2007). Moindres carrés partiels: un outil polyvalent pour l'analyse de données génomiques de haute dimension . Briefings in Bioinformatics , 8 (1), 32-44.
pls
package et de la régression PLS dans ce document JSS .