Je suis très nouveau dans les moindres carrés partiels (PLS) et j'essaie de comprendre la sortie de la fonction R plsr()
dans le pls
package. Simulons les données et exécutons le PLS:
library(pls)
n <- 50
x1 <- rnorm(n); xx1 <- scale(x1)
x2 <- rnorm(n); xx2 <- scale(x2)
y <- x1 + x2 + rnorm(n,0,0.1); yy <- scale(y)
p <- plsr(yy ~ xx1+xx2, ncomp=1)
Je m'attendais à ce que les nombres suivants et
> ( w <- loading.weights(p) )
Loadings:
Comp 1
xx1 0.723
xx2 0.690
Comp 1
SS loadings 1.0
Proportion Var 0.5
> a <- w["xx1",]
> b <- w["xx2",]
> a^2+b^2
[1] 1
sont calculés afin de maximiser
> cor(y, a*xx1+b*xx2)
[,1]
[1,] 0.9981291
mais ce n'est pas exactement le cas:
> f <- function(ab){
+ a <- ab[1]; b <- ab[2]
+ cor(y, a*xx1+b*xx2)
+ }
> optim(c(0.7,0.6), f, control=list(fnscale=-1))
$par
[1] 0.7128259 0.6672870
$value
[1] 0.9981618
Est-ce une erreur numérique ou est-ce que je comprends mal la nature de et ?b
J'aimerais aussi savoir quels sont ces coefficients:
> p$coef
, , 1 comps
yy
xx1 0.6672848
xx2 0.6368604
EDIT : Maintenant, je vois ce qui p$coef
est:
> x <- a*xx1+b*xx2
> coef(lm(yy~0+x))
x
0.9224208
> coef(lm(yy~0+x))*a
x
0.6672848
> coef(lm(yy~0+x))*b
x
0.6368604
Je pense donc que j'ai raison sur la nature de et .b
EDIT: Au vu des commentaires de @chl, je pense que ma question n'est pas assez claire, alors laissez-moi vous donner plus de détails. Dans mon exemple, il y a un vecteur de réponses et une matrice deux colonnes de prédicteurs et j'utilise la version normalisée de et la version normalisée de (centrée et divisée par les écarts-types). La définition du premier composant PLS est avec et choisis pour avoir une valeur maximale du produit intérieur .X ~ Y Y ~ X X t 1 t 1 = a ~ X 1 + b ~ X 2 a b ⟨ t 1 , ~ Y de t 1 YPar conséquent, cela revient à maximiser la corrélation entre et , n'est-ce pas?
la source
pls
package et de la régression PLS dans ce document JSS .?coef.mvr
Réponses:
X=[x_1;x_2]
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 (u la 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). ).
pls. regression
dans plsgenomics , basés sur le code du package précédent de Wehrens) renverront despls.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étrieÉtant donné la contrainte , le vecteur estu′u=1 u
En utilisant une petite simulation, elle peut être obtenue comme suit:
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:Des résultats similaires seraient obtenus avec
plsr
son algorithme PLS de noyau par défaut:Dans tous les cas, on peut vérifier que est de longueur 1.u
À condition de changer votre fonction pour optimiser celle qui lit
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
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
la source