Regresión de mínimos cuadrados parciales en R: ¿por qué PLS en datos estandarizados no es equivalente a maximizar la correlación?

12

Soy muy nuevo en mínimos cuadrados parciales (PLS) y trato de entender la salida de la función R plsr()en el plspaquete. Simulemos datos y ejecutemos el 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)

Yo estaba esperando que los siguientes números de a y b

> ( 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

se calculan para maximizar

> cor(y, a*xx1+b*xx2)
          [,1]
[1,] 0.9981291

pero este no es exactamente el caso:

> 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

¿Es un error numérico o no entiendo la naturaleza de a y b ?

También me gustaría saber cuáles son estos coeficientes:

> p$coef
, , 1 comps

           yy
xx1 0.6672848
xx2 0.6368604 

EDITAR : Ahora veo lo que p$coefes:

> 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 

Así que creo que tengo razón sobre la naturaleza de y b .ab

EDITAR: en vista de los comentarios de @chl, siento que mi pregunta no es lo suficientemente clara, así que permítanme proporcionar más detalles. En mi ejemplo, hay un vector de respuestas y una matriz X de dos columnas de predictores y utilizo la versión normalizada ˜ Y de Y y la versión normalizada ˜ X de X (centrada y dividida por desviaciones estándar). La definición del primer componente PLS t 1 es t 1 = a ˜ X 1 + b ˜ X 2 con a y bYXY~YX~Xt1t1=aX~1+bX~2abelegido con el fin de tener un valor máximo del producto interior . Por lo tanto, es equivalente a maximizar la correlación entre t 1 e Y , ¿no es así?t1,Y~t1Y

Stéphane Laurent
fuente
2
La regresión PLS maximiza las puntuaciones de los factores (que se calculan como el producto de datos sin procesar con covarianza de vector (es) de carga , no de correlación (como se hace en el Análisis de correlación canónica). Hay una buena descripción general del plspaquete y la regresión de PLS en este documento de JSS .
chl
1
Dado que todos los vectores están centrados y normalizados, la covarianza es correlación, ¿no es así? Lo sentimos, pero el documento JSS es demasiado técnico para un principiante.
Stéphane Laurent
En general, hay un proceso de deflación asimétrica (resultante de la regresión de la combinación lineal de un bloque sobre la combinación lineal del otro) que complica un poco las cosas. Proporcioné una imagen esquemática en esta respuesta . Hervé Abdi dio una visión general de la regresión de PLS, y la Encuesta de métodos de mínimos cuadrados parciales (PLS) de Wegelin también es bastante útil. En este punto, probablemente debería convertir todos esos comentarios en una respuesta ...
chl
YXY~YX~Xt1t1=aX~1+bX~2abt1,Y~
a2+b21?coef.mvr

Respuestas:

17

uv

maxcov(Xu,Yv).(1)
YVar ( y ) u Var ( X u ) 1 / 2
cov(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. regressionen 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 esuu=1u

u=XyXy.

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 plsrsu 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 udespué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

maxuXYv,
uXY
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

  1. Tenenhaus, M (1999). L'approche PLS . Revue de Statistique Appliquée , 47 (2), 5-40.
  2. 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.
  3. 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.
  4. 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.
chl
fuente
Gracias chl. Leeré tu respuesta siempre que sea posible (¡y seguramente votaré y haré clic en la marca de verificación!)
Stéphane Laurent
Acabo de leer su respuesta, felicidades y muchas gracias.
Stéphane Laurent