1 Analisi delle componenti principali

Vengono caricati i packages necessari per realizzare questo documento

1.1 Primo esempio con tre sole variabili

view(dfSummary(dati),method = "render")

Data Frame Summary

dati

Dimensions: 1427 x 3
Duplicates: 103
No Variable Stats / Values Freqs (% of Valid) Graph Valid Missing
1 Altezza [numeric] Mean (sd) : 151.9 (10.1) min < med < max: 127 < 151 < 183 IQR (CV) : 15 (0.1) 54 distinct values 1427 (100%) 0 (0%)
2 Span [numeric] Mean (sd) : 153.6 (11.2) min < med < max: 123 < 153 < 184 IQR (CV) : 16 (0.1) 60 distinct values 1427 (100%) 0 (0%)
3 Torace [numeric] Mean (sd) : 75.6 (7.8) min < med < max: 57 < 74 < 104 IQR (CV) : 10 (0.1) 44 distinct values 1427 (100%) 0 (0%)

Generated by summarytools 0.9.6 (R version 4.0.2)
2021-03-11

1.2 Variabili osservate.

matrice di grafici per le sole variabili Altezza, Span, Torace rilevate su 1427 righe

round(      cor(dati),3   )
        Altezza  Span Torace
Altezza   1.000 0.892  0.587
Span      0.892 1.000  0.578
Torace    0.587 0.578  1.000
MLA.explor.pairs(dati)

1.3 Principal Component Analysis

Primo esempio con tre sole variabili:

  • Come misurare la correlazione globalmente presente fra le 3 variabili?

  • Possiamo trovare una nuova variabile combinazione lineare delle variabili originali che in qualche modo le riassuma meglio

  • cerchiamo la retta che minimizza la somma dei quadrati degli scarti dei punti dalla retta stessa (misurata ortogonalmente) (retta rossa nella figura)

  • Vedremo dopo che questa nuova variabile corrispondente a questa retta (ossia le nuove coordinate ottenute dalle proiezioni dei punti) è quella che ha la massima varianza

rid =scale(dati[,c(1:3)])
n   =nrow(rid)
round(cor(rid),3)
        Altezza  Span Torace
Altezza   1.000 0.892  0.587
Span      0.892 1.000  0.578
Torace    0.587 0.578  1.000
     autov=eigen(cor(rid))
     round(autov$values,3)
[1] 2.383 0.509 0.108
     sum(autov$values)
[1] 3
     v=autov$vectors
     round(v,3)
       [,1]   [,2]   [,3]
[1,] -0.609 -0.352  0.711
[2,] -0.606 -0.372 -0.703
[3,] -0.512  0.859 -0.013
open3d()
glX 
  1 
MLA.pca3d(rid,segment=FALSE, princ.axes=TRUE,ellipse = FALSE)
Importance of components:
                          Comp.1    Comp.2     Comp.3
Standard deviation     1.5430776 0.7134693 0.32828463
Proportion of Variance 0.7942527 0.1697985 0.03594879
Cumulative Proportion  0.7942527 0.9640512 1.00000000

You must enable Javascript to view this page properly.

1.4 Retta di regressione principale

Voglio trovare la retta che meglio passa attraverso i dati.

Sottolineo la differenza con la regressione semplice e multipla: adesso voglio minimizzare le distanze dai punti ortogonalmente rispetto a questa retta, che chiameremo Retta di regressione principale

1.5 Rotazione assi

Dopo aver fatto questa operazione una prima volta, possiamo ripeterla cercando un’altra retta che minimizzi la sommadei quadrati delle distanze dei punti da questa retta, ma limitando la ricerca alle retteortogonali rispetto alla prima retta di regressione principale

L’operazione si può ripetere fino alla \(k-\)esima retta…

Analisi delle componenti principali: con tre variabili non vi è alcuna perdita di informazione ovviamente; la trasformazione corrisponde ad una rotazione degli assi

2 Esempio numerico:

     pca1=princomp(rid)
     print(str(pca1))
List of 7
 $ sdev    : Named num [1:3] 1.543 0.713 0.328
  ..- attr(*, "names")= chr [1:3] "Comp.1" "Comp.2" "Comp.3"
 $ loadings: 'loadings' num [1:3, 1:3] 0.609 0.606 0.512 0.352 0.372 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : chr [1:3] "Altezza" "Span" "Torace"
  .. ..$ : chr [1:3] "Comp.1" "Comp.2" "Comp.3"
 $ center  : Named num [1:3] 8.90e-16 -8.87e-16 7.67e-16
  ..- attr(*, "names")= chr [1:3] "Altezza" "Span" "Torace"
 $ scale   : Named num [1:3] 1 1 1
  ..- attr(*, "names")= chr [1:3] "Altezza" "Span" "Torace"
 $ n.obs   : int 1427
 $ scores  : num [1:1427, 1:3] -1.95 -1.36 -1.83 -2.02 -1.26 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : NULL
  .. ..$ : chr [1:3] "Comp.1" "Comp.2" "Comp.3"
 $ call    : language princomp(x = rid)
 - attr(*, "class")= chr "princomp"
NULL
     MLA.explor.pairs(pca1$scores)