4. Lýsandi tölfræði
Í þessum kafla munum við fjalla um algengar lýsistærðir sem notaðar eru
til að lýsa gögnum. Við munum skipta umfjölluninni upp eftir því hvort
verið sé að vinna með talnabreytur eða flokkabreytur. Fyrir
talnabreyturnar munum við kynnast aðferðunum min()
, max()
,
mean()
,median()
, var()
, sd()
, quantile()
, og
IQR()
. Þær eru teknar fyrir í hluta 4.1. Á
flokkbreytur notum við skipanirnar table()
og prop.table
en þær eru
teknar fyrir í hluta 4.2. Að lokum fjallar hluti
4.3 um aðrar gagnlegar skipanir. Þar munum við sjá
aðferðirnar round()
, summary()
og tapply()
.
4.1. Talnabreytur
4.1.1. Talnabreytur
Í þessum hluta munum við skoða lýsistærðir fyrir talnabreytur. Við
byrjum á að sjá hvernig við getum auðveldlega fundið hæsta og lægsta
gildið sem breytan tekur en snúum okkur svo að lýsistærðum sem lýsa
miðju og breytileika talnabreyta. Það er oft svo að það vantar mælingar
í breytunni okkar, þá kemur na.rm = T
stillingin að góðum notum en
hana má nota í nær öllum aðferðunum sem fjallað verður um í þessum
hluta.
4.1.1.1. max()
Athugið
Inntak: nafn á vigri/breytu
Úttak: hæsta gildi
Helstu stillingar: na.rm
Aðferðin max()
gefur hæsta gildið. Viljum við finna hæsta gildið af
3, 4, 7 og 8 gerum við það með
max(c(3,4,7,8))
## [1] 8
en viljum við finna hæsta gildi ákveðinnar breytu gerum við það með að mata aðferðina með nafni breytunnar.
max(konnun$ferdatimi_skoli, na.rm=T)
## [1] 75
4.1.1.2. min()
Athugið
Inntak: nafn á vigri/breytu
Úttak: lægsta gildi
Helstu stillingar: na.rm
Aðferðin min()
gefur lægsta gildið. Viljum við finna lægsta gildið
af 3, 4, 7 og 8 gerum við það með
min(c(3,4,7,8), na.rm=T)
## [1] 3
en viljum við finna lægsta gildi ákveðinnar breytu gerum við það með að mata aðferðina með nafni breytunnar.
min(konnun$ferdatimi_skoli, na.rm=T)
## [1] 0
4.1.2. Miðja
4.1.2.1. mean()
Athugið
Inntak: nafn á vigri/breytu
Úttak: meðaltal
Helstu stillingar: na.rm
Aðferðin mean()
reiknar meðaltal. Viljum við reikna meðaltal
talnanna 3, 4, 7 og 8 gerum við það með:
mean(c(3,4,7,8))
## [1] 5.5
Viljum við reikna meðaltal ákveðinnar breytu gerum við það með að mata aðferðina með nafni breytunnar.
mean(konnun$ferdatimi_skoli, na.rm=T)
## [1] 19.42786
4.1.2.2. median()
Athugið
Inntak: nafn á vigri/breytu
Úttak: miðgildið
Helstu stillingar: na.rm
Aðferðin median()
reiknar miðgildi. Viljum við reikna miðgildi
talnanna 3, 4, 7 og 8 gerum við það með
median(c(3,4,7,8))
## [1] 5.5
en viljum við reikna miðgildi ákveðinnar breytu gerum við það með að mata aðferðina með nafni breytunnar:
median(konnun$ferdatimi_skoli, na.rm=T)
## [1] 16
4.1.3. Breytileiki
4.1.3.1. var()
Athugið
Inntak: nafn á vigri/breytu
Úttak: dreifni
Helstu stillingar: na.rm
Aðferðin var()
reiknar dreifni. Viljum við reikna dreifni talnanna
3, 4, 7 og 8 gerum við það með
var(c(3,4,7,8))
en viljum við reikna dreifni ákveðinnar breytu gerum við það með að mata aðferðina með nafni breytunnar:
var(konnun$ferdatimi_skoli, na.rm=T)
## [1] 198.786
4.1.3.2. sd()
Athugið
Inntak: nafn á vigri/breytu
Úttak: staðalfrávik
Helstu stillingar: na.rm
Aðferðin sd()
reiknar staðalfrávik. Viljum við reikna staðalfrávik
talnanna 3, 4, 7 og 8 gerum við það með
sd(c(3,4,7,8))
## [1] 2.380476
en viljum við reikna staðalfrávik ákveðinnar breytu gerum við það með að mata aðferðina með nafni breytunnar:
sd(konnun$ferdatimi_skoli, na.rm=T)
## [1] 14.09915
4.1.3.3. quantile()
Athugið
Inntak: nafn á vigri/breytu
Úttak: hlutfallsmörk
Helstu stillingar: na.rm, probs
Aðferðin quantile
reiknar út hlutfallsmörk. Sjálfgefna stilling
aðferðarinnar skilar okkur fjórðungamörkunum. Við mötum aðferðina með
nafninu á breytunni:
quantile(konnun$ferdatimi_skoli, na.rm=T)
## 0% 25% 50% 75% 100%
## 0 8 16 25 75
Við getum notað probs
stillinguna til að reikna hvaða hlutfallsmörk
sem er.
4.1.4. Samspil tveggja talnabreyta
4.1.4.1. cor()
Athugið
Inntak: nafn á tveimur vigrum/breytum
Úttak: fylgni
Helstu stillingar: use
Reikna má fylgni milli tveggja breyta í R með cor()
aðferðinni. Við
þurfum að mata aðferðina með heitunum á breytunum sem við ætlum að
reikna fylgnina á milli. Viljum við reikna fylgnina á heildarlengdar og
höfuðlengdar pokarotta, semsagt breytanna heildarlengd
og hofud_lengd
,
notum við skipunina:
cor(pokarotta$heildarlengd, pokarotta$hofud_lengd)
## [1] 0.6910937
Stillinguna use="complete.obs"
notum við vanti einhverjar mælingar.
Munið að við reiknum aðeins út fylgnistuðul sé línulegt samband á milli
breytanna!
4.2. Flokkabreytur
Í þessum hluta reiknum við út lýsistærðir fyrir flokkabreytur. Við byrjum á að sjá hvernig finna má tíðni og hlutföll á auðveldan hátt og skoðum svo lýsistærðir sem lýsa sambandi tveggja flokkabreyta.
4.2.1. Tíðni og hlutfall
4.2.1.1. table()
Athugið
Inntak: nafn á flokkabreyt(um)
Úttak: tíðni
table()
skipunin telur hversu oft hver og ein útkoma flokkabreytu
kemur fyrir. Viljum við sjá hversu margir nemendur voru í LAN203 og
STÆ209 í gagnasafninu okkar gerum við það með:
table(konnun$is)
##
## Jarðaberja Súkkulaði Vanilla
## 39 91 71
Við getum líka matað table()
með tveimur flokkabreytum og þá telur
hún hversu oft hversu mörg viðfangsefni hljóta hverja og eina af
mögulegum samsetningum útkoma beggja breytanna eins og er sýnt hér að
neðan.
table(konnun$is, konnun$dyr)
##
## Hunda Ketti
## Jarðaberja 23 16
## Súkkulaði 61 30
## Vanilla 43 28
4.2.1.2. prop.table()
Athugið
Inntak: tafla - úttak úr table()
Úttak: hlutföll
Helstu stillingar: margin
table()
skipunin skilar okkur fjölda/tíðni en viljum við frekar
hlutföll getum við notað prop.table()
aðferðina. Við mötum hana með
því sem table()
aðferðin skilar:
prop.table(table(konnun$is))
##
## Jarðaberja Súkkulaði Vanilla
## 0.1940299 0.4527363 0.3532338
Séum við að vinna með tvær breytur má mata prop.table()
aðferðina á
þrennan hátt. Viljum við fá heildarhlutföllin gerum við það með:
prop.table(table(konnun$is, konnun$dyr))
##
## Hunda Ketti
## Jarðaberja 0.11442786 0.07960199
## Súkkulaði 0.30348259 0.14925373
## Vanilla 0.21393035 0.13930348
Í töflunni má t.d. sjá að um 30% nemenda í gagnasafninu kunna betur við hunda en ketti og finnst súkkulaðiís bestur. Viljum við aftur á móti skoða hlutföllin eftir línum í töflunni gerum við það með:
prop.table(table(konnun$is, konnun$dyr), margin=1)
##
## Hunda Ketti
## Jarðaberja 0.5897436 0.4102564
## Súkkulaði 0.6703297 0.3296703
## Vanilla 0.6056338 0.3943662
Í töflunni má t.d. sjá að um 67% nemenda sem finnst súkkulaðiís bestur eru hrifnir af hundum. Viljum við hins vegar skoða hlutföllin eftir dálkum í töflunni gerum við það með:
prop.table(table(konnun$is, konnun$dyr), margin=2)
##
## Hunda Ketti
## Jarðaberja 0.1811024 0.2162162
## Súkkulaði 0.4803150 0.4054054
## Vanilla 0.3385827 0.3783784
Í töflunni má t.d. sjá að um 21.6% þeirra sem eru hrifinn af köttum elska jarðaberjaís.
Takið eftir að nota má prop.table()
til að reikna lýsistærðirnar
næmi (e. sensitivity) og sértæki (e. specificity).
4.3. Aðrar gagnlegar skipanir
4.3.1. Aðrar gagnlegar skipanir
4.3.1.1. round()
Athugið
Inntak: gildi, vigur, tafla…
Úttak: gildi, vigur, tafla með námunduðum gildum
Helstu stillingar: digits
R skilar stundum óþarflega mörgum aukastöfum. Við getum notað
round()
aðferðina til að stjórna hversu mörgum aukastöfum er skilað.
Við mötum aðferðina með því sem reikna á og fjölda aukastafa sem á að
skila. Skoðum t.d. töfluna hér að ofan. Viljum við aðeins að þremur
aukastöfum sé skilað gerum við það með:
round(prop.table(table(konnun$is, konnun$dyr),2),3)
##
## Hunda Ketti
## Jarðaberja 0.181 0.216
## Súkkulaði 0.480 0.405
## Vanilla 0.339 0.378
4.3.1.2. summary()
Athugið
Inntak: allt milli himins og jarðar
Úttak: flest það sem þú vilt vita
Við munum rekast á skipunina summary()
nokkrum sinnum í þessari bók.
Skipunin skilar mismunandi úttaki eftir því með hverju hún er mötuð. Sé
hún mötuð með talnabreytu gefur summary()
aðferðin okkur fimm tölu
samantekt og meðaltal. Það er bæði hægt að mata aðferðina með tölum
summary(c(3,4,7,8))
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 3.00 3.75 5.50 5.50 7.25 8.00
og með nafni breytu:
summary(konnun$ferdatimi_skoli)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.00 8.00 16.00 19.43 25.00 75.00
Ef breytan sem við erum að skoða er flokkabreyta gefur summary()
aðferðin okkur nafnið á flokkunum og fjölda viðfangsefna í hverjum
flokki.
Það er líka hægt að mata summary()
aðferðina með nafninu á
gagnatöflu og fáum við þá upplýsingar um allar breyturnar í töflunni.
summary(konnun)
## X is ferdatimi_skoli styrikerfi_simi
## Min. : 1 Length:201 Min. : 0.00 Length:201
## 1st Qu.: 51 Class :character 1st Qu.: 8.00 Class :character
## Median :101 Mode :character Median :16.00 Mode :character
## Mean :101 Mean :19.43
## 3rd Qu.:151 3rd Qu.:25.00
## Max. :201 Max. :75.00
## ferdamati_skoli systkini_fjoldi dyr feministi
## Length:201 Min. : 0.000 Length:201 Length:201
## Class :character 1st Qu.: 2.000 Class :character Class :character
## Mode :character Median : 2.000 Mode :character Mode :character
## Mean : 2.541
## 3rd Qu.: 3.000
## Max. :10.000
## staerdfraedi_gaman smjor_kostar napoleon_faeddur stefnumot
## Min. :2 Min. : 144.0 Min. : 46 Length:201
## 1st Qu.:6 1st Qu.: 450.0 1st Qu.:1740 Class :character
## Median :7 Median : 595.0 Median :1769 Mode :character
## Mean :7 Mean : 593.8 Mean :1733
## 3rd Qu.:8 3rd Qu.: 745.0 3rd Qu.:1800
## Max. :9 Max. :1490.0 Max. :3142
## messi_staerd kosid
## Min. : 1.65 Length:201
## 1st Qu.:163.00 Class :character
## Median :169.00 Mode :character
## Mean :163.58
## 3rd Qu.:172.00
## Max. :191.00
4.3.1.3. tapply()
Athugið
Inntak: nafn á talnabreytu, nafn á flokkabreytu og nafn á aðferð fyrir lýsistærð
Úttak: gildi á lýsistærð fyrir talnabreytuna reiknað fyrir sérhvern flokk flokkabreytunnar
tapply()
skipunin getur verið mjög gagnleg viljum við reikna út
lýsistærðir talnabreytu fyrir hvern flokk í flokkabreytu sem tilheyrir
sömu gagnatöflu og talnabreytan. Við mötum tapply()
aðferðina með
nafninu á talnabreytunni, nafninu á flokkabreytunni og nafninu á
aðferðinni sem við viljum beita. Ef það vantar einhver gildi þurfum við
að nota na.rm=TRUE
líkt og áður. Viljum við t.d. reikna út meðaltal
ferðatíma í skóla eftir ferðamáta gerum við það með:
tapply(konnunat$ferdatimi_skoli, konnun$ferdamati_skoli, mean, na.rm=T)
## Á annan hátt Á hjóli / rafhlaupahjóli Gangandi / skokkandi
## 2.500000 11.666667 7.588235
## Með einkabíl Með strætó
## 19.923077 33.733333
4.3.1.4. Pípurtiháttur
Hingað til hafið þið kynnst allskyns skipunum í R og ættuð að vera
orðin nokkuð kunnug R umhverfinu. Þegar skipanir eru orðanr langar
og flóknar getur verið gott að nota pípurithátt. Táknið %>%
lesið „og þá“. Pípur eru notaðar til að „pípa“ lausn úr einni skipun
yfir í aðra. Með því að nota pípurihátt verða skipanirnar einfaldari
og auðskiljanlegar. Skoðum nokkur dæmi um pípurithátt:
Ef við viljum t.d. finna meðaltalið á tölunum 1-101, taka svo kvaðratrótina af meðaltalinu og skila með tveimur aukastöfum. Án pípunar er það gert svona:
round(sqrt(mean(1:101)),2)
## 7.14
Með pípun:
1:101 %>%
mean() %>%
sqrt() %>%
round(2)
## 7.14
Þessa skipun er auðveldara að lesa.
Ef við viljum skoða meðalferðatíma í skóla hjá þeim sem ferðast með strætó eftir því hvaða ís þeim finnst bestur. Byrjum að gera þetta án pípunar.
konnun1 <- konnun
konnun1 <- filter(konnun1, ferdamati_skoli=="Með strætó")
konnun1 <- select(konnun1, ferdatimi_skoli, is)
konnun1 <- group_by(konnun1, is)
konnun1 <- summarize(konnun1, Meðalferðatími=mean(ferdatimi_skoli))
konnun1
## is Meðalferðatími
## Jarðaberja 48.60000
## SúkkulaðI 25.07692
## Vanilla 36.91667
Hér þurftum við að búa til nýtt gagnasett og yfirskrifa það. Mun einfaldara er að gera þetta með pípurithætti.
konnun %>%
filter(ferdamati_skoli=="Með strætó") %>%
select(ferdatimi_skoli, is) %>%
group_by(is) %>%
summarise(mean(ferdatimi_skoli))
## is Meðalferðatími
## Jarðaberja 48.60000
## SúkkulaðI 25.07692
## Vanilla 36.91667
Það má líka nota pípurithátt við að teikna myndir.
konnun %>% ggplot(aes(x=is, y=ferdatimi_skoli))+
geom_boxplot()
Skoðum fleiri dæmi:
konnun %>% select(ferdatimi_skoli) %>% summary()
## ferdamati_skoli
## Min. :0.00
## 1at Qu. :8.00
## Median :16.00
## Mean :19.43
## 3rd Qu :25.00
## Max. :75.00
Einnig má nota kable()
skipunina sem útbýr fína töflu.
table(konnun$stefnumot) %>% kable()
## Var1 Freq
## Á ísrúnt 93
## Á kaffihús 74
## Í bíó 12
## Í fjallgöngu 22
Reiknum allskyns lýsistærðir fyrir breytuna smjor_kostar
eftir breytunni is
.
konnun %>%
filter(!is.na(smjor_kostar)) %>%
group_by(stefnumot) %>%
summarise("Miðgildi"=median(smjor_kostar),
"Meðaltal" = mean(smjor_kostar),
"Staðalfrávik" = sd(smjor_kostar)) %>% kable()
## stefnumot Miðgildi Meðaltal Staðalfrávik
## Á kaffihús 500.0 577.5676 209.5798
## Á ísrúnt 618.0 621.6667 229.0420
## Í bíó 589.5 576.0000 184.0198
## Í fjallgöngu 513.5 540.5909 153.5586
4.4. Leiksvæði fyrir R kóða
Hér fyrir neðan er hægt að skrifa R kóða og keyra hann. Notið þetta svæði til að prófa ykkur áfram með skipanir kaflans. Athugið að við höfum þegar sett inn skipun til að lesa inn puls
gögnin sem eru notuð gegnum alla bókina.
# Gogn sott og sett i breytuna puls.
puls <- read.table ("https://raw.githubusercontent.com/edbook/haskoli-islands/main/pulsAll.csv", header=TRUE, sep=";")
# Setjid ykkar eigin koda her fyrir nedan:
# Sem daemi, skipunin head(puls) skilar fyrstu nokkrar radirnar i gognunum
# asamt dalkarheitum.
head(puls)