Ricerca Sociale con R

Una wiki per l'analisi dei dati con R

Strumenti Utente

Strumenti Sito


Il Laboratorio di Analisi dei Dati con R, dell'Università di Teramo su piattaforma Meet, inizia il 9 aprile 2021 - Iscrizione - email
r:analisi_esplorativa:analisi_delle_corrispondenze

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.

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)
 |Grafico dell'AC

Fig. 1: Grafico dell'AC

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


1) Benzécri, J. P. (1992). Correspondence Analysis Handbook. New York: Marcel Dekker.
2) Greenacre, M. (2007). Correspondence Analysis in Practice, Second Edition. Boca Raton (FL): Chapman and Hall/CRC.
3) Vardanega, A. (2007). L’analisi delle corrispondenze multiple. In L. Cannavò & L. Frudà (A c. Di), Ricerca sociale. Dall’analisi esplorativa al data mining. Roma: Carocci.
r/analisi_esplorativa/analisi_delle_corrispondenze.txt · Ultima modifica: 26/09/2021 08:33 da admin