6 Tunnusluvut
Tunnusluvut (engl. statistics) ovat keskeinen osa tilastotiedettä. Tunnuslukujen avulla voidaan tiivistää ja tarkastella aineistoa. Tässä harjoittelemme tyypillisimpien tunnuslukujen laskemista aineistosta. Näitä tunnuslukuja voi sanoa myös empiirisiksi, koska ne on laskettu aineistosta.
6.1 Sijaintia kuvaavat tunnusluvut
6.1.1 Minimi ja maksimi
Minimi tarkoittaa aineiston pienintä arvoa kyseiselle muuttujalle. Maksimi on vastaavasti suurin arvo. Minimi ja maksimi ovat periaatteessa helppo laskea funktioiden min
ja max
avulla, mutta niihinkin liittyy pari pientä sudenkuoppaa. Funktiot min
ja max
hyväksyvät argumenteikseen vain numeerisia vektoreita.
<- c(-1.25, -4.1, 1.16, -3.05, 4.17, 0.73, -3.14, 3.39, -2.55, 0.4)
dat_for_loc min(dat_for_loc)
## [1] -4.1
max(dat_for_loc)
## [1] 4.17
Joskus minimiä ja maksimia tarvitaan tilanteessa, jossa halutaan vaikkapa muuttaa kaikki negatiiviset arvot nolliksi (tai positiiviset, jos maksimi). Tämä onnistuu helpoiten funktioiden pmin
ja pmax
avulla. Samalla tapaa, jos halutaan kaikki lukua 1 pienemmät luvut muutettua luvuksi 1, niin tämä onnistuu vaihtamalla luku 0 lukuun 1.
# We want to get rid of all values below 0 and make them 0
pmin(dat_for_loc, 0)
## [1] -1.25 -4.10 0.00 -3.05 0.00 0.00 -3.14 0.00 -2.55 0.00
# Similar, but get rid of all values over 0
pmax(dat_for_loc, 0)
## [1] 0.00 0.00 1.16 0.00 4.17 0.73 0.00 3.39 0.00 0.40
# We can do similar things to any limit, e.g. 1
pmin(dat_for_loc, 1)
## [1] -1.25 -4.10 1.00 -3.05 1.00 0.73 -3.14 1.00 -2.55 0.40
Funktiota pmin
ja pmax
voi käyttää vieläkin yleisemmässä muodossa antamalla yksittäisen lukuarvon sijasta vektorin. Näitä emme käsittele tässä, mutta kiinnostuneet voivat kokeilla lisää itse.
6.1.2 Keskiarvo
Keskiarvo saadaan laskemalla muuttujan kaikki havainnot yhteen ja jakamalla summa havaintojen määrällä. Esimerkiksi aineiston \(1,2,3,4\) keskiarvo on \((1+2+3+4)/4 = 2.5\). Keskiarvoa satunnaismuuttujan \(X\) havainnoille voidaan merkitä matemaattisesti seuraavasti \[\overline{x} = \frac1n \sum_{i=1}^n x_i = \frac{x_1+x_2+\dots+x_n}{n},\] missä merkintä \(\overline{x}\) tarkoittaa itse keskiarvoa, \(x_1,...,x_n\) ovat havaintoja ja \(n\) on havaintojen määrä.
Keskiarvo voidaan laskea helposti funktiolla mean
.
<- ToothGrowth$len
tooth_length mean(tooth_length)
## [1] 18.81333
Mikäli muuttujassa on puuttuvia arvoja (NA
) niin keskiarvoksi tulee oletusarvoisesti NA
. Puuttuvat arvot voi jättää pois keskiarvon laskemisessa antamalla funktiolle lisäargumentiksi na.rm = TRUE
.
# Create some data
<- c(1, 2, NA, 4)
dat_for_mean # Data with NA results mean with NA
mean(dat_for_mean)
## [1] NA
# Leave NA-values out and calculate mean from the remaining ones
mean(dat_for_mean, na.rm = TRUE)
## [1] 2.333333
6.1.3 Mediaani
Mediaani ilmaisee aineiston keskimmäisen havainnon. Toisin sanoen puolet havainnoista on mediaania suurempia ja puolet mediaania pienempiä. Esimerkiksi aineiston \(1, 1, 2, 3, 5\) mediaani on \(2\). Jos aineistossa on parillinen määrä lukuja, otetaan kaksi keskimmäisä ja lasketaan ne yhteen ja jaetaan kahdella (keskiarvo). Aineiston \(3, 3, 5, 6, 7, 17\) mediaani on \((5 + 6) / 2 = 5.5\). Mediaani on helppoa laskea funktiolla median
.
# Let's think about median
<- c(7, 2, 3, 4, 1, 7, 0, 4, 3, 3, 2, 6)
dat_for_median dat_for_median
## [1] 7 2 3 4 1 7 0 4 3 3 2 6
sort(dat_for_median) # Median would be the middle value in the arranged data, thus 3
## [1] 0 1 2 2 3 3 3 4 4 6 7 7
# Getting median in R
median(dat_for_median)
## [1] 3
6.1.4 Kvantiilit
Mediaani siis kertoi kohdan, jossa 50 % aineistosta on pienenmpiä kuin kyseinen arvo. Entä jos haluamme luvun, jota pienempiä ovat vaikkapa 10 % aineiston havainnoista tai mikä tahansa muu osuus? Tällainen yleistys on nimeltään kvantiili. Joillakin kvantiileilla on erityisnimet. Ne ovat
- mediaani (50 % aineistosta on tätä pienempiä)
- alakvartiili (25 %)
- yläkvartiili (75 %)
- desiilit (10% välein)
- 10 %:n desiili, 20 %:n desiili jne.
Haluamansa kvantiilin voi laskea funktiolla quantile
. Jos haluat laskea 30 %:n kvantiilin, niin arnna argumentille probs
tätä vastaava suhteellinen osuus eli 0.30.
quantile(dat_for_median, probs = 0.30)
## 30%
## 2.3
quantile
-funktiolle voi antaa useita kvantiileita laskettavaksi kerralla. Tällöin argumentille probs on annettava vektori. Esimerkiksi kvartiilit ja mediaanin voi laskea samanaikaisesti näin:
quantile(dat_for_median, probs = c(0.25, 0.5, 0.75))
## 25% 50% 75%
## 2.0 3.0 4.5
Eräs jännä seikka on se, että laskemalla 0 %:n ja 100 %:n kvantiilit saa tulokseksi minimin ja maksimin. Samaan lopputulokseen pääsee myös funktiolla range
. Kokeillaan tätä
# 0 % and 100 % quantile gives a range of the data
quantile(dat_for_median, probs = c(0.00, 1.00))
## 0% 100%
## 0 7
# Let's compare with min and max
min(dat_for_median)
## [1] 0
max(dat_for_median)
## [1] 7
# There is also function called range
range(dat_for_median)
## [1] 0 7
Esimerkiksi viiksilaatikko-kuvaa vastaavat lukuarvot eli minimin, alakvartiilin, mediaanin, yläkvartiilin ja maksimin saa kätevästi quantile-funktiolla antamalla probs
-argumentille vektorin c(0, 0.25, 0.5, 0.75, 1)
. Tätä sanotaan joskus viiden numeron yhteenvedoksi.
quantile(dat_for_median, probs = c(0, 0.25, 0.5, 0.75, 1))
## 0% 25% 50% 75% 100%
## 0.0 2.0 3.0 4.5 7.0
6.1.5 Moodi
Moodi ilmaisee muuttujan yleisimmän arvon. Valitettavasti R:ssä ei ole valmista funktiota moodin laskemiseen. Sen sijaan funktio nimeltään mode
antaa objektin tyypin, eikä laske moodia. Jos moodin haluaa laskea R:ssä, on ensin muodostettava aineistosta frekvenssitaulukko ja sitten etsittävä taulokosta se arvo, josta on eniten havaintoja, eli suurin frekvenssi
# Find out the mode
<- c(7, 2, 3, 4, 1, 7, 0, 4, 3, 3, 2, 6, 1, 3, 3, 1, 6, 0, 1, 3,
dat_for_mode 0, 6, 4, 2, 3, 2, 2, 7, 3, 1, 5, 3, 4, 3, 3, 2, 2, 4, 2, 1,
5, 3, 2, 2, 2, 3, 4, 2, 5, 3, 4, 2, 1, 4, 2, 3, 1, 1, 4, 3,
2, 3, 5, 4, 4, 4, 1, 3, 1, 3, 5, 2, 3, 1, 4, 2, 4, 2, 1, 0,
3, 3, 3, 3, 4, 4, 4, 3, 4, 4, 2, 1, 2, 4, 4, 4, 6, 2, 3, 2)
<- table(dat_for_mode)
tab # Let's see how is tab
tab
## dat_for_mode
## 0 1 2 3 4 5 6 7
## 4 14 22 26 22 5 4 3
# Let's pick up the largest frequency using which.max function
which.max(tab)] tab[
## 3
## 26
# Mode is 3 and the frequency is 26
# Let's pick up only the value 3
names(tab)[which.max(tab)]
## [1] "3"
# That is character so let's convert it to numeric
as.numeric(names(tab)[which.max(tab)])
## [1] 3
Ylläoleva käy itse asiassa hyvästä esimerkistä tilanteesta, jossa seuraavaksi tekisin viimeisen rivin funktioksi ja jatkossa käyttäisin kyseistä funktiota työssäni. Funktiohin palataan osiossa Funktiot. En malta olla tekemättä funktiota, joten olkoon alla esimerkki moodi-funktiosta ilman suurempia selityksiä.
# Write a function for mode
<- function(x) {
moodi <- table(x)
tab as.numeric(names(tab)[which.max(tab)])
}# Use that function
moodi(dat_for_mode)
## [1] 3
6.2 Yhteenveto datasta (summary)
Kätevä tapa saada nopea yhteenveto datakehikon kaikista muuttujista on soveltaa summary
-funktiota datakehikkoon.
# Calculate summary for ToothGrowth data
summary(ToothGrowth)
## len supp dose
## Min. : 4.20 OJ:30 Min. :0.500
## 1st Qu.:13.07 VC:30 1st Qu.:0.500
## Median :19.25 Median :1.000
## Mean :18.81 Mean :1.167
## 3rd Qu.:25.27 3rd Qu.:2.000
## Max. :33.90 Max. :2.000
summary
huolii myös yksittäisen vektorin, jolloin yhteenveto tulostuu vaakasuuntaisena.
<- ToothGrowth$len
tooth_length summary(tooth_length)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 4.20 13.07 19.25 18.81 25.27 33.90
6.3 Varianssi ja keskihajonta
Yksittäiselle numeeriselle muuttujalle voidaan laskea varianssi funktiolla var
. Varianssia tulkittaessa kannattaa muistaa, että varianssin mittayksikkö ei ole sama kuin alkuperäisen muuttujan, vaan mittayksikkö tulee korottaa toiseen potenssiin. Esim. jos pituuden yksikkö on cm, niin pituuden varianssin yksikkö on \(\text{cm}^2\). Käytännössä tulkintaa kannattaa yrittää keskihajonnan avulla.
# pull the variable from data frame and use it directly in function var
var(ToothGrowth$len)
## [1] 58.51202
# calculate the variance-covariance matrix for entire data frame
# (gives NA to any pairs with categorical variables)
# variances are obtained from the diagonal (58.51, NA, 0.3954)
var(ToothGrowth)
## Warning in var(ToothGrowth): NAs introduced by coercion
## len supp dose
## len 58.512023 NA 3.8612994
## supp NA NA NA
## dose 3.861299 NA 0.3954802
Keskihajonta (engl. standard deviation) saadaan vastaavasti funktiolla sd
. Keskihajonta on varianssin neliöjuuri.
# standard deviation
sd(ToothGrowth$len)
## [1] 7.649315