Selezione dei componenti PCA che separano i gruppi


13

Ho usato spesso per diagnosticare i miei dati multivariati usando PCA (dati omici con centinaia di migliaia di variabili e dozzine o centinaia di campioni). I dati provengono spesso da esperimenti con diverse variabili categoriali indipendenti che definiscono alcuni gruppi e spesso devo passare attraverso alcuni componenti prima di poter trovare quelli che mostrano una separazione tra i gruppi di interesse. Ho trovato un modo piuttosto primitivo di trovare componenti così discriminanti, e mi chiedo

  1. in che misura ciò sia ragionevole / giustificabile e
  2. se ci sono modi migliori per ottenere lo stesso.

Si noti che questo è esplorativo. Prima di convincere qualcun altro, voglio convincere me stesso. Se vedo che ci sono componenti che distinguono chiaramente i gruppi di interesse (ad es. Controllo vs trattamento), anche se sono responsabili di una piccola parte della varianza delle risposte, mi fido più di un risultato, per esempio, di una macchina supervisionata apprendimento.

Ecco il mio approccio. Userò il set di dati di esempio "metabo" da pca3d in R.

L'idea è di valutare quanta varianza di ciascun componente può essere spiegata dalla variabile indipendente. Per questo, calcolo un modello semplice per ogni componente e uso R2 come metrica per ordinare i componenti da "più interessante" a "meno interessante".

require( pca3d )
# data on metabolic profiles of TB patients and controls
data( metabo )
# first column is the independent variable
pca <- prcomp( metabo[,-1], scale.= T ) 

# create a model for each component
lm.m <- lm( pca$x ~ metabo[,1] )
lm.s <- summary( lm.m )
lm.r2 <- sapply( lm.s, function( x ) x$r.squared )
plot( lm.r2, type= "l" )
text( 1:length( lm.r2 ), lm.r2, 1:length( lm.r2 ), pos= 3 )

Ecco il risultato. Il grafico mostra la percentuale di varianza di ciascun componente spiegata dalla variabile indipendente in metabo[,1].

inserisci qui la descrizione dell'immagine

Possiamo ordinare i componenti per per scoprire con quali visualizzare ; i primi tre componenti sono 2, 1 e 7.r2order( lm.r2, decreasing= TRUE )

pca3d( pca, components= c( 1, 2, 7 ), group= metabo[,1] )

Ecco la trama:

inserisci qui la descrizione dell'immagine

(Le categorie rossa e verde sono due gruppi di soggetti che non sono pazienti e si prevede che non possano essere distinti.)

Per riformulare le mie domande,

  1. Questo approccio ha senso per te? Il mio problema è che sembra troppo un dragaggio di dati. Inoltre, intuitivamente penso che forse dovrei girare la tabella e chiedere quale parte della varianza nella variabile indipendente è spiegata da ciascuna variabile? Infine, sono (quasi) sicuro che sto reinventando la ruota, male, quindi la mia seconda domanda è
  2. C'è qualcosa di meglio?

Si noti che non voglio passare a minimi quadrati parziali o qualcosa di simile in questa fase; Voglio solo diagnosticare il PCA nel contesto della mia classificazione.


2
Vorrei fare solo due commenti sulla tua domanda interessante. 1) Descrivi a parole il tuo approccio oltre a mostrare il suo codice (ricorda che le persone qui usano vari software, non necessariamente R). 2) Il diagramma a dispersione non è molto convincente senza punte al suo piano. Inoltre, se hai dei dubbi specifici sul tuo approccio, parlane per rendere la domanda più focalizzata.
ttnphns,

1
a cura di: per chiarire, stai prima conducendo PCA e poi provando a isolare i componenti principali che sono meglio spiegati da qualche particolare variabile? Li convalidi in modo incrociato con una trama ghiaione? Potrebbe accadere che alcune x scelte dal set di dati spieghino molto la varianza in un componente principale, ma non sono sicuro che significhi qualcosa se la varianza è molto bassa lungo quel componente principale.
Shadowtalker,

1
R2

2
to find out what share of the overall variance in the data matrix is explained by a given classificationSe vuoi sapere solo questo non hai bisogno di PCA. Calcola semplicemente la proporzione della somma dei quadrati tra i gruppi rispetto alla somma dei quadrati totale: (SStotal-SSwithin)/SStotaldove SSwithin è la somma dei quadrati all'interno del gruppo.
ttnphns

1
Non vedo alcun problema con il modo in cui sfrutti la PCA, ma non capisco perché ne hai davvero bisogno. (Solo perché forse ti piace?) Perché non riesco a vedere il tuo obiettivo preciso, non posso dire nulla per il tuo Is there anything better?.
ttnphns

Risposte:


8

La risposta alla tua domanda n. 1 è sì, la tua soluzione equivale al dragaggio dei dati. La risposta alla tua domanda n. 2 è sì, ci sono metodi superiori in letteratura.

n<<p

Stai eseguendo un'analisi che ricorda la regressione dei componenti principali, tranne per il fatto che hai scambiato le tue variabili indipendenti e dipendenti, risultando in una grande analisi di regressione multivariata (anziché multipla ). La regressione multivariata richiede che la dimensione del campione sia maggiore del numero di variabili dipendenti, un requisito che si sta completamente violando nell'esempio.

Se sei veramente impegnato a eseguire PCA sui tuoi dati e quindi a utilizzare la regressione multivariata, devi utilizzare un metodo appropriato. Ad esempio, esaminare MRCE e i relativi metodi [1].

Tuttavia, nonostante alcuni commenti sconcertanti che hai fatto, tutto nella tua analisi come attualmente presentato suggerisce che il tuo obiettivo finale è quello di identificare le relazioni tra un ampio insieme di variabili continue (metabo [, - 1]) e una singola variabile categoriale (metabo [ , 1]). PCA è un modo scadente per raggiungere questo obiettivo. Esistono due classi generali di soluzioni a questo problema nel caso ad alta dimensione: primo, soluzioni che assumono la scarsità e soluzioni che assumono una struttura fattoriale.

Le soluzioni basate sulla sparsità presuppongono in genere che solo una percentuale molto piccola di variabili sia effettivamente correlata alla variabile categorica di interesse e tentano di trovare questo piccolo sottoinsieme; per esempio vedi DALASS [2]. I metodi basati sulla struttura fattoriale presuppongono che le variabili discriminatorie siano manifestazioni di variabili latenti sottostanti con una relazione reale con la variabile categoriale. Un esempio di questa classe di metodi è DLDA [3].

Nota che sto non necessariamente raccomandando i metodi che ho citato per i dati; è necessario considerare attentamente i propri obiettivi e la conoscenza a priori del problema nella scelta di un metodo appropriato.

[1] Rothman, Levina, Zhu (2010). Regressione multivariata sparsa con stima della covarianza. Giornale di statistica computazionale e grafica, volume 19, numero 4, pagine 947-962.

[2] Nickolay T. Trendafilov, Ian T. Jolliffe, DALASS: Selezione variabile nell'analisi discriminante tramite LASSO, Statistiche computazionali e analisi dei dati, Volume 51, Numero 8, 1 maggio 2007, Pagine 3718-3736.

[3] Yu, Yang (2001). Un algoritmo LDA diretto per dati ad alta dimensione con applicazione per il riconoscimento facciale. Pattern Recognition 34, 2067-2070.


2
Ho iniziato una nuova ricompensa per assegnare questa risposta.
gennaio

1
@Gennaio: Questa è una bella risposta, ma vorrei sottolineare che "LDA diretta" è al massimo uno strano algoritmo , vedi Gao e Davis, 2005, Perché LDA diretta non è equivalente a LDA : "lo dimostriamo. .. D-LDA può imporre una significativa limitazione delle prestazioni in applicazioni generali ", quindi fai attenzione.
ameba dice di reintegrare Monica il

@amoeba Grazie per la citazione. Ho avuto preoccupazioni per il DLDA per un po ', dal momento che non vi è alcuna giustificazione per la selezione dei componenti in quel particolare modo. Lo vedo come una soluzione molto specifica per i problemi che non si generalizza necessariamente al di là dei problemi di discriminazione, sebbene possa essere facilmente adattato a qualsiasi problema con una certa conoscenza di quali componenti siano più utili per la discriminazione. Ogni soluzione che implementa una discriminazione ad alta dimensione con una struttura di fattore presunta soffre di problemi ... hai trovato approcci migliori? Sono interessato alla tua opinione qui.
Ahfoss,

nk

4

@ahfoss ti ha già indicato LDA come analogo della classificazione al PCA. In realtà, questi due metodi sono correlati tra loro e anche con PLS:

nature of dependent variable (for supervised)     unsupervised    supervised
or structure of data (unsupervised)
continuous                                        PCA             PLS
factor/groups/classes                                             LDA

II

np

PLS può essere visto come una regolarizzazione come il LASSO, ed è anche disponibile un PLS scarso (anche se non l'ho usato: i miei dati sono più adatti al normale PLS, che non assume la scarsità). Per una bella discussione sui diversi metodi di regolarizzazione, vedi ad esempio gli Elementi di apprendimento statistico .

np

T=X×W
L=X×B


L(n×k1)=T(n×m)B(m×k1)
L(n×k1)=X(n×p)W(p×m)B(m×k1)
L(n×k1)=X(n×p)B(p×k1)
LBBB

Nota pratica: se lavori in R, ho un pacchetto in fase di sviluppo che fornisce i modelli PLS-LDA e PCA-LDA. Fammi sapere se vuoi provarlo.


Per evitare il dragaggio dei dati, è necessario convalidare il modello finale (= misurare le prestazioni) con dati indipendenti.

Indipendente qui significa che questo caso (paziente?) Non ha contribuito in alcun modo all'adattamento del modello . In particolare,

  • non ha inserito alcun tipo di preelaborazione che coinvolge più casi, come la centratura o la standardizzazione
  • non ha inserito il calcolo PCA / PLS / ....
  • non è stato utilizzato per la stima dell'iperparametro.

Dato che hai solo pochi casi, una strategia di ricampionamento sarebbe appropriata. In questa situazione, è probabilmente meglio correggere eventuali iperparametri (come il numero di PC o variabili latenti di PLS o il limite LASSO) mediante conoscenze esterne al fine di evitare una seconda divisione interna dei dati di allenamento per l'ottimizzazione dell'iperparametro.


+1 per i modelli con convalida incrociata. Estremamente importante. Tuttavia, vorrei avere notizie da OP @ gennaio, che ha dichiarato di non essere interessato alla discriminazione, sebbene il suo problema sembri molto adatto all'analisi di discriminazione / classificazione.
Ah,

Non sono d'accordo con la tua affermazione che k-mean / PCA / etc appartiene alla stessa famiglia. Ciò implica che si tratta di casi speciali dello stesso modello o algoritmo, il che non è vero. L'algoritmo PCA è un semplice calcolo matriciale, mentre k-mean è un algoritmo iterativo che è stato confrontato con l'algoritmo EM (non tecnicamente corretto poiché non esiste una funzione di verosimiglianza, ma comunque un utile confronto per alcuni aspetti IMHO).
Ah,

1
Ti riferisci alla funzione plsgenomics :: pls.lda? In caso contrario, in che modo il pacchetto è diverso / migliorato? Farò anche notare ai lettori interessati che PLS-LDA in generale è superiore a una tecnica comunemente usata per eseguire semplicemente PLS con una variabile di risultato con codice fittizio. Sebbene quest'ultimo approccio non sia necessariamente errato, è sicuramente complicato, anche perché è possibile ottenere probabilità previste inferiori a zero o maggiori di una!
Ah,

@ahfoss: non intendevo gli algoritmi, poiché lo stesso modello sottostante poteva essere calcolato con algoritmi diversi. Ad esempio per PCA è possibile utilizzare algoritmi iterativi (NIPALS, POWER) o non iterativi (EVD, SVD). Forse un termine migliore invece di k-mean sarebbe stato "analisi dei cluster che minimizza la somma dei quadrati all'interno dei cluster, per cui ad esempio k-medie è un'approssimazione euristica". Non ho tempo ora, esaminerò la risposta più tardi o potremmo incontrarci nella chat room e trovare una descrizione migliore.
cbeleites supporta Monica l'

1
... Una differenza tecnica è che io uso pls::plsrper i pl (che permette di scegliere tra diversi algoritmi). E ho un sacco di funzioni di post-elaborazione, ad esempio per capovolgere e ruotare il modello, che a volte è utile per l'interpretazione.
cbeleites supporta Monica l'
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.