Regressione dei minimi quadrati parziali in R: perché PLS su dati standardizzati non equivale a massimizzare la correlazione?


12

Sono molto nuovo nei minimi quadrati parziali (PLS) e cerco di capire l'output della funzione R plsr()nel plspacchetto. Simuliamo i dati ed eseguiamo il 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)

Mi aspettavo che i seguenti numeri eab

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

sono calcolati per massimizzare

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

ma questo non è esattamente il 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

Si tratta di un errore numerico, o devo fraintendere la natura e ?ab

Vorrei anche sapere quali sono questi coefficienti:

> p$coef
, , 1 comps

           yy
xx1 0.6672848
xx2 0.6368604 

EDIT : Ora vedo cosa p$coefè:

> 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 

Quindi penso che ho ragione sulla natura di e .bab

MODIFICA: Alla luce dei commenti di @chl, la mia domanda non è abbastanza chiara, quindi permettimi di fornire maggiori dettagli. Nel mio esempio c'è un vettore di risposte e una matrice a due colonne di predittori e io uso la versione normalizzata di e la versione normalizzata di (centrata e divisa per deviazioni standard). La definizione del primo componente PLS è con e scelti in modo da avere un valore massimo del prodotto interno .X ~ Y Y ~ X X t 1 t 1 = un ~ X 1 + b ~ X 2 un b t 1 , ~ Yt 1 YYXY~YX~Xt1t1=aX~1+bX~2abt1,Y~Quindi equivale a massimizzare la correlazione tra e , non è vero?t1Y


2
La regressione di PLS massimizza i punteggi dei fattori (che sono calcolati come il prodotto di dati grezzi con la covarianza dei vettore dei carichi) , non della correlazione (come avviene nell'analisi della correlazione canonica). C'è una buona panoramica del plspacchetto e della regressione PLS in questo documento JSS .
chl

1
Poiché tutti i vettori sono centrati e normalizzati, la covarianza è correlazione, no? Ci dispiace ma il documento JSS è troppo tecnico per un principiante.
Stéphane Laurent

In generale, esiste un processo di deflazione asimmetrico (derivante dalla regressione della combinazione lineare di un blocco sulla combinazione lineare dell'altro) che complica un po 'le cose. Ho fornito un quadro schematico in questa risposta . Hervé Abdi ha fornito una panoramica generale della regressione di PLS e anche i metodi di Wegelin Survey of Partial Least Squares (PLS) sono abbastanza utili. A questo punto, dovrei probabilmente convertire tutti quei commenti in una risposta ...
chl

Nel mio esempio c'è un vettore di risposte e una matrice a due colonne di predittori e io uso la versione normalizzata di e la versione normalizzata di (centrata e divisa per deviazioni standard). Mia definizione del primo componente PLS è con e scelti in modo da avere un valore massimo del prodotto scalare . Non è la buona definizione? X ~ Y Y ~ X X t 1 t 1 = un ~ X 1 + b ~ X 2 un b t 1 , ~ YYXY~YX~Xt1t1=aX~1+bX~2abt1,Y~
Stéphane Laurent

Siamo spiacenti, @ Stéphane, perché i miei commenti sopra non hanno tenuto conto del fatto che hai richiesto solo un componente (quindi la deflazione non svolge un ruolo critico qui). Tuttavia, sembra che la tua funzione di ottimizzazione non imponga vettori di peso della norma unitaria, in modo che alla fine. (a proposito, ti darà maggiori informazioni su quali siano questi "coefficienti", ma lo hai già scoperto tu apparentemente.)a2+b21?coef.mvr
chl

Risposte:


17

La regressione di PLS si basa su algoritmi iterativi (ad es. NIPALS, SIMPLS). La descrizione delle idee principali è corretta: cerchiamo uno (PLS1, una variabile di risposta / predittori multipli) o due (PLS2, con diverse modalità, variabili di risposta multipla / predittori multipli) vettore (i) di pesi, (e ) , diciamo, per formare combinazioni lineari delle variabili originali in modo tale che la covarianza tra Xu e Y (Yv, per PLS2) sia massima. Concentriamoci sull'estrazione della prima coppia di pesi associati al primo componente. Formalmente, il criterio per ottimizzare le letture Nel tuo caso, è univariato, quindi equivale a massimizzare uv

maxcov(Xu,Yv).(1)
Y
cov(Xu,y)Var(Xu)1/2×cor(Xu,y)×Var(y)1/2,st.u=1.
Dal momento che non dipende da , dobbiamo massimizzare . Consideriamo , dove i dati sono standardizzati individualmente (inizialmente ho commesso l'errore di ridimensionare la combinazione lineare invece di e separatamente!), In modo che ; tuttavia, e dipende . In conclusione, massimizzare la correlazione tra la componente latente e la variabile di risposta non produrrà gli stessi risultatiVar(y)uVar(Xu)1/2×cor(Xu,y)X=[x_1;x_2]x1x2Var(x1)=Var(x2)=1Var(Xu)1u.

Dovrei ringraziare Arthur Tenenhaus che mi ha indicato la giusta direzione.

L'uso di vettori di peso unitario non è restrittivo e alcuni pacchetti ( pls. regressionin plsgenomics , basati sul codice del pacchetto precedente di Wehrens pls.pcr) restituiranno vettori di peso non standardizzati (ma con componenti latenti ancora conformi alla norma 1), se richiesto. Ma la maggior parte dei pacchetti PLS restituirà standardizzato , incluso quello che hai usato, in particolare quelli che implementano l'algoritmo SIMPLS o NIPALS; Ho trovato una buona panoramica di entrambi gli approcci nella presentazione di Barry M. Wise, Regressione delle proprietà dei minimi quadrati parziali (PLS) e differenze tra algoritmi , ma la chemiometriauvignette offre anche una buona discussione (pagg. 26-29). Di particolare importanza è anche il fatto che la maggior parte delle routine PLS (almeno quella che conosco in R) presume che tu fornisca variabili non standardizzate perché il centraggio e / o il ridimensionamento sono gestiti internamente (questo è particolarmente importante quando si esegue la validazione incrociata, ad esempio ).

Dato il vincolo , il vettore è risultato essereuu=1u

u=XyXy.

Utilizzando una piccola simulazione, è possibile ottenere come segue:

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

Puoi confrontare i risultati di cui sopra ( u=[0.5792043;0.8151824], in particolare) con ciò che i pacchetti R darebbero. Ad esempio, utilizzando NIPALS dal pacchetto chemometrics (un'altra implementazione che conosco è disponibile nel pacchetto mixOmics ), otterremmo:

library(chemometrics)
pls1_nipals(X, y, 1)$W  # X weights [0.5792043;0.8151824]
pls1_nipals(X, y, 1)$P  # X loadings

Risultati simili sarebbero stati ottenuti con plsre il suo algoritmo PLS kernel predefinito:

> library(pls)
> as.numeric(loading.weights(plsr(y ~ X, ncomp=1)))
[1] 0.5792043 0.8151824

In tutti i casi, possiamo verificare che sia di lunghezza 1.u

A condizione che modifichi la tua funzione per ottimizzare quella che legge

f <- function(u) cov(y, X%*%(u/sqrt(crossprod(u))))

e normalizzare in useguito ( u <- u/sqrt(crossprod(u))), dovresti essere più vicino alla soluzione sopra.

Sidenote : Come criterio (1) è equivalente a può essere trovato come singolare vettore sinistro dalla SVD di corrispondente autovalore:

maxuXYv,
uXY
svd(crossprod(X, y))$u

Nel caso più generale (PLS2), un modo per riassumere quanto sopra è dire che i primi vettori canonici PLS sono la migliore approssimazione della matrice di covarianza di X e Y in entrambe le direzioni.

Riferimenti

  1. Tenenhaus, M (1999). L'approche PLS . Revue de Statistique Appliquée , 47 (2), 5-40.
  2. ter Braak, CJF e de Jong, S (1993). La funzione oggettiva della regressione parziale dei minimi quadrati . Journal of Chemometrics , 12, 41–54.
  3. Abdi, H (2010). Regressione parziale dei minimi quadrati e proiezione sulla regressione della struttura latente (regressione PLS) . Recensioni interdisciplinari di Wiley: statistiche computazionali , 2, 97-106.
  4. Boulesteix, AL e Strimmer, K (2007). Minimi quadrati parziali: uno strumento versatile per l'analisi di dati genomici ad alta dimensione . Briefing in Bioinformatics , 8 (1), 32-44.

Grazie chl. Leggerò la tua risposta ogni volta che sarà possibile (e sicuramente voterò e fare clic sul segno di spunta!)
Stéphane Laurent

Ho appena letto la tua risposta - congratulazioni e grazie mille.
Stéphane Laurent,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.