NMSA230 - Cvičenie 1
Softwarové prostředky pro matematiku a stochastiku
Po: 10/10/16 | (týždeň 2)
I. Štatistický software R (úvod a základy)
Účelom prvého cvičenia z predmetu NMSA230 je oboznámiť sa so štatistickým softwarom R (R Development Core Team, 2016),
ktorý je najčastejšie používaným softwarovým nástrojom určeným k spracovaniu, príprave a následnej štatistickej analýze dat.
Jedná sa o GNU projekt, podobný programu S a primárne je navrhnutý a určený pre štatisticku analýzu dat.
Program R (dostupný pod GNU GPL licenciou) je k dispozícii k stiahnutiu (free of charge) na adrese
https://www.r-project.org
K dispozícii sú distribúcie s priamou podporou pre OS Windows, Linux aj Macintosh.
Základnú inštaláciu programu R je možne jednoducho rozšíriť pomocou dodatočných knižníc (balíčkov),
ktoré sú k dispozícii na rôznych online repozitároch (zoznam hlavných repozitárov je na adrese
https://cran.r-project.org/mirrors.html). Jednotlivé R knižnice sú tvorené samotnými užívateľmi
softwaru R a ich správne fungovanie nie je garantované - je preto namieste určitá opatrnosť a hlavne aktívne premýšľanie pri ich používaní.
Pre užívateľov programu R sú k dispozícii aj rôzne grafické rozhrania, ktoré je možne dodatočne nainštalovať a umožňujú (v určitých smeroch)
jednoduchšiu a prehľadnejšiu prácu. Najznámejší a pravdepodobne aj jeden z najlepších R interfacov je RStudio.
Užitočné materiály pre prácu so štatistickým softwarom R
-
Bína, V., Komárek, A. a Komárková, L.: Jak na jazyk R. (PDF súbor)
-
Komárek, A.: Základy práce s R. (PDF súbor)
-
Kulich, M.: Velmi stručný úvod do R. (PDF súbor)
-
De Vries, A. a Meys, J.: R for Dummies. (ISBN-13: 978-1119055808)
V nasledujúcom uvedieme niekoľko jednoduchých príkladov a úloh, ktoré maju primárne slúžiť ako názorné ukážky toho, ako funguje program R, ako sa v ňom implementuju jednotlivé príkazy a akym spôsobom načítať vlastny datový súbor (nejedná sa ale o kompletný súhrn jdnotlivých možnosti, ktoré sú v programe R k dispozícii).
V prípade potreby/záujimu je možné využiť podrobnejšieho “sprievodcu” na cestu základmi Rka: Hrátky s R
(autor: doc. Arnošt Komárek); (k Hrátkam s R sú potrebné datove súbory:
auta2004.dat, auta2004.csv a auta2004.xls)
1. Základné matematické operácie v R
2 + (4 * 5)^2 ## za '#' nasleduje komentar, ktory R ignoruje
1:5 * 2
rep(4,3)
Výsledky je možné vždy uložiť do nejakého vhodne zvoleného objektu, na ktorý sa následne môžeme odvolávať.
v1 <- 2 + (4 * 5)^2 ## za '#' nasleduje komentar, ktory R ignoruje
v2 <- 1:5 * 2
v3 <- seq(1,5, length = 3)
v4 <- rep(4,3)
Jednotlivé výsledky je možné kombinovať a opäť uložiť ako nový výsledok (resp. prepísať pôvodný).
v1 + v2
v5 <- v3 - 2
v5 <- v5 * 2
Užitočné
Program R je objektový nástroj a zvláda aj matematické operacie, ktoré štandardne nie sú definované. Napr. súčet dvoch vektorov, ktoré maj rôznu dĺžku, operácie s maticami, ktoré maju rôzne typy/dimenzie. Je podstatné správne pochopiť, ako R v takýchto prípadoch funguje. Zabráni sa možným problémom v budúcnosti a v mnohých prípadoch to zase na druhu stranu može zjednodušiť výpočet a ušetriť čas.
-
V programe R existuje niekoľko prikazov, ktoré vytvoria vektor: napr.
c() , seq() , rep() , repliate() a pod.;
-
Podobne existuje niekoľko príkazov, ktoré vytvoria maticu: napr.
cbind() , rbind() , matrix() , a pod.;
-
Ku každému príkazu v R je k dispozícii návod, ako príkaz funguje - help sa zavolá zadaním samotného príkazu, ktorému predchádza otazník: napr.
?c() , ?seq() , ?rep() ;
2. Práca s vektormi a maticami
V prípade, že máme v objektoch uložené nejake štruktúry (vektor, maticu, pole, list, atď.), je možné sa v Rku odkazovať aj na jednotlivé elementy v daných objektoch.
v3[1] ### zobrazi prvu zlozku vektora v3
v3[-c(2,3)] ### rovnaky vystup, vektor v3 bez druhej a tretej zlozky
A to isté platí aj pre matice (a analogicky aj pre pole).
m1 <- rbind(v3, v3 * 2, v3 * 3)
m1[1:2,1:2] ## elementy z prveho a druheho riadku a stlpca matice m1
Príkazy je možné ľubovoľne kombinovať a vytvárať nové, zložitejšie objekty.
m2 <- rbind(cbind(m1[1:2,1:2], c(0,0)), seq(10,11, length = 3))
l1 <- list(m1, m2) ## list, ktory obsahuje dve rozne matice, m1 a m2
l1[[2]][1,] # vypise na obrazovku prvy riadok matice m2
Užitočné
-
Pre maticové násobenie je užitočné poznať operátor
%*% , ktorý výnasobi dve matice (ak majú správne rozmery). Vhodnosť rozmerov sa jednoducho skontroluje pomocou príkazu dim() (užitočne je poznať tiež príkazy nrow() a ncol() ).
-
Štandardne binárne operátory + , - , * , / , ^ fungujú ‘po zložkách’ - toto ‘fungovanie’ je ale R-špecifické - porovnajte nasledujúce výstupy:
1:4 + 1 ### sucet po zlozkach
1:4 * 1:2 ### nasobenie po zlozkach v paroch (dlzka jedneho vektora je celociselny nasobok dlzky druheho)
1:4 / 1:4 ### nasobenie v paroch (rovnake dlzky oboch vektorov)
1:5 + 1:2 ## Error - preco?
3. Náhodné data - generátory náhodných čísel
Program R je primárne štatistický nástroj - umožňuje preto aj prácu s náhodnymi hodnotami. Implementované je celá rada rôznych generátorov náhodných čísel. Pre rôzne pravdepodobnostné rozdelenia sú k dispozícii príslušne generátory, ktoré simulujú náhodné hodnoty z daného pravdepodobnostného rozdelenia.
-
Diskrétne rozdelenia:
rbinom() , rpois() , rgeom() , a ďalšie;
-
Spojité rozdelenia:
runif() , rexp() , rnorm() , a ďalšie;
Pre správne použitie geneátorov je potrebné preštudovať prislušný návod - napr. ?rnorm zobrazí help pre generátor náhodných čísel s normálnym rozdelením. Je vhodné si tiež všimnúť, že existujú podobné príkazy, označené ako pnorm() , dnorm() a rnorm() , ktoré postupne značia distribučnú funkciu daného rozdelenia, hustotu a kvantilovú funkciu.
Užitočné
-
Je nutné dôsledne si preštudovať implementáciu jednotlivých generátorov a funkcií, ktoré súvisia s pravdepodobnostnými rozdeleniami - je totiž pomerne časté, že parametre, ktoré špecifikujú nejaké rozdelenie, majú iný význam. Napríklad:
rnorm(10, 0, 2) ## simuluje 10 pozorovani z N(0, 4) - sigma^2 = 4
rexp(10, 4) ## simuluje 10 pozorovani z Exp(lambda = 4), kde EX = 1/4
4. Reálne data - načítanie vlastných datových súborov
V prvom rade, v programe R je k dispozícii niekoľko skutočných datových súborov. Ich zoznam je možne zobrazit zavolaním príkazu data() . Konkrétny datovy súbor následne zobrazíme pomocou názvu prislušného súboru - napr. Orange . Vo väčšíne sa jedná o data.frame - resp. datovu maticu. Na rozdiel od klasickej matice umožňuje data.frame rôzne datové typy v jednotlivých stĺpcoch.
stlpec1 <- seq(1:5)
stlpec2 <- c(rep("male", 3), rep("female", 2))
stlpec3 <- c("a", "b", "c", "d", "e")
### nie je mozne vytvorit maticu
cbind(stlpec1, stlpec2, stlpec3)
### ale je mozne vytvorit data.frame
data.frame(stlpec1, stlpec2, stlpec3)
K načítaniu vlastných datových súborov slúži niekoľko príkazov. V programe R je technicky možné načítať vpodstate akýkoľvek datovy súbor (txt, csv, xls, ale aj jpg, png, mp3 a mnoho ďalších). Najčastejšie používané sú read.table() a read.csv() , ktoré vyžaduju súbor uložený vo formáte txt resp. csv. Dodatočné parametre je možné využiť pri volani príkazu - tieto parametre upresňujú format súboru a spôsob načítania do R. Viac podrobnosti v príslušnom helpe ?read.table prípadne ?read.csv .
Užitočné
-
Program R umožňuje priamo načítať aj online zdroje. Potrebné je iba špecifikovať link a použiť vhodny príkaz. Napríklad:
test.data <- read.table("http://www.karlin.mff.cuni.cz/~maciak/NMSA407/NMSA407-1617-HW1.txt", header=T)
5. Štatistická analýza dat
V programe R máme momentálne v objekte test.data načítaný datový súbor. Jedné sa o niekoľko pozorovaní a niekoľko sledovaných premenných. Niečo o datovom súbore zistíme pomocou nasledujúcich príkazov:
dim(test.data)
## [1] 180 7
head(test.data)
## hitchhikers travelDistance driverGender country waitingTime carNumber
## 1 two guys < 50km male CZ 10 NA
## 2 two guys 100 - 500 male other 34 NA
## 3 two guys 100 - 500 female D 30 NA
## 4 two guys 100 - 500 male D 45 NA
## 5 two guys < 50km male D 30 NA
## 6 two guys < 50km male D 45 NA
## dayNight
## 1 day
## 2 day
## 3 night
## 4 day
## 5 day
## 6 day
summary(test.data)
## hitchhikers travelDistance driverGender country
## single guy:143 < 50km :98 female: 23 CZ :63
## two guys : 37 > 500km : 8 male :157 F :32
## 100 - 500:49 FIN :16
## 50 - 100 :25 other :14
## D :11
## ES :11
## (Other):33
## waitingTime carNumber dayNight
## Min. : 0.00 Min. : 1.0 day :156
## 1st Qu.: 10.00 1st Qu.: 6.0 night: 24
## Median : 30.00 Median : 31.5
## Mean : 51.58 Mean : 148.5
## 3rd Qu.: 55.00 3rd Qu.: 137.2
## Max. :720.00 Max. :1538.0
## NA's :42
Na jednotlivé premenné sa môžeme odkazovať pomocou ich názvu. Môžeme takto spočítať základne emirické charakteristiky pre jednotlivé premenné. V programe R je k tomu celá rada rôznych funkcii: mean() , median() , min() , max() , sd() , var() , a mnoho ďalších. Pomocou helpu naštudujte, k čomu jednotlivé funkcie slúžia, ako sú v R implementované a nájdite ďalšie užitočné funkcie, ktoré sú vhodné pre základnú štatisticku analýzu dat.
mean(test.data$waitingTime)
Analogicky, ako v prípade vektorov a matíc môžeme odkazovať len na určitú časť datového súboru a spočítať empirické charakteristiky len pre konkrétnu skupinu:
mean(test.data$waitingTime[test.data$driverGender == "male"])
mean(test.data$waitingTime[test.data$driverGender == "female"])
Užitočné
-
Pomocou helpu naštudujte, k čomu slúžia funcie
apply() , tapply() , aggregate() a by() ;
-
Použijte tieto funkcie v súvislosti s datovým súborom ‘test.data’ a pomocou nich spočítajte niektoré empirické charakteristiky;
-
V pripade, že pracujeme v programe R len s jednym datovým súborom, je možné prácu (resp. implementáciu príkazov) mierne zjednodušiť - pomocou príkazu attach(test.data) program R zprístupni jednotlivé premenné, ktoré je potom možne volať priamo pomocou ich názvu:
attach(test.data)
mean(waitingTime[driverGender == "male"])
mean(waitingTime[driverGender == "female"])
V prípade, že takto zprístupnene premenné už neplánujeme využívať, je dobre využiť komplementárny príkaz detach() .
-
Je dôležité správne pochopiť fungovanie Rka a odkazovanie na premenné po použití príkazu
attach() . Program R totiž zprístupni premenne v stave, v akom sa v momente volania príkazu attach() aktuálne nachádzaju v data.frame. Akýkoľvek následný zásah do data.framu a zmena hodnôt v ňom, nebude reflektovaná ak sa na premennu odkážeme pomocou jej názvu a nie priamo cez odkaz na data.frame;
Domáca úloha
(Deadline: 2. cvičenie | Po: 24.04.2016)
Z datových súborov, ktoré sú defaultne k dispozícii v štandardnej inštalácii programu R (zoznam sa zobrazí po zadaní príkazu data() ) si vyberte jeden datový súbor, ktorý obsahuje asponň dve numerické (spojité) premenné a aspoň dve kategorické (faktorové) premenné.
-
V programe R si pripravde jednoduchý skript, v ktorom spočítate základne popisné charakteristiky v datach.
-
Využijte faktorové premenné v datach a pomocou nich definujte podskupiny, v ktorých taktiež spočítate príslušné výberové charakteristiky.
-
Výsledný R skript si uložte (napr. ako ‘Rskript.R’, alebo plain txt ‘Rskript.txt’). V prípade, že si skript uložíte ako ‘R script’ (súbor ‘menoSuboru.R’), je možné tento súbor priamo načítať do programu R pomocou príkazu
source("menoSuboru.R") . Po načítaní súboru programautomaticky spracuje predpripravené príkazy.
|