Segui il canale Telegram
Max 3 mess. al giorno (cos'è?)
Ultimi post del blog
Video e tutorial
Pagine aggiornate
Formazione
Ricerca sociale con R (il libro)
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.
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 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.
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")
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)
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 (o contributi assoluti) sono pari alla comunalità, moltiplicata per cento.
Possiamo calcolare la comunalità elevando al quadrato i loadings, e dividendoli per il totale di riga (calcolando cioè le proporzioni per riga):
comm <- as.table(PCA$loadings) comm <- prop.table(comm^2, margin = 1) comm
Comp.1 Comp.2 Comp.3 Comp.4 Murder 0.28718825 0.17487524 0.11643977 0.42149674 Assault 0.34010315 0.03533859 0.07190358 0.55265468 UrbanPop 0.07739016 0.76179065 0.14289594 0.01792325 Rape 0.29531844 0.02799553 0.66876071 0.00792533
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
I contributi rappresentano quindi la percentuale di varianza delle variabili rappresentata da ciascuna componente. Per tale ragione, possono essere interpretati in termini di contributo dato da ciascuna variabile alla definizione delle componenenti.
Una variabile con un contributo alto è importante ai fini dell'interpretazione semantica della componente.
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
E' possibile scaricare ed eseguire lo script dell'esempio:
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