Sunteți pe pagina 1din 14

Capitolul 3_ACP_Aplicație

Analiza în componente principale (ACP), utilizând mediul R

Prof. dr. Stelian STANCU

3.1. Analiza în Componente Principale (ACP)

3.1.1. Introducere

Analiza în Componente Principale (ACP):


- este o metodă de învățare nesupervizată/nesupravegheată, ce
presupune reducerea dimensionalității setului de date, permițând ca
prin folosirea a cât mai puține variabile să se păstreze cea mai mare
parte a variabilității datelor;
- scopul metodei este de a explica cea mai mare parte a variabilității
datelor cu un număr cât mai mic de variabile, comparativ cu setul
inițial de date;
- fiecare dintre cele m observații/indivizi coexistă în spațiul n-
dimensional al variabilelor/caracteristicilor, dar nu toate aceste n
dimensiuni sunt la fel de importante;
- caută astfel un număr cât mai mic de dimensiuni/variabile importante,
unde conceptul de important este măsurat de cantitatea de variație pe
care observațiile o dezvoltă de-a lungul fiecărei dimensiuni/variabile;
- fiecare dintre dimensiunile/variabilele găsite prin metoda ACP este o
combinație liniară a celor n caracteristici/variabile inițiale.

Date cantitative ACP/PCA

Simplă
(2 variabile)
Date multivariate Analiza de
(tipuri de date) Date calitative corespondență
Multiplă
(mai mult
Analiza factorială de 2
simplă variabile)
Date mixte (2 variabile)

Analiza factorială
multiplă(mai mult
de 2 variabile)

Figura 3.1. Metoda ACP în contextul datelor multivariate


2 Data Science în mediul R - teorie şi aplicaţii

3.1.2. Încărcarea pachetelor de bază, necesare suplimentar în mediul R

Pentru început, încărcăm în R următoarele pachete, cu librăriile aferente:


# Pachetul necesar pentru prelucrarea și vizualizarea datelor
install.packages("tidyverse", dependencies = TRUE)
library(tidyverse)
# Pentru reprezentarea grafică în extenso
install.packages("gridExtra", dependencies = TRUE)
library(gridExtra)
# Pentru reprezentarea grafică
install.packages("ggplot2", dependencies = TRUE)
library(ggplot2)
# Alte pachete ajutătoare
install.packages("devtools", dependencies = TRUE)
library(devtools)
# Pentru analiza datelor multivariate și vizualizarea datelor
install.packages("factoextra", dependencies = TRUE)
library(factoextra)
install.packages("FactoMineR", dependencies = TRUE)
library(FactoMineR)
install.packages("ade4", dependencies = TRUE)
library(ade4)
install.packages("ExPosition", dependencies = TRUE)
library(ExPosition)
install.packages("prettyGraphs", dependencies = TRUE)
library(prettyGraphs)
install.packages("corrplot", dependencies = TRUE)
library(corrplot)

3.1.3. Pregătirea datelor

- datele trebuie să fie pregătite după cum urmează:


 rândurile trebuie să fie observații/obiecte/indivizi, în timp
ce coloanele trebuie să fie variabile/caracteristici/însușiri;
În continuare18, încărcăm în R fișierul productia, așa cum se specifică
în Exemplul 3.0, din Capitolul 3:
productia <- read.table ("productia.txt", header = TRUE)
print(productia)
munca capital pamant productie
1 80 20 8 400
2 100 10 12 300
3 60 30 12 300
4 20 15 9 200
5 40 18 15 460
6 110 14 12 600
7 70 24 10 500
8 90 29 20 570

18
În continuare, în toate abordările, vom folosi acest set de date suplu, pentru a permite și
calculul de mână al pașilor de abordare, permițând astfel compararea datelor obținute cu
cele din mediul R.
Capitolul 3. Analiza în componente principale, utilizând mediul R 3

9 120 19 18 800
10 40 31 14 200
Pentru a studia variația fiecărei variabile, putem calcula:
- fie varianța/dispersia la nivelul fiecărei variabile:
# Calculul varianței la nivelul fiecărei variabile
apply(productia, 2, var)
munca capital pamant productie
1090.00000 52.66667 14.66667 36978.88889
- fie abaterea standard la nivelul fiecărei variabile:
# Calculul abaterii standard la nivelul fiecărei variabile
apply(productia, 2, sd)
munca capital pamant productie
33.015148 7.257180 3.829708 192.298957
- orice valoare lipsă din date trebuie eliminată sau estimată;
Pentru a elimina orice valoare lipsă, care ar putea fi prezentă în date,
se apelează la comanda R:
productia <- na.omit(productia)
datele trebuie a fi standardizate19(scalate) pentru a putea face
-
variabilele comparabile. Pentru standardizarea datelor se va folosi
funcția scale(). Se vor normaliza datele, utilizând metoda de
normalizare min-max.
Scriptul R pentru scalarea datelor, utilizând metoda min-max, este după
cum urmează:
max = apply(productia, 2 , max)
min = apply(productia, 2 , min)
productia_scalata=as.data.frame(scale(productia,center=min,
scale=max-min))
productia_scalata
munca capital pamant productie
1 0.6 0.4761905 0.00000000 0.3333333
2 0.8 0.0000000 0.33333333 0.6666667
3 0.4 0.9523810 0.33333333 0.1666667
4 0.0 0.2380952 0.08333333 0.0000000
5 0.2 0.3809524 0.58333333 0.4333333
6 0.9 0.1904762 0.33333333 0.6666667
7 0.5 0.6666667 0.16666667 0.5000000
8 0.7 0.9047619 1.00000000 0.6166667
9 1.0 0.4285714 0.83333333 1.0000000
10 0.2 1.0000000 0.50000000 0.0000000
Standardizarea fiecărei variabile, va rezolva această problemă.
# Crearea unui nou dataframe cu variabilele centrate
productia_centrata <- apply(productia, 2, scale)
productia_centrata
munca capital pamant productie
[1,] 0.21202389 -0.1377946 -1.3055824 -0.32761488
[2,] 0.81780642 -1.5157402 -0.2611165 0.71243236
[3,] -0.39375865 1.2401511 -0.2611165 -0.84763850
[4,] -1.60532371 -0.8267674 -1.0444659 -1.36766212
[5,] -0.99954118 -0.4133837 0.5222330 -0.01560071
[6,] 1.12069769 -0.9645619 -0.2611165 0.71243236

19
De regulă, standardizarea constă în transformarea variabilelor astfel încât acestea să aibă
media zero și abaterea standard unu(adică o distribuție normală a datelor).

 
4 Data Science în mediul R - teorie şi aplicaţii

[7,] -0.09086738 0.4133837 -0.7833495 0.19240874


[8,] 0.51491515 1.1023565 1.8278154 0.55642527
[9,] 1.42358895 -0.2755891 1.3055824 1.75247960
[10,] -0.99954118 1.3779456 0.2611165 -1.36766212
Observație: Există situații în care scalarea nu este de dorit, îndeosebi atunci când
toate variabilele au aceeași unitate de măsură și se dorește să se surprindă și
diferența de varianță.

3.2. Metoda ACP/PCA propriu-zisă

3.2.1. Valori proprii/vectori proprii/varianțe

Valorile proprii măsoară cantitatea de variație reținută de fiecare


componentă principală. Valorile proprii sunt mari pentru primele componente
principale și mici pentru componente principale ulterioare.
Valorile proprii și proporția de variație (adică de informație) păstrată de
componentele principale pot fi extrase folosind funcția get_eigenvalue(),
pachetul factoextra, astfel:
# Se instalează pachetul factorextra
install.packages("factoextra", dependencies = TRUE)
library("factoextra")
valori_proprii <-get_eigenvalue(pca_rezultate) sau varianta scurtă
valori_proprii <-get_eig(pca_rezultate)
valori_proprii
eigenvalue variance.percent cumulative.variance.percent
Dim.1 2.2472802 56.182005 56.18201
Dim.2 1.3079979 32.699948 88.88195
Dim.3 0.3865774 9.664435 98.54639
Dim.4 0.0581445 1.453612 100.00000
Proporția de variație explicată de fiecare valoare proprie este dată în a 3-a coloană.
De exemplu, 56.18% din variație este explicat de această primă valoare.
Procentul cumulat explicat este obținut prin adăugarea proporțiilor succesive de
variație explicată. De exemplu, 56.18% plus 32.70% echivalează cu 88.88%, și așa
mai departe. Prin urmare, aproximativ 98.54% din variație este explicată de
primele 3 valori proprii împreună și raționamentul poate continua.
Valorile proprii pot fi utilizate pentru a determina numărul de componente
principale ce trebuie folosite la nivelul metodei ACP (Kaiser 1961), astfel:
- o valoare proprie mai mare ca 1 indică faptul că PC-urile
(componentele principale) reprezintă mai multă variație decât cea
prezentată de una dintre variabilele originale din datele standardizate.
Acesta este utilizat în mod obișnuit ca punct de tăietură care
marchează alegerea numărului optim de componente principale;
Observație: Acest lucru este valabil numai atunci când datele sunt standardizate.
- numărul de componente principale poate fi limitat la acel număr care
reprezintă o anumită fracțiune a variației totale. De exemplu, dacă se
stabilește ca variația totală explicată să fie de 80%, atunci se poate
Capitolul 3. Analiza în componente principale, utilizând mediul R 5

utiliza numărul de componente principale ce realizează acest


obiectiv.

3.2.2. Prezenarea metodei ACP/PCA

Pentru a calcula componentele principale dintr-o matrice informațională de


date:
- se utilizează funcția cov(), pentru a calcula matricea de covarianță;
- se aplică comanda eigen, pentru a calcula valorile proprii ale
matricei obținute (eigen produce un obiect care conține atât
valorile proprii ($values), cât și matricea eigenvectorului
corespunzător ($vectors)).
# Calcularea de eigenvalues & eigenvectors
productia.cov <- cov(productia_centrata)
productia.eigen <- eigen(productia.cov)
str(productia.eigen)
# List of 2
# $ values : num [1:4] 2.2473 1.308 0.3866 0.0581
# $ vectors: num [1:4, 1:4] 0.6161 -0.2267 0.3741 0.655 -0.0605 ...
# - attr(*, "class")= chr "eigen"
Pentru exemplificare, luând primele două seturi de încărcări și păstrându-le
în matricea pastrare, se va obține:
# se extrag încărcările
pastrare <- productia.eigen$vectors [, 1: 2]
pastrare
[,1] [,2]
[1,] 0.6160840 -0.06049211
[2,] -0.2267110 0.76324934
[3,] 0.3741424 0.64165883
[4,] 0.6550268 -0.04544330
Observaţie: eigenvectors (vectorii proprii) sunt calculați cu orice pachet
software, fiind unici până la o schimbare de semn. În mod implicit, vectorii proprii
în R indică direcția negativă.
Pentru exemplul de față, am prefera ca eigenvectors să fie orientați în
direcția pozitivă, întrucât va conduce la o interpretare mai bună a rezultatelor
grafice.
Ca urmare, pentru a utiliza vectorii cu orientare pozitivă, se vor înmulți
încărcările implicite cu -1. Setul de încărcări pentru prima componentă principală
(PC1) și respectiv pentru a doua componentă principală (PC2) sunt astfel:
pastrare <- - pastrare
row.names(pastrare)<-
c("munca","capital","pamant","productie")
colnames(pastrare) <- c("PC1", "PC2")
pastrare
PC1 PC2
munca -0.6160840 0.06049211
capital 0.2267110 -0.76324934
pamant -0.3741424 -0.64165883
productie -0.6550268 0.04544330

 
6 Data Science în mediul R - teorie şi aplicaţii

Fiecare vector ce constituie o componentă principală definește o direcție în


spațiul caracteristicilor.
Deoarece oricare doi vectorii proprii sunt ortogonali, încărcările și, în
consecință, componentele principale nu sunt corelate unele cu altele, formând astfel
o bază a noului spațiu.
Observație: Acest lucru este valabil indiferent de numărul de dimensiuni utilizate.
Examinând vectorii de mai sus ce constituie componente principale, se
poate deduce că prima componentă principală (PC1) este afectată de capital, cu
o influență opusă, mai mare, a variabilelor munca, pamant și productie, în timp
ce cea de-a doua componentă principală (PC2) este afectată de munca mai mult
decât de productie, cu o influență opusă, mai mare, a variabilelor capital și
respectiv pamant.
Dacă se proiectează cele m puncte pe primul eigenvector, valorile
proiectate sunt numite scoruri ale componentelor principale pentru fiecare
observație, astfel:
# Se calculează scorurile componentelor principale
PC1 <- as.matrix(productia_centrata)%*% pastrare[, 1]
PC2 <- as.matrix(productia_centrata)%*% pastrare[, 2]
# Se crează un dataframe cu scorurile componentelor principale
PC <- data.frame(Firme = row.names(productia), PC1, PC2)
head(PC)
Firme PC1 PC2
1 1 0.5412063 0.94084797
2 2 -1.2164399 1.40628152
3 3 1.1766650 -0.84133557
4 4 2.0882113 1.14195996
5 5 0.3369120 -0.08075386
6 6 -1.2780882 1.00391761
În continuare, după ce au fost calculate primele două componente
principale pentru fiecare firmă, se poate trece la reprezentarea lor grafică, într-o
reprezentare bidimensională a datelor.
Prima componentă principală (axa Ox) corespunde aproximativ variabilei
capital. Firme precum 4 și 10 au volum mare de capital, raportat la celelalte
variabile, în timp ce firma 9 are un volum mai mic de capital, raportat la
celelalte variabile.
A doua componentă principală(axa Oy) este explicată aproximativ de
munca mai mult decât de productie, ceea ce implică faptul că firma 2 are un
volum mare de munca și productie, raportat la celelalte variabile, în timp ce
firma 8 are mai puțin. Firme apropiate de origine, cum ar fi firmele 5 și 7, sunt
aproape de medie în ambele categorii.
Avem20 astfel:
# Reprezentarea componentelor principale ale datelor despre producție
ggplot(PC, aes(PC1, PC2)) +
modelr::geom_ref_line(h = 0) +
modelr::geom_ref_line(v = 0) +

20
Reprezentările grafice din acest capitol sunt obținute din prelucrări proprii ale autorului,
utilizând mediul R.
Capitolul 3. Analiza în componente principale, utilizând mediul R 7

geom_text(aes(label = Firme), size = 3) +


xlab("Prima Componentă Principală") +
ylab("A doua Componentă Principală") +
ggtitle("Primele două Componente Principale ale datelor
despre dataframe-ul productia")

Figura 3.2. Primele două componente principale

De asmemenea, în mod implicit, funcția PCA(), din pachetul


FactoMineR, standardizează automat datele în timpul procedurii PCA și deci nu
trebuie făcută această transformare înainte de PCA, astfel că avem:
# Se instalează pachetul FactorMineR
install.packages("FactorMineR", dependencies = TRUE)
library("FactorMineR")
PCA(productia_centrata, scale.unit = TRUE, ncp = 2, graph =
TRUE)
**Results for the Principal Component Analysis (PCA)**
The analysis was performed on 10 individuals, described by 4 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 "$call" "summary statistics"
12 "$call$centre" "mean of the variables"
13 "$call$ecart.type" "standard error of the variables"
14 "$call$row.w" "weights for the individuals"
15 "$call$col.w" "weights for the variables"

 
8 Data Science în mediul R - teorie şi aplicaţii

Figura 3.3. Funcția PCA(), în pachetul FactoMineR

Următorul cod R, abordează analiza componentelor principale asupra


indivizilor activi, astfel:
pca_rezultate <- PCA(productia_centrata, graph = FALSE)
**Results for the Principal Component Analysis (PCA)**
The analysis was performed on 10 individuals, described by 4 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 "$call" "summary statistics"
12 "$call$centre" "mean of the variables"
13 "$call$ecart.type" "standard error of the variables"
14 "$call$row.w" "weights for the individuals"
15 "$call$col.w" "weights for the variables"

3.2.3. Vizualizarea și interpretarea datelor și rezultatelor obținute

Vom folosi pachetul R factoextra pentru a ajuta la interpretarea PCA.


Indiferent de funcția care se decide a fi utilizată (spre exemplu:
stats::prcomp(), FactoMiner::PCA(),ade4::dudi.pca(),
ExPosition::epPCA()), se pot extrage și vizualiza cu ușurință rezultatele
PCA folosind funcțiile R furnizate în pachetul factoextra.
Aceste funcții includ:
get_eigenvalue(pca_rezultate): extrage valorile proprii/variațiile
componentelor principale;
fviz_eig(pca_rezultate): vizualizează valorile proprii;
Capitolul 3. Analiza în componente principale, utilizând mediul R 9

get_pca_ind(pca_rezultate), get_pca_var(pca_rezultate):
extrage rezultatele pentru indivizi/obsrevații și respectiv pentru variabile/
caracteristici.
fviz_pca_ind(pca_rezultate), fviz_pca_var(pca_rezultate):
vizualizează rezultatele pentru indivizi și respectiv pentru variabile;
fviz_pca_biplot(pca_rezultate): realizează o reprezentare grafică a
indivizilor și respectiv a variabilelor.
În secțiunile următoare, vor fi ilustrate fiecare dintre aceste funcții.

3.2.4. Funcții PCA încorporate

R are numeroase funcții încorporate, alăturându-se totodată o serie de


pachete suplimentare, pentru a calcula numeroase atribute PCA (cum ar fi valori
proprii, vectori proprii, scoruri ale componentelor principale etc).
Una dintre aceste funcții încorporate este prcomp, cu care se pot efectua
rapid multe dintre calculele anterioare.
În mod implicit, funcția prcomp centrează variabilele pentru a avea media
zero, iar folosind opțiunea scale=TRUE, sunt scalate variabilele pentru a avea o
abatere standard unitară.
Outputul funcției prcomp conține o serie de informații utile.
Avem astfel următoarea secvență R:
pca_rezultate <- prcomp(productia, scale = TRUE)
pca_rezultate
Standard deviations (1, .., p=4):
[1] 1.4990931 1.1436774 0.6217535 0.2411317
Rotation (n x k) = (4 x 4):
PC1 PC2 PC3 PC4
munca -0.6160840 -0.06049211 0.569109728 0.5411981
capital 0.2267110 0.76324934 0.555196104 -0.2404368
pamant -0.3741424 0.64165883 -0.606514964 0.2836036
productie -0.6550268 -0.04544330 0.003316909 -0.7542306
names(pca_rezultate)
# [1] "sdev" "rotation" "center" "scale" "x"
Componentele center și scale corespund centrelor și abaterilor standard
ale variabilelor care au fost utilizate pentru scalare, înainte de implementarea PCA.
# Media
pca_rezultate$center
munca capital pamant productie
73 21 13 463
# Abaterea standard
pca_rezultate$scale
munca capital pamant productie
33.015148 7.257180 3.829708 192.298957

 
10 Data Science în mediul R - teorie şi aplicaţii

Matricea21 de rotație asigură încărcarea componentelor principale, în sensul


că fiecare coloană a pca_rezultate$rotation conține vectorul corespunzător
de încărcare a componentei principale. Avem astfel următoarea secvență R:
pca_rezultate$rotation
PC1 PC2 PC3 PC4
munca -0.6160840 -0.06049211 0.569109728 0.5411981
capital 0.2267110 0.76324934 0.555196104 -0.2404368
pamant -0.3741424 0.64165883 -0.606514964 0.2836036
productie -0.6550268 -0.04544330 0.003316909 -0.7542306
Există astfel 4 componente principale distincte, lucru rezultat din min (10-
1, 4) = 4 componente principale.
Observație: Se observă că PCA1 și PCA2 au semnele opuse față de ceea ce s-a
calculat anterior. Reamintim că, în mod implicit, vectorii proprii în R punctează în
direcția negativă. Putem ajusta acest lucru cu o simplă schimbare de semn. Avem
astfel următoarea secvență R:
pca_rezultate$rotation <- - pca_rezultate$rotation
pca_rezultate$rotation
PC1 PC2 PC3 PC4
munca 0.6160840 0.06049211 -0.569109728 -0.5411981
capital -0.2267110 -0.76324934 -0.555196104 0.2404368
pamant 0.3741424 -0.64165883 0.606514964 -0.2836036
productie 0.6550268 0.04544330 -0.003316909 0.7542306
Acum PC1 și PC2 se potrivesc cu cele calculate anterior. De asemenea, se
pot obține scorurile principalelor componente, astfel:
pca_rezultate$x <- - pca_rezultate$x
pca_rezultate$x
PC1 PC2 PC3 PC4
1 -0.5412063 0.94084797 -0.83493046 -0.02470716
2 1.2164399 1.40628152 0.21537734 -0.19564318
3 -1.1766650 -0.84133557 -0.61999468 -0.05398192
4 -2.0882113 1.14195996 0.74367556 -0.06530555
5 -0.3369120 -0.08075386 1.11515148 0.28168346
6 1.2780882 1.00391761 -0.26301305 -0.22704381
7 -0.3167519 0.19037519 -0.65354687 0.51585116
8 1.1156514 -1.95777266 0.20168451 -0.11232599
9 2.5759243 -0.46164092 0.12887015 0.11480052
10 -1.7263573 -1.34187923 -0.03327397 -0.23332754
În continuare, se pot reprezenta grafic primele două componente principale
folosind biplot, iar dacă se dorește reprezentarea grafică a componentelor
principale 3 și 4, se poate introduce choice = 3:4 în biplot (întrucât
implicită este choice = 1:2).
Outputul este foarte asemănător cu cel obținut anterior, argumentul
scale=0, pentru biplot asigură că liniile sunt scalate pentru a reprezenta
sarcinile, astfel:
biplot(pca_rezultate, scale = 0)

21
Această funcție o numește matricea de rotație, deoarece atunci când înmulțim matricea X
cu pca_rezultat$rotation, se obțin coordonatele datelor din sistemul rotativ de
coordonate, iar aceste coordonate sunt de fapt scorurile componentelor principale.
Capitolul 3. Analiza în componente principale, utilizând mediul R 11

Figura 3.4. Reprezentarea primele două componente


principale folosind biplot

Funcția prcomp asigur obținerea, de asemenea, a abaterii standard a


fiecărei componente principale, iar varianța explicată de fiecare componentă
principală este obținută prin pătratul acestor valori, astfel:
pca_rezultate$sdev
# [1] 1.4990931 1.1436774 0.6217535 0.2411317
varianta_explicata<- pca_rezultate$sdev^2)
varianta_explicata
# [1] 2.2472802 1.3079979 0.3865774 0.0581445
Pentru a calcula proporția de varianță explicată de fiecare componentă
principală în parte, se împarte variația explicată de fiecare componentă principală
la variația totală explicată de toate cele patru componente principale, în cazul de
față, adică:
PVE <- varianta_explicata/sum(varianta_explicata)
round(PVE, 2)
[1] 0.56 0.33 0.10 0.01
Ca și anterior, se constată că prima componentă principală explică
aproximativ 56% din variația datelor, a doua componentă principală explică
aproximativ 33% din variația datelor etc.

3.2.5. Proporția de variație explicată la nivel de ACP/PCA

Reducerea dimensionalității datelor prin folosirea PCA, explicând în


același timp cea mai mare parte a variabilității acestora, trebuie să fie însoțită de o
măsurare exactă a procentului de variație care a fost păstrat în aceste componente
principale.
Pentru aceasta se calculează proporția de varianță explicată (PVE) de către
a j-a componentă principală, ca raport dintre valoarea proprie a variabilei j,
împărțită la numărul de componente principale, astfel:
PVE <- productia.eigen$values/sum(productia.eigen$values)
round(PVE, 2)

 
12 Data Science în mediul R - teorie şi aplicaţii

# [1] 0.56 0.33 0.10 0.01


Ca urmare, prima componentă principală din analiză explică 56% din
variabilitate, a doua componentă principală explică 33% etc, ceea ce înseamnă că
primele două componente principale explică împreună 89% din variabilitate etc.
De cele mai multe ori este de preferat să reprezentăm grafic PVE și PVE
cumulativ, astfel:
# Reprezentarea grafică a PVE
grafic_PVE <- qplot(c(1:4), PVE) +
geom_line() +
xlab("Componenta Principală") +
ylab("PVE") +
ggtitle("Reprezentare grafică a PVE") +
ylim(0, 1)
grafic_PVE

Figura 3.5. Reprezentarea grafică a PVE


# Reprezentarea grafică a PVE cumulativ
PVE_cumulativ <- qplot(c(1:4), cumsum(PVE)) +
geom_line() +
xlab("Componenta Principală") +
ylab(NULL) +
ggtitle("Reprezentare grafică a PVE cumulativ") +
ylim(0,1)
PVE_cumulativ
Capitolul 3. Analiza în componente principale, utilizând mediul R 13

Figura 3.6. Reprezentarea grafică a PVE cumulat

3.2.6. Determinarea numărului optim de componente principale, la nivelul


unui model

Nu există o modalitate obiectivă de a decide câte componente principale


sunt suficiente, aceasta depinzând de specificitatea aplicației, dar și de setul de date
avut spre analiză. În practică, tendința este de a privi primele componente
principale, pentru a găsi modele interesante în date deținute spre studiu.
Pentru o matrice informațională cu m observații/indivizi/obiecte și n
variabile/caracteristici/însușiri, există până la min(m-1, n) componente principale
care pot fi calculate.
Cu toate acestea, deoarece scopul PCA este de a reduce semnificativ
numărul de variabile, de regulă, se dorește utilizarea unui număr minim de
componente principale posibile pentru a explica cea mai mare parte a variabilității
datelor.
Cea mai obișnuită tehnică pentru a determina câte componente principale
trebuie reținute este vizualizarea grafică, căutând „punctul cotului”, unde PVE
scade semnificativ.
În exemplul analizat, întrucât inițial avem 4 variabile, reducerea la 2
variabile, cu explicarea a 89% din variabilitate este o îmbunătățire rezonabilă.
Graficul poate fi obținut folosind una din funcțiile fviz_eig() sau
fviz_screeplot(), din pachetul factoextra, astfel:
- fviz_eig(), va conduce la:
get_eig(pca_rezultate)
fviz_eig(pca_rezultate, choice = "eigenvalue", addlabels
= TRUE, geom="line", ncp = 3, ylim = c(0,100))
- fviz_screeplot(),va conduce la:
fviz_screeplot(pca_rezultate, choice = "eigenvalue",
addlabels = TRUE, geom="line", ncp = 3, ylim =
c(0,100))sau varianta scurtă:
fviz_eig(pca_rezultate) respectiv:

 
14 Data Science în mediul R - teorie şi aplicaţii

fviz_screeplot(pca_rezultate)

Analize suplimentare:

Reprezentarea grafică a variabilelor

O metodă simplă de extragere a rezultatele, pentru variabilele analizate


dintr-o prelucrare PCA este de a utiliza funcția get_pca_var(), din pachetul
factoextra.
Această funcție oferă o listă de matrici care conțin toate rezultatele pentru
variabilele active (coordonate, corelații dintre variabile și axe, pătratul cosinusului
și contribuții specifice).
Avem astfel următoarea secvență R:
var <- get_pca_var(pca_rezultate)
var
Diferitele componente pot fi accesate după cum urmează:
# Coordonate
head(var$coord)
# Cos2: calitate pe harta factorilor
head(var$cos2)
# Contribuții la componentele principale
head(var$contrib)
Din graficul anterior, am putea dori să ne oprim la a cincea componentă
principală. 89% din informațiile (variațiile) conținute în date sunt păstrate de
primele două componente principale.
fviz_pca_var(res.pca, col.var = "blue")
corrplot(var$cos2, is.corr=FALSE)
fviz_pca_var(res.pca, col.var = "cos2",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE
# Avoid text overlapping
)
fviz_pca_ind(productia_centrata, geom.ind = "text")
fviz_eig(productia_centrata, addlabels=TRUE, hjust = -0.3)
fviz_eig(productia_centrata, addlabels=TRUE, hjust = -0.3) +
ylim(0, 80)
p <- fviz_eig(res.pca, addlabels=TRUE, hjust = -0.3,
barfill="white", barcolor ="darkblue",
linecolor ="red") + ylim(0, 85) +
theme_minimal()
print(p)
$w
[1] -0.1419446 -0.9898746
$bias
[1] 2.855304
$updates
[1] 964

S-ar putea să vă placă și