Indice
Analisi delle corrispondenze
L’analisi delle corrispondenze serve a descrivere e sintetizzare tabelle di contingenza di grandi dimensioni mediante la determinazione delle componenti di variabilità della tabella stessa 1), 2), 3).
L’analisi delle corrispondenze utilizza le distanze fra profili di riga e di colonna e la metrica del chi quadrato per descrivere le relazioni fra le modalità: quelle con profili simili vengono per così dire “aggregate” in variabili quantitative sintetiche.
Di una tabella di contingenza, è possibile scegliere quali modalità utilizzare per calcolare le componenti (attive), e quali invece lasciare come supplementari. Per queste ultime, verranno calcolate solo le coordinate.
L'esempio che segue è tratto da Ricerca sociale con R, di Agnese Vardanega (2018).
I pacchetti di R
E' possibile svolgere l'analisi delle corrispondenze con due funzioni:
ca()
del pacchetto ca ((Nenadic, O., Greenacre, M. (2007) Correspondence Analysis in R, with two- and three-dimensional graphics: The ca package. Journal of Statistical Software 20(3):1-13.))CA()
del pacchetto FactoMineR ((Le S., Josse J., Husson F. (2008). FactoMineR: An R Package for Multivariate Analysis. Journal of Statistical Software, 25(1), 1-18. 10.18637/jss.v025.i01))
Con FactoMineR
Nel seguito consideriamo l'output del secondo (che prevede una inferfaccia per RCommander, ed anche una in Shiny, utilizzabile in RStudio). I risultati sono gli stessi, ma presentati in modo diverso.
Vedi anche:
- Per l'interpretazione dei risultati: ACP: interpretazione dei risultati con Factoextra
- Per l'interfaccia in Shiny: ACP con Factoshiny
Controllare i dati
Carichiamo i dati (dataset “faccende” del pacchetto LabRS
)
Il pacchetto accompagna il libro *“Ricerca sociale con R”* ed è disponibile da CRAN e su GitHub (le istruzioni per installarlo sono alla pagina LabRS.
library(LabRS) data("faccende")
Guardiamo la tabella:
faccende
## Moglie Alternati Marito Insieme ## Bucato 156 14 2 4 ## Pasto_princ 124 20 5 4 ## Cena 77 11 7 13 ## Colazione 82 36 15 7 ## Rassettare 53 11 1 57 ## Piatti 32 24 4 53 ## Shopping 33 23 9 55 ## Documenti 12 46 23 15 ## Guidare 10 51 75 3 ## Finanze 13 13 21 66 ## Assicurazioni 8 1 53 77 ## Riparazioni 0 3 160 2 ## Ferie 0 1 6 153
Costruiamo la tabella delle percentuali di riga (percent()
è una funzione del pacchetto LabRS):
rbind( percent(faccende, margin = 1, digits = 1), TOTALE = percent(margin.table(faccende, 2), 1))
## Moglie Alternati Marito Insieme ## Bucato 88.6 8.0 1.1 2.3 ## Pasto_princ 81.0 13.1 3.3 2.6 ## Cena 71.3 10.2 6.5 12.0 ## Colazione 58.6 25.7 10.7 5.0 ## Rassettare 43.4 9.0 0.8 46.7 ## Piatti 28.3 21.2 3.5 46.9 ## Shopping 27.5 19.2 7.5 45.8 ## Documenti 12.5 47.9 24.0 15.6 ## Guidare 7.2 36.7 54.0 2.2 ## Finanze 11.5 11.5 18.6 58.4 ## Assicurazioni 5.8 0.7 38.1 55.4 ## Riparazioni 0.0 1.8 97.0 1.2 ## Ferie 0.0 0.6 3.8 95.6 ## TOTALE 34.4 14.6 21.8 29.2
È evidente che le faccende domestiche sono nettamente divise fra uomini e donne, in gruppi di attività che possono essere utilmente sintetizzati a scopo descrittivo.
L'analisi delle corrispondenze
Per svolgere l'analisi è sufficiente utilizzare la funzione CA()
in questo modo:
library(FactoMineR) CA.res<-CA(faccende)

Il grafico viene prodotto per default in questo modo. Per controllare i risultati usiamo invece summary()
:
summary(CA.res)
## Call: ## CA(X = faccende) ## ## The chi square of independence between the two variables is equal to 1944.456 (p-value = 0 ). ## ## Eigenvalues ## Dim.1 Dim.2 Dim.3 ## Variance 0.543 0.445 0.127 ## % of var. 48.692 39.913 11.395 ## Cumulative % of var. 48.692 88.605 100.000 ## ## Rows (the 10 first) ## Iner*1000 Dim.1 ctr cos2 Dim.2 ctr ## Bucato | 134.160 | -0.992 18.287 0.740 | 0.495 5.564 ## Pasto_princ | 90.692 | -0.876 12.389 0.742 | 0.490 4.736 ## Cena | 38.246 | -0.693 5.471 0.777 | 0.308 1.321 ## Colazione | 41.124 | -0.509 3.825 0.505 | 0.453 3.699 ## Rassettare | 24.667 | -0.394 1.998 0.440 | -0.434 2.966 ## Piatti | 19.587 | -0.189 0.426 0.118 | -0.442 2.844 ## Shopping | 14.970 | -0.118 0.176 0.064 | -0.403 2.515 ## Documenti | 53.300 | 0.227 0.521 0.053 | 0.254 0.796 ## Guidare | 101.509 | 0.742 8.078 0.432 | 0.653 7.647 ## Finanze | 29.564 | 0.271 0.875 0.161 | -0.618 5.559 ## cos2 Dim.3 ctr cos2 ## Bucato 0.185 | -0.317 7.968 0.075 | ## Pasto_princ 0.232 | -0.164 1.859 0.026 | ## Cena 0.154 | -0.207 2.097 0.070 | ## Colazione 0.400 | 0.220 3.069 0.095 | ## Rassettare 0.535 | -0.094 0.489 0.025 | ## Piatti 0.646 | 0.267 3.634 0.236 | ## Shopping 0.748 | 0.203 2.223 0.189 | ## Documenti 0.066 | 0.923 36.940 0.881 | ## Guidare 0.335 | 0.544 18.596 0.233 | ## Finanze 0.837 | 0.035 0.062 0.003 | ## ## Columns ## Iner*1000 Dim.1 ctr cos2 Dim.2 ctr ## Moglie | 301.019 | -0.838 44.462 0.802 | 0.365 10.312 ## Alternati | 117.824 | -0.062 0.104 0.005 | 0.292 2.783 ## Marito | 381.373 | 1.161 54.234 0.772 | 0.602 17.787 ## Insieme | 314.725 | 0.149 1.200 0.021 | -1.027 69.118 ## cos2 Dim.3 ctr cos2 ## Moglie 0.152 | -0.200 10.822 0.046 | ## Alternati 0.105 | 0.849 82.549 0.890 | ## Marito 0.208 | -0.189 6.133 0.020 | ## Insieme 0.977 | -0.046 0.495 0.002 |
Gli autovalori
La prima informazione che troviamo, dopo il chi quadrato della tabella, sono gli autovalori — le dimensioni estratte — con le relative percentuali di varianza spiegata (eigenvalues):
Eigenvalues Dim.1 Dim.2 Dim.3 Variance 0.543 0.445 0.127 % of var. 48.692 39.913 11.395 Cumulative % of var. 48.692 88.605 100.000
Le tre dimensioni riproducono il 100% della variabilità totale, mentre le prime due raggiungono l’88,6%. Consideriamo solo le prime due dimensioni.
Il grafico e le coordinate
L’origine di ciascun autovalore (e dunque del grafico) rappresenta il profilo medio di riga e di colonna (indipendenza statistica); le modalità più distanti dall’origine sono quelle più discriminanti o caratteristiche (analogamente al test di chi quadrato).
Nel primo quadrante troviamo guidare e riparazioni, vicine (e dunque associate) alla modalità marito
Nel secondo quadrante sono rappresentate pasto principale, colazione, bucato e cena, associate alla modalità moglie.
Al centro rispetto alla prima dimensione, ma non alla seconda, le attività che vengono svolte in maniera alternata (in alto) e insieme (in basso).
Il primo asse (orizzontale) riproduce dunque le differenze legate alla divisione di genere delle attività domestiche; il secondo asse (verticale) distingue invece fra attività di genere e attività svolte assieme o alternandosi.
Contributi e coseni quadrati
Per righe e colonne, e per ciascuna dimensione, la sintesi dei risultati propone anche i contributi (ctr
) e i coseni quadrati (cos2
).
Rows (the 10 first) Iner*1000 Dim.1 ctr cos2 Bucato | 134.160 | -0.992 18.287 0.740 | ...
I primi indicano il contributo dato dalla modalità alla costruzione dell’asse; i secondi la quota di variabilità della modalità riprodotta dall’asse.
La somma per colonna dei contributi è pari a 1, quindi la soglia di significatività del contributo di una modalità è pari a 1 / n.modalità (in questo caso, 1/13 per le modalità di riga e 1/4 per quelle di colonna).
La somma dei cosenti quadrati è invece pari a 1 per riga.
La descrizione delle dimensioni
Come si vede nel risultato di summary()
vengono presentati i risultati solo per le prime 10 colonne e righe. Per avere le coordinate di tutte le modalità (colonne e righe), usiamo la funzione dimdesc()
, che fornisce le coordinate in ordine decrescente (delle modalità significativamente associate all'asse):
dimdesc(CA.res, axes = 1:2)
## $`Dim 1` ## $`Dim 1`$row ## coord ## Bucato -0.9918368 ## Pasto_princ -0.8755855 ## Cena -0.6925740 ## Colazione -0.5086002 ## Rassettare -0.3938084 ## Piatti -0.1889641 ## Shopping -0.1176813 ## Documenti 0.2266324 ## Ferie 0.2524863 ## Finanze 0.2707669 ## Assicurazioni 0.6470759 ## Guidare 0.7417696 ## Riparazioni 1.5287787 ## ## $`Dim 1`$col ## coord ## Moglie -0.83762154 ## Alternati -0.06218462 ## Insieme 0.14942609 ## Marito 1.16091847 ## ## ## $`Dim 2` ## $`Dim 2`$row ## coord ## Ferie -1.4350066 ## Finanze -0.6178684 ## Assicurazioni -0.4737832 ## Piatti -0.4419662 ## Rassettare -0.4343444 ## Shopping -0.4033171 ## Documenti 0.2536132 ## Cena 0.3081043 ## Colazione 0.4528038 ## Pasto_princ 0.4901092 ## Bucato 0.4953220 ## Guidare 0.6534143 ## Riparazioni 0.8642647 ## ## $`Dim 2`$col ## coord ## Insieme -1.0265791 ## Alternati 0.2915938 ## Moglie 0.3652207 ## Marito 0.6019199
Argomenti della funzione CA()
Consideriamo gli argomenti più importanti:
CA(X, ncp = 5, row.sup = NULL, col.sup = NULL, quanti.sup=NULL, quali.sup = NULL, graph = TRUE, axes = c(1,2), row.w = NULL, excl=NULL)
ncp
: numero massimo di componenti da estrarre (default = 5);- righe e colonne supplementari:
row.sup
,col.sup
per indicare le righe e le colonne da omettere nell'analisi; - altre variabili supplementari:
quanti.sup
,quali.sup
;
Con il pacchetto "ca"
Script di esempio
E' possibile scaricare ed eseguire lo script dell'esempio:
- AC.R
# dati library(LabRS) data("faccende") # controlliamo la tabella faccende # percentuali rbind( percent(faccende, margin = 1, digits = 1), TOTALE = percent(margin.table(faccende, 2), 1)) # analisi delle corrispondenze install.packages("FactoMineR") library("FactoMineR") CA.res<-CA(faccende) summary(CA.res) dimdesc(CA.res, axes = 1:2)
## Note