Ricerca Sociale con R

Una wiki per l'analisi dei dati con R

Strumenti Utente

Strumenti Sito


r:analisi_esplorativa:analisi_in_componenti_principali_factominer

L'analisi in componenti principali con FactoMineR

L'analisi in componenti principali in FactoMineR adotta un approccio ancora diverso. Come in princomp, le componenti vengono estratte dalla matrice delle correlazioni; diversamente che negli altri casi, però, l'analisi delle variabili e dei casi, nonché l'interpretazione dei fattori, viene condotta in base all'associazione variabili-componenti o individui-componenti.

In questo modo, è possibile rappresentare sui piani fattoriali le variabili eventualmente escluse dall'analisi (supplementari, o illustrative), anche categoriali, e non solo quantitative. Le misure di associazione e di qualità della rappresentazione utilizzate sono infatti — oltre alle correlazioni fra variabili attive e componenti — i coseni quadri e i valori test, che possono essere calcolati anche per le modalità delle variabili categoriali (Vedi anche Analisi delle corrispondenze).

FactoMineR ha una interfaccia che si apre nel browser, e che permette di e un plugin per RCommander, che fornisce una interfaccia a menu per l'esecuzione dei comandi.

Da script

Lo script utilizzato in questo esempio è disponibile all'indirizzo http://factominer.free.fr/docs/code_pca.r

In primo luogo, carichiamo la libreria necessaria, e il dataset di esempio:

> library(FactoMineR)
> data(decathlon)

Eseguiamo poi il comando, indicando le variabili supplementari quantitative (quanti.sup) e quelle qualitative (quali.sup). Le altre variabili contenute nel dataset saranno automaticamente utilizzate come attive — ovvero per il calcolo delle componenti. Questo significa che il file deve contenere tutte e solo le variabili necessarie all'analisi.

> res <- PCA(decathlon, quanti.sup = 11:12, quali.sup = 13)

I grafici dei casi e delle variabili

L'output produce anche il grafico dei casi

&nolink |Fig. 1

che corrisponde al comamdo plot(res, choix=“ind”, axes=1:2)

e quello delle variabili

&nolink |

che corrisponde al comamdo plot(res, choix=“var”, axes=1:2)

Possiamo omettere i grafici con l'opzione graph = FALSE.

L'interpretazione dei risultati

Gli oggetti contenuti in res sono:

> res
**Results for the Principal Component Analysis (PCA)**
The analysis was performed on 41 individuals, described by 13 variables
*The results are available in the following objects:

   name                description                                              
1  "$eig"              "eigenvalues"                                            
2  "$var"              "results for the variables"                              
3  "$var$coord"        "coord. for the variables"                               
4  "$var$cor"          "correlations variables - dimensions"                    
5  "$var$cos2"         "cos2 for the variables"                                 
6  "$var$contrib"      "contributions of the variables"                         
7  "$ind"              "results for the individuals"                            
8  "$ind$coord"        "coord. for the individuals"                             
9  "$ind$cos2"         "cos2 for the individuals"                               
10 "$ind$contrib"      "contributions of the individuals"                       
11 "$quanti.sup"       "results for the supplementary quantitative variables"   
12 "$quanti.sup$coord" "coord. for the supplementary quantitative variables"    
13 "$quanti.sup$cor"   "correlations suppl. quantitative variables - dimensions"
14 "$quali.sup"        "results for the supplementary categorical variables"    
15 "$quali.sup$coord"  "coord. for the supplementary categories"                
16 "$quali.sup$v.test" "v-test of the supplementary categories"                 
17 "$call"             "summary statistics"                                     
18 "$call$centre"      "mean of the variables"                                  
19 "$call$ecart.type"  "standard error of the variables"                        
20 "$call$row.w"       "weights for the individuals"                            
21 "$call$col.w"       "weights for the variables"  

Usiamo gli elementi contenuti in res per approfondire l'analisi.

Autovalori

Autovalori e varianza spiegata (% e %cum):

> res$eig
        eigenvalue percentage of variance
comp 1   3.2719055              32.719055
comp 2   1.7371310              17.371310
comp 3   1.4049167              14.049167
comp 4   1.0568504              10.568504
comp 5   0.6847735               6.847735
comp 6   0.5992687               5.992687
comp 7   0.4512353               4.512353
comp 8   0.3968766               3.968766
comp 9   0.2148149               2.148149
comp 10  0.1822275               1.822275
        cumulative percentage of variance
comp 1                           32.71906
comp 2                           50.09037
comp 3                           64.13953
comp 4                           74.70804
comp 5                           81.55577
comp 6                           87.54846
comp 7                           92.06081
comp 8                           96.02958
comp 9                           98.17773
comp 10                         100.00000

Grafico degli autovalori:

> barplot(res$eig[, 1])
&nolink |

Variabili

Medie e deviazioni standard (scarto tipo) delle variabili attive:

> round(cbind(res$call$centre, res$call$ecart.type), 
                     2)
              [,1]  [,2]
100m         11.00  0.26
Long.jump     7.26  0.31
Shot.put     14.48  0.81
High.jump     1.98  0.09
400m         49.62  1.14
110m.hurdle  14.61  0.47
Discus       44.33  3.34
Pole.vault    4.76  0.27
Javeline     58.32  4.77
1500m       279.02 11.53

(cbind serve ad unire i dataframe, round serve ad arrotondare i decimali)

Coordinate fattoriali delle prime quattro componenti:

> res$var$coord[, 1:4]
                  Dim.1      Dim.2       Dim.3       Dim.4
100m        -0.77471983  0.1871420 -0.18440714 -0.03781826
Long.jump    0.74189974 -0.3454213  0.18221105  0.10178564
Shot.put     0.62250255  0.5983033 -0.02337844  0.19059161
High.jump    0.57194530  0.3502936 -0.25951193 -0.13559420
400m        -0.67960994  0.5694378  0.13146970  0.02930198
110m.hurdle -0.74624532  0.2287933 -0.09263738  0.29083103
Discus       0.55246652  0.6063134  0.04295225 -0.25967143
Pole.vault   0.05034151 -0.1803569  0.69175665  0.55153397
Javeline     0.27711085  0.3169891 -0.38965541  0.71227728
1500m       -0.05807706  0.4742238  0.78214280 -0.16108904

Correlazioni delle variabili con le prime quattro componenti:

> res$var$cor[, 1:4]
                  Dim.1      Dim.2       Dim.3       Dim.4
100m        -0.77471983  0.1871420 -0.18440714 -0.03781826
Long.jump    0.74189974 -0.3454213  0.18221105  0.10178564
Shot.put     0.62250255  0.5983033 -0.02337844  0.19059161
High.jump    0.57194530  0.3502936 -0.25951193 -0.13559420
400m        -0.67960994  0.5694378  0.13146970  0.02930198
110m.hurdle -0.74624532  0.2287933 -0.09263738  0.29083103
Discus       0.55246652  0.6063134  0.04295225 -0.25967143
Pole.vault   0.05034151 -0.1803569  0.69175665  0.55153397
Javeline     0.27711085  0.3169891 -0.38965541  0.71227728
1500m       -0.05807706  0.4742238  0.78214280 -0.16108904

Casi

Coordinate, contributi e coseni quadri (vedi: Analisi delle corrispondenze):

> round(cbind(res$ind$coord[, 1:4], res$ind$contrib[,1:4], 
        res$ind$cos2[, 1:4]), 2)
            Dim.1 Dim.2 Dim.3 Dim.4 Dim.1 Dim.2 Dim.3 Dim.4
SEBRLE       0.79  0.77  0.83  1.17  0.47  0.84  1.19  3.18
CLAY         1.23  0.57  2.14 -0.35  1.14  0.46  7.96  0.29
KARPOV       1.36  0.48  1.96 -1.86  1.38  0.33  6.64  7.95
BERNARD     -0.61 -0.87  0.89  2.22  0.28  1.07  1.37 11.38
YURKOV      -0.59  2.13 -1.23  0.87  0.26  6.38  2.61  1.76
....
            Dim.1 Dim.2 Dim.3 Dim.4
SEBRLE       0.11  0.11  0.12  0.25
CLAY         0.12  0.03  0.37  0.01
KARPOV       0.16  0.02  0.33  0.30
BERNARD      0.05  0.10  0.10  0.65
YURKOV       0.04  0.50  0.16  0.08
....

Caratterizzazione degli assi

> dimdesc(res)
$Dim.1
$Dim.1$quanti
            correlation      p.value
Points        0.9561543 0.000000e+00
Long.jump     0.7418997 2.849886e-08
Shot.put      0.6225026 1.388321e-05
High.jump     0.5719453 9.362285e-05
Discus        0.5524665 1.802220e-04
Rank         -0.6705104 1.616348e-06
400m         -0.6796099 1.028175e-06
110m.hurdle  -0.7462453 2.136962e-08
100m         -0.7747198 2.778467e-09


$Dim.2
$Dim.2$quanti
          correlation      p.value
Discus      0.6063134 2.650745e-05
Shot.put    0.5983033 3.603567e-05
400m        0.5694378 1.020941e-04
1500m       0.4742238 1.734405e-03
High.jump   0.3502936 2.475025e-02
Javeline    0.3169891 4.344974e-02
Long.jump  -0.3454213 2.696969e-02


$Dim.3
$Dim.3$quanti
           correlation      p.value
1500m        0.7821428 1.554450e-09
Pole.vault   0.6917567 5.480172e-07
Javeline    -0.3896554 1.179331e-02

Infine, FactoMineR include una funzione che consente di esportare l'intero output in un file csv:

write.infile(res,file="my_FactoMineR_results.csv")

Script di esempio

FM-PCA-ex.R
data(decathlon)
res <- PCA(decathlon,quanti.sup=11:12,quali.sup=13)
res
res$eig
barplot(res$eig[,1])
round(cbind(res$call$centre,res$call$ecart.type),2)
res$var$coord[,1:4]
res$var$cor[,1:4]
round(cbind(res$ind$coord[,1:4],res$ind$contrib[,1:4],res$ind$cos2[,1:4]),2)
dimdesc(res)
write.infile(res,file="my_FactoMineR_results.csv")
r/analisi_esplorativa/analisi_in_componenti_principali_factominer.txt · Ultima modifica: 18/06/2022 16:03 da admin