uv
maxcov(Xu,Yv).(1)
YVar ( y ) u Var ( X u ) 1 / 2cov(Xu,y)≡Var(Xu)1/2×cor(Xu,y)×Var(y)1/2,st.∥u∥=1.
Como no depende de , tenemos que maximizar . Consideremos , donde los datos se estandarizan individualmente (¡inicialmente cometí el error de escalar su combinación lineal en lugar de y separado!), De modo que ; sin embargo, y depende de . En conclusión,
maximizar la correlación entre el componente latente y la variable de respuesta no dará los mismos resultados.Var(y)uVar(Xu)1/2×cor(Xu,y)X=[x_1;x_2]
x1x2Var(x1)=Var(x2)=1Var(Xu)≠1u.
Debería agradecer a Arthur Tenenhaus que me señaló en la dirección correcta.
El uso de vectores de peso unitario no es restrictivo y algunos paquetes ( pls. regression
en plsgenomics , basados en el código del paquete anterior de Wehrens pls.pcr
) devolverán vectores de peso no estandarizados (pero con componentes latentes aún de la norma 1), si se solicita. Pero la mayoría de los paquetes PLS devolverán estandarizado , incluido el que usó, especialmente aquellos que implementan el algoritmo SIMPLS o NIPALS; Encontré una buena visión general de ambos enfoques en la presentación de Barry M. Wise, Regresión de propiedades de mínimos cuadrados parciales (PLS) y diferencias entre algoritmos , pero la quimiometríauLa viñeta también ofrece una buena discusión (págs. 26-29). También es de particular importancia el hecho de que la mayoría de las rutinas de PLS (al menos la que conozco en R) suponen que usted proporciona variables no estandarizadas porque el centrado y / o escalado se maneja internamente (esto es particularmente importante cuando se realiza la validación cruzada, por ejemplo )
Dada la restricción , se encuentra que el vector esu′u=1u
u=X′y∥X′y∥.
Usando una pequeña simulación, se puede obtener de la siguiente manera:
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
Puede comparar los resultados anteriores ( u=[0.5792043;0.8151824]
en particular) con lo que darían los paquetes R. Por ejemplo, usando NIPALS del paquete de quimiometría (otra implementación que sé que está disponible en el paquete mixOmics ), obtendríamos:
library(chemometrics)
pls1_nipals(X, y, 1)$W # X weights [0.5792043;0.8151824]
pls1_nipals(X, y, 1)$P # X loadings
Se obtendrían resultados similares con plsr
su algoritmo PLS de kernel predeterminado:
> library(pls)
> as.numeric(loading.weights(plsr(y ~ X, ncomp=1)))
[1] 0.5792043 0.8151824
En todos los casos, podemos verificar que sea de longitud 1.u
Siempre que cambie su función para optimizar a una que lea
f <- function(u) cov(y, X%*%(u/sqrt(crossprod(u))))
y normalizar u
después ( u <- u/sqrt(crossprod(u))
), debería estar más cerca de la solución anterior.
Nota al margen : Como criterio (1) es equivalente a
se puede encontrar como el vector singular izquierdo de la SVD de correspondiente al valor propio más grande:u X ′ Y
maxu′X′Yv,
uX′Y
svd(crossprod(X, y))$u
En el caso más general (PLS2), una forma de resumir lo anterior es decir que los primeros vectores canónicos PLS son la mejor aproximación de la matriz de covarianza de X e Y en ambas direcciones.
Referencias
- Tenenhaus, M (1999). L'approche PLS . Revue de Statistique Appliquée , 47 (2), 5-40.
- ter Braak, CJF y de Jong, S (1993). La función objetivo de la regresión de mínimos cuadrados parciales . Journal of Chemometrics , 12, 41–54.
- Abdi, H (2010). Regresión de mínimos cuadrados parciales y proyección sobre regresión de estructura latente (Regresión PLS) . Revisiones interdisciplinarias de Wiley: Estadísticas computacionales , 2, 97-106.
- Boulesteix, AL y Strimmer, K (2007). Mínimos cuadrados parciales: una herramienta versátil para el análisis de datos genómicos de alta dimensión . Briefings in Bioinformatics , 8 (1), 32-44.
pls
paquete y la regresión de PLS en este documento de JSS .