Statistiline andmeteadus ja visualiseerimine MTMS.01.100     Praktikumid     Projektid

PCA minimalistlik näide

Järgnev PCA minimalistlik näide põhineb iiriste andmestikul.

data(iris)
head(iris)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa
## 4          4.6         3.1          1.5         0.2  setosa
## 5          5.0         3.6          1.4         0.2  setosa
## 6          5.4         3.9          1.7         0.4  setosa

Teeme PCA iiriste andmestikul funktsiooni prcomp abil.

# PCA tegemisel jätame viimase veeru Species välja
pca = prcomp(iris[, -5])

Funktsioonile prcomp ette antud andmestikus oli neli tunnust. Seega tagastab PCA meile neli peakomponenti PC1, PC2, PC3, PC4.

head(pca$x)
##            PC1        PC2         PC3          PC4
## [1,] -2.684126 -0.3193972  0.02791483  0.002262437
## [2,] -2.714142  0.1770012  0.21046427  0.099026550
## [3,] -2.888991  0.1449494 -0.01790026  0.019968390
## [4,] -2.745343  0.3182990 -0.03155937 -0.075575817
## [5,] -2.728717 -0.3267545 -0.09007924 -0.061258593
## [6,] -2.280860 -0.7413304 -0.16867766 -0.024200858

Enim huvi pakkuvad on alati esimesed. Teeme PC1 - PC2 hajuvusdiagrammi.

pc1 = pca$x[, 1]
pc2 = pca$x[, 2]
plot(pc1, pc2, pch=16)

Joonisel on näha kahte eristuvat gruppi. Oleks huvitav teada, kas tekkinud gruppe kirjeldab andmestikus olnud tunnus Species.

plot(pc1, pc2, pch=16, col=as.numeric(iris$Species))

Tundub, et jah. Isegi ainuüksi PC1 võimaldab suhteliselt hästi liikidel vahet teha.

PC1 ning PC2 on saadud esialgsete tunnuste lineaarkombinatsioonina. Kuidas leida kordajad? Need saame kätte järgnevalt

pca$rotation
##                      PC1         PC2         PC3        PC4
## Sepal.Length  0.36138659 -0.65658877  0.58202985  0.3154872
## Sepal.Width  -0.08452251 -0.73016143 -0.59791083 -0.3197231
## Petal.Length  0.85667061  0.17337266 -0.07623608 -0.4798390
## Petal.Width   0.35828920  0.07548102 -0.54583143  0.7536574

\[PC_1 = 0.36 \cdot \text{Sepal.Length} - 0.08 \cdot \text{Sepal.Width} + 0.86 \cdot \text{Petal.Length} + 0.36 \cdot \text{Petal.Width } \]

\[PC_2 = -0.66 \cdot \text{Sepal.Length} -0.73 \cdot \text{Sepal.Width} + 0.17 \cdot \text{Petal.Length} + 0.07 \cdot \text{Petal.Width } \]

# Kui suure osa varieeruvusest seletavad PC1, PC2?
summary(pca)
## Importance of components:
##                           PC1     PC2    PC3     PC4
## Standard deviation     2.0563 0.49262 0.2797 0.15439
## Proportion of Variance 0.9246 0.05307 0.0171 0.00521
## Cumulative Proportion  0.9246 0.97769 0.9948 1.00000

Näeme, et

  • PC1 seletab 92.5% kogu variatsioonist,
  • PC1 ja PC2 kokku seletavad 97.7% kogu variatsioonist.