Soy muy nuevo en mínimos cuadrados parciales (PLS) y trato de entender la salida de la función R plsr()
en el pls
paquete. 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 y
> ( 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 y ?
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$coef
es:
> 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 .
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 belegido 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í?
fuente
pls
paquete y la regresión de PLS en este documento de JSS .?coef.mvr
Respuestas:
X=[x_1;x_2]
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 (u La 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 )
pls. regression
en plsgenomics , basados en el código del paquete anterior de Wehrenspls.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íaDada la restricción , se encuentra que el vector esu′u=1 u
Usando una pequeña simulación, se puede obtener de la siguiente manera:
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:Se obtendrían resultados similares con
plsr
su algoritmo PLS de kernel predeterminado:En todos los casos, podemos verificar que sea de longitud 1.u
Siempre que cambie su función para optimizar a una que lea
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
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
fuente