Indice
ACP: interpretazione dei risultati con Factoextra
Factoextra è un pacchetto che facilita l'estrazione e l'elaborazione delle informazioni dai risultati di diverse procedure di analisi esplorativa dei dati, nonché la creazione di grafici più complessi e personalizzabili, basati su ggplot. Per tale ragione, dopo aver installato il pacchetto, richiameremo anche i pacchetti del tidyverse:
install.packages("factoextra") library(tidyverse> library(factoextra)
Prendiamo ad esempio i risultati della funzione princomp()
:
PCA <- princomp(USArrests, cor = TRUE)
Le funzioni che seguono possono essere applicate anche ai risultati dell'ACP ottenuta con prcomp()
, e produrranno output simili a quelli dell'ACP con FactoMineR.
Autovalori
Possiamo ottenere la tabella degli autovalori, con la funzione get_eig()
:
get_eig(PCA)
eigenvalue variance.percent cumulative.variance.percent Dim.1 2.4802416 62.006039 62.00604 Dim.2 0.9897652 24.744129 86.75017 Dim.3 0.3565632 8.914080 95.66425 Dim.4 0.1734301 4.335752 100.00000
Rispetto al risultato di summary(PCA)
, abbiamo qui un vero e proprio dataframe, che potrà essere facilmente inserito in un report. Inoltre, i valori sono presentati in colonna.
Quando le variabili sono numerose, il grafico degli autovalori è di grande aiuto nel decidere quante componenti utilizzare.
fviz_eig(PCA)
Dal grafico, è possibile notare come la quota di varianza rappresentata da ciascun autovalore si riduce rapidamente. Come si è detto, infatti, le componenti vengono estratte in maniera da riprodurre la massima varianza, in ordine gerarchico decrescente.
I grafici delle componenti principali
I grafici possono essere ottenuti con le funzioni fviz_pca()
(casi e variabili), fviz_pca_var()
(variabili) e fviz_pca_ind()
(casi, o individui).
La funzione fviz_pca()
produce un grafico simile a quello che si può ottenere con biplot(PCA)
.
fviz_pca(PCA)
L'origine degli assi rappresenta la media delle variabili, o il valore rispetto al quale le variabili sono state normalizzate.
Il grafico delle variabili
fviz_pca_var(PCA)
Possiamo personalizzare i risultati modificando gli argomenti della funzione:
fviz_pca_var(PCA, geom=c("point", "text"), labelsize = 3, repel = T, title = "Le variabili")
Il grafico degli individui
Per migliorare la leggibilità del grafico degli individui, usiamo gli argomenti labelsize = 3
e repel = T
, in modo da ridurre le dimensioni del carattere delle etichette e di evitare che queste ultime si sovrappongano.
fviz_pca_ind(PCA, labelsize = 3, repel = T)
Interpretazione e valutazione delle componenti
Il pacchetto factoextra consente di estrarre le informazioni necessarie all'interpretazione degli assi fattoriali in questo modo:
# estraggo le informazioni sulle variabili PCA.var <- get_pca_var(PCA)
I contributi
I contributi assoluti sono la quota di varianza spiegata da ogni componente, attribuibile a ciascuna delle variabili. In questo senso, vengono interpretati come “contributi” dati dalle variabili alle componenti.
Una variabile con un contributo alto è importante ai fini dell'interpretazione semantica della componente.
PCA.var$contrib
Dim.1 Dim.2 Dim.3 Dim.4 Murder 28.718825 17.487524 11.643977 42.149674 Assault 34.010315 3.533859 7.190358 55.265468 UrbanPop 7.739016 76.179065 14.289594 1.792325 Rape 29.531844 2.799553 66.876071 0.792533
Possono essere calcolati elevando i pesi componenziali al quadrato e calcolando le percentuali di colonna.
eig.vec <- as.table(PCA$loadings) # percentuale di colonna prop.table(eig.vec^2, margin = 2)*100
I coseni quadri
I coseni quadri (o contributi relativi) rappresentano la quota di variabilità della variabile “spiegata” dalla componente:
PCA.var$cos2
Dim.1 Dim.2 Dim.3 Dim.4 Murder 0.7122962 0.1730854 0.04151814 0.073100217 Assault 0.8435380 0.0349769 0.02563817 0.095846950 UrbanPop 0.1919463 0.7539938 0.05095143 0.003108430 Rape 0.7324611 0.0277090 0.23845544 0.001374491
Una variabile con un coseno quadrato alto è ben rappresentata dalla componente. Quando le variabili sono numerose, può essere utile tenere a mente la distinzione fra contributi e coseni quadrati.
Ad esempio, la varianza della prima variabile *Murder* sulla prima componente è pari al 29% del 2,48% di varianza spiegata dalla componente stessa:
28.72 * 2.48
[1] 71.2256
Anche se questa variabile contribuisce in misura maggiore al quarto asse (42%), è meglio rappresentata dal primo. Il quarto asse, infatti, riproduce solo lo 0,2% della varianza totale:
42.15 * 0.1734301
[1] 7.310079
(notare che moltiplicando i contributi per i relativi autovalori, otteniamo i coseni quadri %).
La comunalità (volendolo) può essere ricavata da questa tabella. Usando solo le prime due componenti, ad esempio, la comunalità di ciascuna variabile è data dalla somma per riga dei relativi coseni quadrati:
cbind(PCA.var$cos2[,1:2], "Comunalita" = rowSums(PCA.var$cos2[,1:2]))
Dim.1 Dim.2 Comunalita Murder 0.7122962 0.1730854 0.8853816 Assault 0.8435380 0.0349769 0.8785149 UrbanPop 0.1919463 0.7539938 0.9459401 Rape 0.7324611 0.0277090 0.7601701
Script di esempio
E' possibile scaricare ed eseguire lo script dell'esempio:
- PCA_factoextra.R
library(tidyverse> library(factoextra) PCA <- princomp(USArrests, cor = TRUE) # autovalori get_eig(PCA) # grafici fviz_eig(PCA) fviz_pca(PCA) fviz_pca_var(PCA) fviz_pca_ind(PCA, labelsize = 3, repel = T) # interpretazione delle componenti PCA.var <- get_pca_var(PCA) PCA.var$contrib PCA.var$cos2