NMSA230 - Úvod do programování v R

Zimný semester 2019/2020 | Cvičenie 6 | St 18/12/19



Program R: Čo sa ešte oplatí vediet, alebo aspoň tušiť?


Program piateho cvičenia NMSA 230
  • Práca s datami a jednoduché simulácie
  • R knižnica Knitr
  • Interaktívne aplikácie prostredníctvom Shine


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)


1. Vlastné funkcie a súbory typu .R a .RData

Program R umožňuje vytváranie rôznych užívateľských funkcií. Vytvorené funkcie je možné jednoducho uložiť do datového súboru typu .R a pri opätovnom načítaní súboru pomocou R príkazu source(), sú funkcie opäť k dispozícii. Nasledujúcim príkazom načítame do programu R vlastné preddefinované funkcie:

rm(list = ls())
source("http://www.karlin.mff.cuni.cz/~maciak/NMSA230/mojeFunkce.R")

Súbor obsahuje jednu preddefinovanú užívateľskú funkciu mojaFunkce1(), ktora je definovaná následovne:

mojaFunkce1 <- function(x){
    m <- mean(x)
    v <- var(x)
    return(paste("Sample mean and sample variance: ", round(m, digits = 2), " (", round(var(x), digits = 3), ")", sep = ""))
}

Štandardným volaním funkcie pomocou jej ména (t.j. mojaFunkce1()) funkciu aplikujeme na konkrétny numerický vektor:

mojeFunkce1(rnorm(1000))

V podkladovom súbore je možné okrem samotných funkcii ukládať aj iné Rkové objekty - napr. výsledky parciálných výpočtov, simulácii a podobne. Nejedná sa ale o samotné objekty vo vorme hotových výsledkov, ale o podkladový Rkový zdrojový kód, ktorý tieto výsledky pri načítaní súboru vyhodnotením zdrojového kódu vytvorí.
Načitaním podkladového .R súboru teda zakaždým dôjde k samotnému výpočtu a vyhodnoteniu všetkých príkazov, ktoré sú v súbore definované. Tento postup samozrejme nie je ideálny v prípade, keď sú výpočty časovo náročné a skôr by sme ocenili pouze jednorázové vyhodnotenie a následne odkazovanie sa na hotové výsledky - k tomu slúži práve datový typ, R súbor typu .RData.

Nasledujúci príkaz načíta do programu R dva objekty - náhodné výbery o rozsahu 10000, avšak samotné generovanie náhodých výberov už neprebieha, dôjde pouze k načítaniu konkrétných hodnot dvoch konrétnych náhodnách výberov.

load(url("http://www.karlin.mff.cuni.cz/~maciak/NMSA230/hotoveVysledky.RData"))

Náhodné výbery su generované zo štandardného normálneho rozdelenia a z exponenciálneho rozdelenia so strednou hodnotou 1. Nastavenie seedu bolo zakždým set.seed(1). Empiricky môžeme tvrdenie jednoducho overiť:

set.seed(1)
newSample1 <- rnorm(10000)
sum(newSample1 == sample1)
## [1] 10000



Samostatne


  • V textovom exitore, alebo v programe RStudio otvorte súbor mojeFunkce.R a vytvorte niekoľko ďalších vlastných funkcii.
  • Vytvorte jednoduchú sumulačnú štúdiu a jej výsledky pre budúce odkazovanie uložte do súboru typu .RData.
  • Porovnajte fungovanie R príkazov source() a load().



Užítočné


  • Dôležité a často používané užívaťeľské funkcie je výhodné uložiť v samostatnom súbore typu .R a podkladový súbor načítať pomocou príkazu source(). Do tohto súboru by mal užívateľ ideélne zasahovať iba vo výnimočnych prípadoch, keď je nutné konkrétnu funkciu pozmeniť, alebo nadefinovať novú.
  • Postup práce a priebeh (štatistickej) analýzy dat vo forme postupnosti konkrétnych príkazov a riadkov R zdrojového kódu je opäť ideálne uložit ako .R súbor. Z dôvodu častého zasahovania do tohto súboru je ale asi vhodné, aby sa jednalo o iný súbor, než ten, v ktorom sú uložené základné uživateľské funkcie, aby nedošlo omyloim k prepísaniu samotnej funkcie, čo by mohlo mať za následok nekontrolovanú zmenu v jej fungovaní.
  • Jednotlivé riadky zdrojového kódu je užitočne náležite komentovať a k názvom jednotlivých premenných a objektov používať intuitivné značenie.

    ### komentar v programe R, resp. v subore typu .R 
    mojaFunkce1(x)



2. Datové súbory typu .xls, .csv, alebo .txt

V praxi sa štatistík stretáva najčastejšie s datami ktoré sú reprezentované číselne, väčšinou pomocou tabuľky, ktorá je uložená buť v Exceli, alebo v textových súboroch typu .csv a .txt.

Vyššie spomínaný datový súbor .RData je ideálný pre ukladanie samotných objektov vytvorených v programe R, resp. niektoré vzorové datové súbory určené k výukovým účelom bývajú taktiež uloženém v súbore typu .RData. Tieto objekty nemusia nutne reprezentovať štandardný súbor vo forme tabuľky s hodnotami. Pre uloženie konkrétnych dat vo forme tabuľky sú možno praktickejšie klasické textové súbory typu .xls, .txt, alebo .csv. Pre manipuláciu so súbormi slúžia funkcie read.table() (príkaz z R knižnice ‘gdata’), read,csv() a read.table().

Help k príkazom:

?read.table
?write.table



K uloženiu datovych súborov (ideálne vo forme tabuľky, resp. data.frame() slúžia v programe R príkazy write.xlsx() (z knižnice ‘xlsx’), write.csv() alebo write.table().

Samostatne


  • Vytvorte nejaké konkrétne data, alebo využijte datové súbory ktoré sú predinštalované v programe R (príkaz data()) a konkrétnu tabuľku s jednotlivými premennými a pozorovaniami uložte a načítajte ako datové typy .txt, alebo .csv.
  • Pomocou vhodných dodatočných parametrov sa pokuste formu uložených dat pozmeniť a následne opätovne načítať tak, aby nedošlo k zmene, alebo strate pôvodnej informacie (napr. dodatočné parametre ‘sep’, ‘dec’, ‘skip’, ‘na.string’, ‘as.is’, …).
  • Pre manipuláciu s datami a hlavne veľkými datovými súbormi sú v programe R užitočné knižnice

    install.packages("dplyr")
    install.packages("plyr")

    Viac informácii o oboch knižniciach a niekoľko vzorových príkladov napríklad tu: https://www.rdocumentation.org/packages/dplyr/versions/0.7.8 alebo tu https://seananderson.ca/2013/12/01/plyr/.

  • Užítočne je hlavne podívať sa na funkcie ako aggregate(), apply(), sapply(), lapply(), alebo mapply().



3. A čo ešte na záver?

Program R využívame hlavne ako nástroj na prípravu a následnú analýzu dat. Program R je možné taktiež využiť k príprave reportu, ktorý k štatistickej analýze väčšinou automaticky patrí. Takúto report by mal obsahovať úvod a zmysluplný popis samotného experimentu, z ktorého data pochadzajú a tiež dostatočne podrobný popis samotných dat. Z odborného (matematického a štatistického) hľadiska musí obsahovať aj dostatočne presné informácie o použitých metódach pri štatistickom vyhodnotení. Závery analýzy ale musia byť interpretovane v reči pôvodných dat a to spôsobom, ktorému aj nematematik, neštatistik pochopí. Pri výtvárani takéhoto reportu je užitočné využiť LaTeX, balíček Sweave, alebo R funkciu cat().

Nie vždy sme ale nútený pripraviť report v PDF kvalite. Zároveň by ale malo platiť, že zdrojové kódy a defaultne výstupy z Rkových funkcii by sa v reporte objavovať nemali - čo platí aj napr. pre štandardné tabuľky (napr. tabuľka popisných charakteristík, ako výstup funkcie summary()). V takomto prípade môže byť užitočné poznať R knižnicu ‘formattable’ - viac na https://www.littlemissdata.com/blog/prettytables.

Možnosti programu R sú vpodstate neobmedzené, zaujímavý pohľad na možné nadstavy a rozšírenia ponúka webová stránka https://awesome-r.com/.



Požiadavky na zápočet

  • Nutnou a zároveň postačujúcou podmienkou na získanie zápočtu (ak má študent/študentka predmet riadne zapísaný v aktuálnom školskom roku v systéme SIS) je vypracovanie parciálných úloh zadaných v priebehu semestra a včasné odovzdanie celkového reportu vrámci stanoveného deadlinu.
  • Parciálne úlohy postupne zahrňovali vygenerovanie vlastného datového súboru, vytvorenie niektorých dôležitých popisných charakteristík s vhodným grafickým doplnením, celkové spracovanie pomocou R knižnice ‘Sweave’, alebo ‘Knitr’ a doplnenie malej simulačnej štúdie (s vhodnou tabuľkou s výsledkami a doplňujúcim obrázkom).
  • Finálný súbor PDF (pri použití knižnice ‘Sweave’), alebo HTML (pri použití knižnice ‘Knitr’) je potrebné

    zaslať emailom na adresu maciak[AT]karlin.mff.cuni.cz najneskôr do piatku, 10.01.2020 (23:59).