19  Korrelatsioon

Korrelatsioonanalüüs on kõige sagedamini kasutatav mõõdik seose hindamiseks kahe arvtunnuse või harvemini järjestustunnuse vahel. Kui ühe tunnuse väärtuse suurenedes kipuvad teise tunnuse väärtused keskmiselt suurenema või vähenema, siis on nende tunnuste vahel korrelatsioon.

Selle korrelatsiooni suuna ja tugevuse saab arvutada ja esitada korrelatsioonikoefitsiendina. Kuigi selleks on erinevaid arvutuskäike, siis enamasti kasutatakse Pearsoni korrelatsioonikoefitsienti ja seda võib eeldada ka juhul, kui täpsustus arvutuskäigu kohta puudub.

Warning

Korrelatsioonikoefitsiendi väärtusel on kolm omadust, mille alusel saab teha järeldusi vastava tunnuste vahelise seose kohta:

  • selle väärtus on vahemikus -1 ja 1;
  • selle absoluutväärtus näitab seose tugevust, kus
    • väärtus 0 näitab seose puudumist ja
    • väärtus -1 või 1 näitab täielikku seost;
  • selle märk näitab seose suunda, kus
    • positiivne väärtus tähendab positiivset seost ehk ühe tunnuse väärtuste suurenedes suurenevad ka teise tunnuse väärtused,
    • negatiivne väärtus näitab negatiivset seost.

Hinnang korrelatsioonikordaja tugevusele oleneb konkreetsetest nähtustest, mida tunnused esindavad. Nt füüsikaliste nähtuste vahel on korrelatsioonikordajad tavaliselt kõrgemad kui ühiskondlike nähtuste puhul.

Üldiselt võib korrelatsioonikordaja alusel seose tugevuse hindamisel lähtuda sellest, et korrelatsioonikordaja

Harva huvitab meid üksik korrelatsioonikordaja kahe tunnuse vahel. Enamasti soovime hinnata korraga seoseid mitme tunnuse või väga paljude tunnuste vahel. Üks korrelatsioonanalüüsi kasulik rakendus on korrelatsioonimaatriksid ja nende alusel loodud seosekaardid (heatmaps), mis näitlikustavad korraga kõiki ette antud korrelatsioone.

R keeles on korrelatsioonide leidmiseks funktsioon cor(), mis vaikimisi arvutab Pearsoni korrelatsioonikordaja.

# Laadime laienduse tidyverse
library('tidyverse')
# Sisestame andmed
riigid <- read.csv('andmed/countries.csv')
# Kuvame andmetabeli ülevaate
str(riigid)
'data.frame':   227 obs. of  10 variables:
 $ country     : chr  "Afghanistan" "Albania" "Algeria" "American Samoa" ...
 $ region      : chr  "Asia" "Eastern Europe" "Africa" "Oceania" ...
 $ population  : int  31056997 3581655 32930091 57794 71201 12127071 13477 69108 39921833 2976372 ...
 $ area        : int  647500 28748 2381740 199 468 1246700 102 443 2766890 29800 ...
 $ netmigration: num  23.06 -4.93 -0.39 -20.71 6.6 ...
 $ gdp         : int  700 4500 6000 8000 19000 1900 8600 11000 11200 3500 ...
 $ literacy    : num  36 86.5 70 97 100 42 95 89 97.1 98.6 ...
 $ phones      : num  3.2 71.2 78.1 259.5 497.2 ...
 $ arable      : num  12.13 21.09 3.22 10 2.22 ...
 $ agriculture : num  0.38 0.232 0.101 NA NA 0.096 0.04 0.038 0.095 0.239 ...
# Jätame ainult valitud tunnused
riigid <- riigid[, 3:10]
# Arvutame korrelatsioonid
korrelatsioonid <- cor(riigid, use = 'pairwise.complete.obs')
# Määrame käsu vastuse suurima laiuse
options(width = 1000)
# Kuvame arvutatud korrelatsioonid ümardatuna kahe komakohani
round(korrelatsioonid, 2)
             population  area netmigration   gdp literacy phones arable agriculture
population         1.00  0.47         0.00 -0.04    -0.04  -0.03   0.19        0.00
area               0.47  1.00         0.05  0.07     0.04   0.05  -0.08       -0.05
netmigration       0.00  0.05         1.00  0.38    -0.01   0.24  -0.06       -0.12
gdp               -0.04  0.07         0.38  1.00     0.51   0.83   0.02       -0.59
literacy          -0.04  0.04        -0.01  0.51     1.00   0.60   0.11       -0.61
phones            -0.03  0.05         0.24  0.83     0.60   1.00   0.06       -0.60
arable             0.19 -0.08        -0.06  0.02     0.11   0.06   1.00       -0.03
agriculture        0.00 -0.05        -0.12 -0.59    -0.61  -0.60  -0.03        1.00

Näeme, et nt kirjaoskuse ja sündimuse vahel on tugev negatiivne korrelatsioon ning rahvaarv korreleerub tugevalt ainult riigi pindalaga.

Korrelatsioonimaatriks ei pea olema sümmeetriline tunnuste suhtes, vaid ridades ja veergudes võivad olla ka erinevad tunnused.

Korrelatsioonimaatriksi kuvamiseks joonisena saame kasutada funktsiooni heatmap(). Vaikimisi järjestatkse tunnused selliselt, et sarnaste korrelatsioonidega tunnused oleksid lähestikku.

heatmap(korrelatsioonid)

Rohkem valikuid korrelatsioonimaartikis joonistamisel pakub funktsioon heatmap.2() laiendusest gplots. Lisaks legendile pakub see ka väga palju teisi võimalusi korrelatsioonide kuvamiseks.

library('gplots')
heatmap.2(korrelatsioonid, col = 'bluered', 
          cellnote = round(korrelatsioonid, 2), notecol = 'black', 
          srtRow = 45, srtCol = 45)

Interaktiivse seosekaardi tekitamiseks saame kasutada funktsiooni heatmaply() samanimelisest laiendusest.

library('heatmaply')
heatmaply(korrelatsioonid)