28  Peakomponentide analüüs

Nii nagu peaaegu kõik nähtused on seotud mõne teise nähtusega, on ka ühte andmetabelisse sattunud tunnuste vahel enamasti vähemalt nõrk korrelatsioon. Ühe tunnuse hajuvus on seega vähemalt osaliselt peaaegu alati seletatav mõne teise tunnuse hajuvusega. Seda kattuvust tunnuste hajuvuses saame kasutada selleks, et koondada mitu tunnust üheks või mitmeks uueks tunnuseks nii, et võimalikult vähe teavet läheb kaduma. Just see ongi lihtsustatult peakomponentide analüüsi tööpõhimõte.

Important

Peakomponentide analüüsi (principal component analysis, PCA) käigus koondatakse mitu tunnust peakomponentideks nii, et võimalikult suur osa algsest hajuvusest oleks koondunud esimestesse peakomponentidesse.

Seega on peakomponentide analüüs sobilik olukorras, kus soovime võtta mitu tunnust kokku ühena. Selline probleem tekib nt kümnevõistlusel, kus paljude erinevate alade tulemuste alusel tuleks määrata igale võistleja punktisumma. Uurimegi järgnevalt peakomponentide analüüsi 2004. aasta olümpiamängude kümnevõistluse näitel. Kuna jooksude korral näitab kõrgem väärtus kehvemat tulemust, siis muudame vastavate tunnuste väärtused negatiivseteks, et neid oleks hiljem lihtsam tõlgendada.

library('magrittr')
kv <- read.csv('andmed/decathlon2004.csv')
rownames(kv) <- kv$athlets
kv$athlets <- NULL
kv[, grep('run', names(kv))] %<>% `*`(-1)
head(kv)
          run100m run400m run1500m run110mhurdle longjump highjump polevault
Sebrle     -10.85  -48.36  -280.01        -14.05     7.84     2.12       5.0
Clay       -10.44  -49.19  -282.00        -14.13     7.96     2.06       4.9
Karpov     -10.50  -46.81  -278.11        -13.97     7.81     2.09       4.6
Macey      -10.89  -48.97  -265.42        -14.56     7.47     2.15       4.4
Warners    -10.62  -47.97  -278.05        -14.01     7.74     1.97       4.9
Zsivoczky  -10.91  -49.40  -269.54        -14.95     7.14     2.12       4.7
          shotput discus javeline
Sebrle      16.36  48.72    70.52
Clay        15.23  50.11    69.71
Karpov      15.93  51.65    55.54
Macey       15.73  48.34    58.46
Warners     14.48  43.73    55.39
Zsivoczky   15.31  45.62    63.45

28.1 Peakomponentide tähendus

Peakomponentide analüüsi eesmärk on niisiis võtta kokku algsete tunnuste ühine hajuvus väiksema arvu uue tunnusena. Täpsemalt on eesmärk leida algsete tunnuste standardiseeritud lineaarsed kombinatsioonid, mis seletaksid võimalikult suurt osa hajuvusest andmetes. Iga lineaarne kombinatsioon esindab ühte viisi, kuidas teisendada algsed tunnused uuteks tunnusteks. Mõnel juhul piisab meile ainult paarist sellisest lineaarsest kombinatsioonist, aga sõltuvalt analüüsi probleemist võime kasutada ka mitut.

Iga lineaarne kombinatsioon on peakomponent, mis võtab kokku kordumatu osa andmetes esinevast hajuvusest. Peakomponente võib esitada kujul \[\xi_j = b_{j1}x_1 + b_{j2}x_2+ ... a_{jp}x_p,\] kus \(b_{jp}\) on tunnuse \(x_p\) kaal \(j\)ndas peakomponendis \(\xi_j\) . Nii võib peakomponente mõista sisuliselt tunnuste kaalude kogumitena. Peakomponentide järjestus või järjekorranumber on sealjuures tähtis: esimene peakomponent seletab võimalikult suure osa hajuvusest andmetes ja iga järgnev eelnevate poolt selemata jäänud osa.

Suurim võimalik peakomponentide arv on \(min(p, n-1)\), kus \(p\) on tunnuste ja \(n\) vaatluste arv. Kuna enamasti \(p > n\) , siis leitakse tavaliselt nii palju peakomponente kui oli algseid tunnuseid. Kõik peakomponendid kokku sisaldavad seega kogu hajuvust nende aluseks olevates andmetes selliselt, et võimalikult suur osa hajuvusest on koondatud esimestesse peakomponentidesse. Seega kui valime ainult esimesed peakomponendid, siis läheb kaduma küll osa hajuvusest, aga see kadu on võimalikult väike.

28.2 Peakomponentide leidmine

On mitu viisi, kuidas mõtestada peakomponentide leidmist. Kõige loomulikum lähenemine on kujutada vaatlusi andmepilvena tunnuste ruumis. Mitme tunnuse hajuvuse saame kokku võtta, kui tõmbame sellest andmepilvena järjest läbi jooni, millest igaüks esindab ühte peakomponenti. Alustame sealjuures esimesest peakomponendist, mis peaks võtma kokku võimalikult suure osa hajuvusest andmepilves. Esimene peakomponent arvutatakse seega nii, et see

  • järgiks ja esindaks suurimat hajuvust andmepilves ja
  • on sirgena võimalikult lähedal kõikidele andmepunktidele arvestades täisnurkset (ortogonaalset) kaugust.

Näeme jooniselt, et kuulitõuke ja kettaheite soorituste vahel on positiivne korrelatsioon. Seega saame vähemal osaliselt nende kahe tunnuse hajuvuse kokku võtta peakomponendiga, mida näitab punane joon.

Selliselt on esimese peakomponendi leidmine sarnane vähimruutude meetodile (Peatükk 22). Erinevalt vähimruutude meetodil leitud regressioonsirgest esimene peakomponent aga

  • seletab kõikide tunnuste hajuvust võrdväärselt ja mitte ainult tagajärgse tunnuse hajuvust,
  • ei sõltu otseselt ruuthälvetest.

Suurima hajuvuse tuvastamiseks teisendatakse andmepilv (andmemaatriks) uuele koordinaattasandile. See hõlmab enamasti alljärgnevaid samme:

  1. andmepilv keskmistatakse,
  2. koordinaatteljed teisendatakse samale skaalale,
  3. koordinaatteljed pööratakse vastavusse peakomponentidega.

Sealjuures toimub viimasel sammul telgede pööramine nii, et esimene peakomponent seletab võimalikult suure osa hajuvusest andmepilves ja iga järgnev peakomponent on lihtsalt täisnurkne (ortogonaalne) eelneva suhtes.

Eelnevalt kirjeldatud samme näitlikustab alljärgnev joonis.

Seega sõltuvad leitud peakomponendid andmepilve asukohast ja hajuvusest telgedel.

Warning

Peakomponendide analüüsil tuleb silmas pidada algsete tunnuste keskmisi väärtuseid ja standardhälbeid.

  • Tunnused peaksid olema keskmistatud ehk igast tunnuse väärtusest tuleb lahutada kogu tunnuse keskmine väärtus.
  • Tunnused võib skaleerida ehk iga tunnuse väärtused võib jagada läbi tunnuse standardhälbega. Kui tunnused on mõõdetud samal skaalal, siis võib olla parem seda mitte teha.

Matemaatiliselt arvutatakse peakomponendid kas korrelatsiooni-, kovariatsiooni või andmemaatriksi dekomponeerimise alusel. Selle tulemusel leitakse andmete

  • skaleerimist kirjeldavad omaväärtused (eigenvalues) ehk iga peakomponendi kordajad ja
  • pööramist kirjeldavad omavektorid (eigenvectors) ehk iga peakomponendi pool seletatud hajuvus.

R keeles saame peakomponentide leidmiseks kasutada funktsiooni prcomp(). Tunnused keskmistatakse vaikimisi (center = TRUE), aga enamasti peaksime lisama ka argumendi scale = TRUE, et lisaks sellele tunnuse väärtused ka skaleerida.

peakomp <- prcomp(kv, scale = TRUE)

28.3 Eeldused

Kõige olulisem peakomponentide analüüsi eeldus puudutab tunnuste mõõteskaalasid: ühist hajuvust saab leida võtta ainult pideval või vähemalt arvskaalal mõõdetud tunnuste korral. Nimi ja järjestustunnusete alusel saab leida peakomponendid, kui need eelnevalt pidevateks tunnusteks teisendada.

Tunnuste koondamiseks ühise hajuvuse alusel peab see ühine hajuvus andmetes olemas olema. Seega peab tunnuste vahel esineva piisav lineaarne korrelatsioon.

Kümnevõistluse võistlusalade vahel esinevad üldiselt ootuspärased ja sageli tugevad korrelatsioonid.

library('gplots')

Attaching package: 'gplots'
The following object is masked from 'package:stats':

    lowess
cor(kv) %>% heatmap.2(col = 'bluered', margins = c(8,8))

Kui vaatluste seas esineb erindeid, siis võivad need märkimisväärselt mõjutada peakomponentide aluseks olevat andmepilve teisendamist.

28.4 Peakomponentide arv

Kuigi enamasti leitakse analüüsi käigus peakomponente sama palju kui oli nende aluseks olevaid tunnuseid, siis on asjakohased tavaliselt ainult esimesed nendest. Mitut esimest peakomponenti tõlgendada või edasises analüüsis kasutada, sõltub sellest, kui mitut on vaja analüüsi probleemi lahendamiseks[^Nt vaatluste klasterdamise tulemuse näitlikustamiseks tunnuste alusel kahemõõtmelisel joonisel piisab kahest peakomponendist.].

Tip

Sobiva arvu komponentide määramisel võib lähtuda alljärgnevatest tingimustest.

  • Määra kõige madalam hajuvus andmetes, mida peakomponendid seletama peaksid ja vali nii palju peakomponente kui on selleks vajalik.
  • Kasuta peakomponende, mille omaväärtus on vähemalt üks.
  • Leia omaväärtuse joonisel nö õlg ja vali peakomponendid enne seda.

Peakomponentide poolt seletatud hajuvust saab joonisel kujutada mitmel viisl.

par(bty = 'n', mfrow = c(1,3))
plot(peakomp$sdev^2 * 100/length(peakomp$sdev), type = 'b', ylim = c(0,100), 
     xlab = "Peakomponent", ylab = "Komponendi poolt seletatud hajuvus, %")
plot(cumsum(peakomp$sdev^2 * 100/length(peakomp$sdev)), type = 'b', ylim = c(0,100), 
     xlab = "Peakomponent", ylab = "Seletatud hajuvus kumulatiivselt, %")
plot(peakomp$sdev^2, type = 'p', 
     xlab = "Peakomponent", ylab = "Omaväärtus")
abline(h = 1)

Näeme nt, et esimene peakomponent üksi seletab 35% kogu hajuvusest ja 80% hajuvuse seletamiseks on vaja vähemalt viite peakomponenti. Kõige parempoolsel, omaväärtuse joonisel (scree plot) näeme, et nö õlg on pärast neljandat peakomponenti, nii et antud andmete korral võiksimegi piirduda nelja peakomponendiga.

28.5 Tõlgendamine

28.5.1 Seletatud hajuvus

Osakaal koguhajuvusest andmetes, mille \(j\)ndas peakomponent seletab on arvutatav omaväärtuste \(\lambda\) alusel: see on vastava omaväärtuse osa omaväärtuste summast ehk \(\lambda_j / \Sigma^p_{j=1} \lambda\).

Peakomponentide omaväärtused saame R keeles, kui võtame peakomponentide standardhälbed ruutu.

peakomp$sdev^2 %>% round(2)
 [1] 3.54 1.97 1.42 0.90 0.56 0.53 0.43 0.37 0.16 0.11

Näeme, et esimene peakomponent esindab umbes 4 tunnuse hajuvust.

Kuna omaväärtuste summa \(\Sigma^p_{j=1} \lambda\) on võrdne tunnuste arvuga, siis peakomponendi omaväärtus näitab, kui mitme algse tunnuse hajuvust või kui mitut algset tunnust vastav peakomponent esindab. Seega saame iga peakomponendi poolt seletatud hajuvuse osakaalu, kui jagame vastava omaväärtuse tunnuste arvuga.

(peakomp$sdev^2 / ncol(kv)) %>% round(2)
 [1] 0.35 0.20 0.14 0.09 0.06 0.05 0.04 0.04 0.02 0.01

Näeme, et esimene peakomponent seletab 35% hajuvusest andmepilves ja kaks esimest peakomponenti üle poole. Sama tulemuse saame ka peakomponendi objekti kokkuvõttest funktsiooni summary() abil.

summary(peakomp)
Importance of components:
                          PC1    PC2    PC3     PC4     PC5     PC6     PC7
Standard deviation     1.8827 1.4036 1.1924 0.95052 0.75075 0.72679 0.65792
Proportion of Variance 0.3545 0.1970 0.1422 0.09035 0.05636 0.05282 0.04329
Cumulative Proportion  0.3545 0.5515 0.6936 0.78398 0.84035 0.89317 0.93645
                           PC8     PC9    PC10
Standard deviation     0.60482 0.40435 0.32580
Proportion of Variance 0.03658 0.01635 0.01061
Cumulative Proportion  0.97304 0.98939 1.00000

Seletatud hajuvusest lähtudes saame leida ka, kui suure osa hajuvusest seletavad teatud arv esimesi peakomponente. Sisuliselt näitab seletatud hajuvus, kui suur osa andmetes olevast teabest jääb alles, kui võtame algsed tunnused kokku teatud arvul peakomponentidena.

28.5.2 Kordajad

Peakomponendid tuletatakse tunnustest ja nii on igal tunnusel igale peakomponendile. Teisisõnu, iga tunnus laadib igat peakomponenti ja sedalaadimist mõõdab vastav kordaja või laadung (loading). Neid võib mõista ka kui tunnuste kaale. Kordajaid saab kasutada peakomponentide tõlgendamiseks, et anda neile sisuline tähendus.

R keeles kuvatakse kordajaid, kui sisestame käsureale lihstalt peakomponendi objekti või uurime selle objekti osist rotation.

peakomp$rotation %>% round(2)
                PC1   PC2   PC3   PC4   PC5   PC6   PC7   PC8   PC9  PC10
run100m       -0.42  0.18 -0.21 -0.08 -0.27  0.06  0.05 -0.64 -0.50 -0.02
run400m       -0.39  0.35  0.19 -0.12 -0.24  0.23  0.22  0.21  0.28  0.63
run1500m      -0.11  0.34  0.66  0.06  0.20  0.27  0.15  0.15 -0.30 -0.44
run110mhurdle -0.38  0.17 -0.04 -0.12  0.42 -0.75  0.25  0.07  0.04 -0.04
longjump      -0.42  0.23 -0.13 -0.01 -0.18  0.01 -0.64  0.14  0.36 -0.40
highjump      -0.33 -0.34  0.01 -0.11  0.67  0.35 -0.33 -0.07 -0.10  0.27
polevault     -0.10  0.23 -0.52  0.64  0.17  0.20  0.17  0.34 -0.19  0.00
shotput       -0.33 -0.44 -0.02  0.14 -0.04  0.22  0.51 -0.18  0.45 -0.35
discus        -0.29 -0.48 -0.01 -0.21 -0.34 -0.08  0.02  0.57 -0.44 -0.05
javeline      -0.15 -0.24  0.44  0.69 -0.16 -0.30 -0.24 -0.15 -0.03  0.23

Näeme, et esimene peakomponent iseloomustab kõikide alade soorituste nõrkust, sest kõik kordajad on negatiivsed. Seega on iseloomustab esimene komponent võistleja üldist võimekust või kui arvestada negatiivseid kordajaid, siis võimetust. Teine komponent kirjeldab sooritust jooksudel, aga on negatiivselt seotud viskealadega (shotput, discus, javeline).

Neid kordajaid saame kasutada selleks, et leida peakomponentide väärtused iga vaatluse jaoks. Kui korrutame iga kordaja sellele vastava tunnuse väärtustega, siis saame peakomponentide skoorid. Need on peakomponente esindavad uued tunnused, mis näitavad peakomponendi väärtust iga 28 võistleja kohta.

peakomp$x %>% round(2)
              PC1   PC2   PC3   PC4   PC5   PC6   PC7   PC8   PC9  PC10
Sebrle      -3.65 -1.50  0.22  1.74  0.13 -0.29 -0.44  0.52  0.79  0.19
Clay        -3.60 -0.85 -0.32  1.16 -0.93 -0.82 -1.26 -0.29 -0.77 -0.08
Karpov      -4.20 -0.42 -0.35 -1.70 -0.69  0.32  0.40  0.45  0.07  0.23
Macey       -1.90 -1.34  1.24 -1.09  0.59  1.08 -0.22  0.21  0.08 -0.40
Warners     -1.90  1.70 -0.89 -0.50 -0.15 -0.28 -0.03 -0.05  0.21  0.09
Zsivoczky   -0.70 -1.25  1.02  0.53  0.52  1.31 -0.18 -0.21 -0.31  0.32
Hernu       -0.69  0.51  0.73 -0.17  0.90  0.26  0.55  0.61 -0.21  0.08
Nool        -0.18  1.74 -0.99  1.97 -0.77  0.53 -0.07  0.36 -0.09  0.05
Bernard     -1.57 -0.13  0.11 -1.64  0.87  0.11 -0.46 -0.75 -0.02  0.07
Schwarzl     0.09  1.45 -0.72  0.49  0.61 -0.30 -0.15  0.68  0.01 -0.47
Pogorelov   -0.26 -0.61 -1.75 -0.23  1.30 -0.09  0.16  0.20  0.15 -0.47
Schoenbeck   0.12  0.29 -0.55  1.00 -0.36 -0.79  0.42  0.18 -0.11 -0.61
Barras       0.29 -0.38  1.65  0.61  0.13 -0.60  0.71  0.42  0.17  0.05
Smith       -0.47 -1.11  1.55 -1.10 -0.71 -1.48  1.51 -0.14 -0.51  0.07
Averyanov   -0.22  1.71 -0.51 -0.29  0.22  0.18  0.34 -1.38 -0.38 -0.61
Ojaniemi    -0.12  0.78  0.19  0.10 -0.85  0.91 -0.32 -1.43  0.59 -0.26
Smirnov      0.63  1.05  1.22  0.32 -0.10  0.37  0.09 -0.16 -0.64  0.25
Qi           0.73  0.18  1.00 -0.34 -0.26 -0.13 -1.08  0.49 -0.29  0.22
Drews        0.42  3.08 -0.86 -0.55  0.47 -0.67  0.24  0.44 -0.06  0.29
Parkhomenko  1.31 -1.83  0.72  1.67  0.97  0.39  0.87 -0.77  0.21  0.21
Terek        0.89 -0.26 -2.34  0.25 -0.41  1.52  1.31  0.69 -0.21  0.22
Gomez        0.64  1.08  1.51 -0.17 -0.56 -0.67  0.46 -0.19  1.15 -0.03
Turi         1.80 -0.19 -0.81  0.37  1.78 -1.12 -0.54 -0.69 -0.15  0.53
Lorenzo      2.58  1.53  1.61 -0.08 -0.80  0.88 -0.34 -0.05 -0.14  0.15
Karlivans    2.32  0.19  0.14 -1.17  0.42  0.30 -1.13  0.93  0.32 -0.09
Korkizoglou  1.46 -1.79 -2.95 -0.89 -1.03 -0.31 -0.13 -0.63  0.30  0.54
Uldal        2.88 -0.13  0.52  0.04 -0.74 -0.46 -0.54  0.20  0.04  0.03
Casarsa      3.30 -3.49 -0.38 -0.35 -0.54 -0.16 -0.19  0.36 -0.18 -0.57

Esimese peakomponendi skoore uurides näeme, et esimesed võistlejad on keskmisest märkimisväärselt võimekamad. Teise peakomponendi skoorid näitavad aga, et esimesed võistlejad on jooksualades keskmisest nõrgemad, aga paremad viskealadel.

Sealjuures tuleb arvestada tunnuste sisu. Mõne tunnuse kõrgem väärtus võib peakomponendi tähendusega hästi sobida, samas kui teise tunnuse korral sobiks paremini madalam väärtus. Sellisel juhul võib peakomponentide tõlgendamise lihtsustamiseks vahetada osade tunnuste märk, nt korrutades nende väärtused väärtusega \(-1\).

Warning

Esimese peakomponendi suund uuel koordinaatteljestikul on juhuslik. Seetõttu on igal peakomponentide arvutamisel kordajate absoluutväärtused küll samad, aga positiivsed märgid võivad järgmisel arvutamisel olla negatiivsed ja vastupidi.

29 Peakomponentide joonis

Kahte esimest peakomponenti saame kujutada erilisel peakomponentide hajuvusjoonisel (biplot), millel on esitatud ühtaegu vaatlused ja tunnused.

  • Punktid näitavad vaatluste paiknemist kahe esimese peakomponendi suhtes.
  • Joonte suund näitab iga tunnuse ja vastava peakomponendi laadimise suunda.
  • Joonte pikkus näitab kordaja absoluutväärtust.
  • Nurk joonte vahel iseloomustab vastavate tunnuste omavahelist korrelatsiooni.
par(mar = c(4,4,2,4))
biplot(peakomp)