Domanda:
Come trovare quali variabili sono maggiormente correlate alla prima componente principale?
The August
2014-09-11 01:33:25 UTC
view on stackexchange narkive permalink

Mi sono imbattuto in un articolo in cui gli autori hanno svolto un'analisi dei componenti principali sui dati di espressione genica e hanno scoperto i geni più correlati al primo componente principale e hanno utilizzato l'elenco dei geni per ulteriori analisi. come scoprire le entità (i geni in questo caso) che sono maggiormente correlate al primo componente principale?

Ecco il link all'articolo gratuito originale, ed è così che " L'ho calcolato:

Risultati dell'analisi di arricchimento del set di geni dei geni maggiormente correlati al 1 ° componente principale. Le correlazioni dei geni con il 1 ° componente principale sono state trasformate in SD dalla media, quindi sono stati selezionati geni con valori> 1,5 (correlazione positiva) o < -1,5 (correlazione negativa).

Posso fare un esempio giocattolo di 6 campioni e 20 matrici geniche ed eseguire la PCA nel modo seguente, ma come procedere dopo:

  rm (list = ls ()) set.seed (12345) my.mat <- matrix (rnorm (120,0,0.5), nrow = 6, byrow = TRUE) rownames (my.mat) <- paste ("s", 1: 6, sep = "") colnames (my .mat) <- paste ("g", 1: 20, sep = "") head (my.mat) #Assicurati che i dati di input siano trasformati in Z pca.object <- prcomp (my.mat, center = TRUE, scale. = TRUE) summary (pca.object) par (mfrow = c (1,2)) plot (pca.object) biplot (pca.object) #The Rotationpca.object $ rotation  
Due risposte:
amoeba
2014-09-11 20:26:35 UTC
view on stackexchange narkive permalink

Riepilogo: se le variabili originali erano standardizzate, dovresti semplicemente guardare il primo asse principale ( rotazione nella terminologia R) e selezionare le variabili con i valori assoluti più alti.


Considera il set di dati $ \ mathbf {X} $ con variabili centrate nelle colonne e $ N $ punti dati nelle righe. L'esecuzione della PCA di questo set di dati equivale alla scomposizione di un valore singolare $ \ mathbf {X} = \ mathbf {U} \ mathbf {S} \ mathbf {V} ^ \ top $. Qui le colonne di $ \ mathbf {V} $ sono gli assi principali, $ \ mathbf {S} $ è una matrice diagonale con valori singolari e le colonne di $ \ mathbf {U} $ sono i componenti principali scalati alla norma unitaria. I PC standardizzati sono dati da $ \ sqrt {N-1} \ mathbf {U} $. I PC stessi (noti anche come "punteggi") sono dati da colonne di $ \ mathbf {US} $.

Nota che la matrice di covarianza è data da $ \ frac {1} {N-1} \ mathbf {X} ^ \ top \ mathbf {X} = \ mathbf {V} \ frac {\ mathbf { S} ^ 2} {{N-1}} \ mathbf {V} ^ \ top = \ mathbf {VEV} ^ \ top $, quindi gli assi principali $ \ mathbf {V} $ sono autovettori della matrice di covarianza e $ \ mathbf E = \ frac {\ mathbf S ^ 2} {N-1} $ sono i suoi autovalori.

Ora possiamo calcolare la matrice di covarianza incrociata tra variabili originali e PC standardizzati: $$ \ frac {1 } {N-1} \ mathbf {X} ^ \ top (\ sqrt {N-1} \ mathbf {U}) = \ frac {1} {\ sqrt {N-1}} \ mathbf {V} \ mathbf {S} \ mathbf {U} ^ \ top \ mathbf {U} = \ mathbf {V} \ frac {\ mathbf {S}} {\ sqrt {N-1}} = \ mathbf {V} \ sqrt {\ mathbf E} = \ mathbf {L}. $$ Questa matrice è chiamata matrice carichi : è data dagli autovettori della matrice di covarianza scalata dalle radici quadrate dei rispettivi autovalori.

La matrice di correlazione incrociata tra variabili originali e PC è data dalla stessa espressione divisa per le deviazioni standard delle variabili originali (per definizione di correlazione). Se le variabili originali sono state standardizzate prima di eseguire la PCA (ovvero la PCA è stata eseguita sulla matrice di correlazione) sono tutte uguali a $ 1 $. In questo ultimo caso la matrice di correlazione incrociata è di nuovo data semplicemente da $ \ mathbf {L} $.

Sei interessato solo alle principali correlazioni con il primo PC, il che significa che dovresti guardare la prima colonna di $ \ mathbf {L} $ e selezionare le variabili con i valori assoluti più alti. Ma si noti che la prima colonna di $ \ mathbf {L} $ è uguale alla prima colonna di $ \ mathbf {V} $, fino a un fattore di scala (dato dalla radice quadrata del primo autovalore della matrice di covarianza). Quindi, in modo equivalente, puoi guardare la prima colonna di $ \ mathbf {V} $ (cioè il primo asse principale, o rotazione nella terminologia R) e selezionare le variabili con i valori assoluti più alti.

Ma ancora una volta, questo è vero solo se le variabili originali erano standardizzate.

1. Sono un po 'confuso.Il mio set di dati è centrato solo poiché tutti i punti dati sono nella stessa scala e voglio preservare la maggior parte delle informazioni, che penso andranno perse se standardizzo i dati.Ora voglio ottenere il contributo delle variabili a PC1.Devo guardare la prima colonna di L o V, sono entrambe equivalenti anche nel caso centrato?Potrei sbagliarmi qui.Non esitate a correggermi.[Continua]
2. Stavo leggendo la risposta di @ttnphs - https://stats.stackexchange.com/a/143949/254880 - ed ero confuso con l'ultima parte, "Il valore di Eigenvector al quadrato ha il significato del contributo di una variabile in un pr.componente; se è alto (vicino a 1) il componente è ben definito dalla sola variabile. ".Puoi commentare anche questo?Grazie
The August
2014-09-11 10:36:53 UTC
view on stackexchange narkive permalink

Ho avuto qualche chiarimento in più sul problema dopo aver letto questo collegamento sulle correlazioni tra i componenti principali e le variabili originali

Mi sembra che sia come trovare quelle variabili che contribuiscono principalmente alla componente principale. Quindi, dopo il ridimensionamento / trasformazione z, i valori delle variabili che sono 1,5 σ lontano dalla media (σ è uguale a uno e media zero in questo caso) sono stati considerati i contributori più importanti. Quindi le seguenti righe di codice faranno il lavoro immagino:

  rot1.scaled <- scale (pca.object $ rotation [, 1]) names (which (rot1.scaled [, 1] > 1.5 | rot1.scaled [, 1] < -1.5)) 

In un altro modo di selezionare, se scelgo i geni che contribuiscono con Top 'N', il codice sarebbe:

  topN <- 5load.rot < - pca.object $ rotationnames (load.rot [, 1] [order (abs (load.rot [, 1]), decrescente = TRUE)] [1: topN])  

Per favore correggimi se sbaglio.

È corretto, ma solo se le variabili originali sono state standardizzate prima della PCA.`pca.object $ rotation` contiene gli autovettori della matrice di covarianza (cioè * assi principali *), presumibilmente normalizzati alla lunghezza unitaria.Se il primo autovettore è $ \ mathbf {v} $, allora la covarianza tra variabili originali e componenti principali standardizzate è proporzionale agli elementi di questo vettore (il coefficiente di proporzionalità è dato dalla deviazione standard $ s $ di questo PC).Ma questo è uguale alla correlazione solo se le variabili sono standardizzate.
Grazie, sarà fantastico se puoi pubblicare come risposta separata, ancora meglio se puoi fornire alcuni link, note, equazioni ecc.


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...