NMSA230 - Úvod do programování v R
Zimný semester 2019/2020 | Cvičenie 3 | St 06/11/19
III. Grafické nástroje v programe R
Všeobecné informáie
-
K práci na seminári je potrebný programo R (Team Development Core, 2019), ktorý je dostupný pod GNU GPL licenciou (free of charge) na adrese https://www.r-project.org. K dispozícii sú distribúcie s podporou pre OS Windows, Linux, aj Macintosh.
-
Základnú inštaláciu programu R je možne rozšíriť o ďalšie dodatočné knižníce (packages), 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). Na inštaláciu konkrétneho baličku/knižnice v programe R slúži príkaz
install.packages("***") , kde namiesto *** je potrebné uviesť správne meno príslušného balíčka.
-
Okrem samotného programu R a rozširujúcich knižníc sú k dispozícii aj rôzne užívateľské rozhrania (user interfaces), ktoré je možne dodatočne nainštalovať a umožňujú (v určitých smeroch) jednoduchšiu a prehľadnejšiu prácu s programom R. Najznámejší a pravdepodobne aj jeden z najlepších R interface je RStudio (defaultne nainštalované na každom počítači v posluchárni).
-
Dalšie rozšírenia sú k dispozícii pre umožnenie fungovania programu R s inými programamy - napr. LaTeX, C++, Python, alebo optimalizačný toolbox Mosek (ale aj mnoho ďalších).
Stručný program trietieho semináru NMSA 230
-
Oboznámenie sa so zkladnými funkciami a nástrojmi, ktoré sú v programe R určené k vytváraniu rôznych grafických výstupov (obrázky, grafy, boxploty, diagramy, atď.).
-
Využitie grafických nástrojov pre jednoduchú exploratívnú analýzu za účelom vhodného doplnenia základných popisných charakteristík.
-
Podrobnejší “sprievodca” pre jednoduchú prácu s programom R: 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)
Užitočné študijné materiály pre prácu s programom 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. Základné grafické nástroje v programe R
V programe R je k dispozícii veľký výber rôznych funkcii a príkazov určených k vytváraniu variabilných grafických výstupov. Dalšíe dodatočné príkazy a funkcie je možne získať pri rozšírení štandardnej inštalácie nainštalovaním odatočných balíčkov (packages) - tie sú väčšinou špecificky zamerané na konkrétnu oblasť, balíček často poskytuje komplexnú sadu nástrojov na riešenie určitého špecifického problému.
Okrem toho je samozrejme možné vytvárať vlastné príkazy a funkcie a defaultné grafické nástroje v programe R v mnohých smeroch modifikovať, alebo úplne pozmeniť, vylepšiť a zdokonaliť. Grafické funkcie v programe R možeme podľa spôsobu fungovania začleniť do troch základných kategórii:
-
Funkcie, ktoré vytvárajú nové grafické rozhranie Pri volaní ktorejkoľvek fukcie z tejto kategórie automaticky dôjde k vytvoreniu nového grafického okna (graph window) v ktorom sa vykresli samotný výsledný obrázok (graf). Toto okno je ponechané ako aktívne a pomocou ďalších funkcii z druhej skupiny (viď nižšie) je možné dopĺňať ďalšie objekty do už existujúceho obrázku, prípadne meniť rôzne nastavenia a vlastnosti.
Základné príkazy (napr.): plot() , dotchart() , hist() , barplot() , pie() , boxplot() , pairs() , atď.;
-
Funkcie, ktoré dopĺňajú již vytvorený graf Do druhej kategórie patria funkcie a príkazy, ktoré fungujú len v prípade, že bola pred ich použitím zavolaná nejaké
funkcia z prvej kategórie a bolo tak vytvorené grafické okno, ktoré je ponechané stále aktívne. Pomocou príkazov a funkcii z tejto kategórie je možné dopĺňať ďalšie (často netriviálne) objekty do už existujúceho grafu (grafického okna - graph window).
Základné príkazy (napr.): points() , lines() , abline() , text() , legend() , atď.;
-
Funkcie určené na manipuláciu s grafmi a grafickými oknami Do tejto kategórie patria funkcie a príkazy, ktoré primárne nie sú schopné vytvárať obrázok, ani dopĺňať objekty do už existujúceho obrázku, ale služia na základnú manipuláciu s vytvorenými grafickými oknami (napr. uloženie vykresleného obrázku do rozných typov súboru, kombinácia a rozloženie niekoľkýh grafov v jednom grafickom okne, vytvorenie nového okna, zatvorenie aktívneho okna a pod.)
Základné príkazy (napr.): dev.new() , X11() , dev.off() , postscript() , pdf() , png() , par() , layout() , atď.;
Pomocou R helpu postupne zistite, k čomu jednotlivé príkazy a funkcie slúžia, ako sú implementované, aké dodatočné parametre je možné pri volaní funkcie využiť a každú z uvedených funkcii použijte aspoň v jednom grafe, ktorý vytvoríte samostatne.
Niekoľko názorných príkladov, ktoré využívajú niektoré z uvedených funkcii, sú uvedené nižšie. Všimnite si aj úlohu dodatočných parametrov, ktoré sa pri volaní konkrétnej funkcie spomínaju.
Kvalitný obrázok (graf), ktorý je vhodný na použitie v reporte, alebo prezentácii, nie je takmer nikdy možné získať pouze jednoduchým zavolaním defaultnej funkcie. Väčšinou je potrebná dodatočná práca minimálne s vhodným popisom na jednotlivých osách, prípadne dostatočne podrobnou legendou, ktorá pomôže pri celkovom porozumení vyobrazeného grafu.
Príklad 1 | datový súbor ‘mtcars’
Datový súbor ‘mtcars’, ktorý je štandardne k dispozícii v klasickej inštalácii programu R obsahuje údaje o 32 rôznych automobiloch predávaných v USA (typ auta, motoru, spotreba, atď.). Zaujíma nás spotreba auta - premenná označená ako mpg (miles per gallon) a chceme graficky zobraziť niektoré základne charakteristiky o tejto premennej.
Defaultné použitie funkcie plot() by vyzeralo takto:
plot(mtcars$mpg)

Celková poskytnutá informácia je ale hodne malá, takmer žiadna. Graf je potrebné vo viacerých ohľadoch vylepšiť. Jedna z možností je napríklad takáto:
x <- mtcars[order(mtcars$mpg),] # sort by mpg
x$cyl <- factor(x$cyl) # it must be a factor
x$color[x$cyl==4] <- "red"
x$color[x$cyl==6] <- "blue"
x$color[x$cyl==8] <- "darkgreen"
dotchart(x$mpg,labels=row.names(x),cex=.7,groups= x$cyl,
main="Gas Milage for Car Models\ngrouped by cylinder",
xlab="Miles Per Gallon", gcolor="black", color=x$color)
c4 <- mean(mtcars$mpg[mtcars$cyl == 4])
c6 <- mean(mtcars$mpg[mtcars$cyl == 6])
c8 <- mean(mtcars$mpg[mtcars$cyl == 8])
lines(c(c8, c8), c(1, 14), col = "darkgreen", lwd = 2)
lines(c(c6, c6), c(17, 23), col = "blue", lwd = 2)
lines(c(c4, c4), c(26, 36), col = "red", lwd = 2)

Robustnejsie charakteristiky dostaneme jednoducho pomocou príkazu boxplot() v ktorom zohľadníme tri rozličné kategórie podľa celkového počtu válcov v danom aute - premenná označená ako cyl .
boxplot(mpg ~ cyl, col = c("red", "blue", "darkgreen"), data = mtcars, xlab = "Počet válcov", ylab = "Spotreba [miles per gallon]")

Alternatívný náhľad dostaneme prostredníctvom matice scatterplotov, pomocou príkazu pairs() a s využitím niektorých ďalších (numerických, resp. spojitých) premenných:
pairs(mtcars[,c(1,3,4,6)], col=mtcars$cyl, pch = mtcars$am)

Sofistikovanejšie verzie aj s odhadom hustoty a regresnej závislosti možeme konštruovať pomocou knižnice library(car) príkazom scatterplot.matrix() :
panel.hist <- function(x, ...)
{
usr <- par("usr"); on.exit(par(usr))
par(usr = c(usr[1:2], 0, 1.5) )
h <- hist(x, plot = FALSE)
breaks <- h$breaks; nB <- length(breaks)
y <- h$counts; y <- y/max(y)
rect(breaks[-nB], 0, breaks[-1], y, col = "cyan", ...)
}
panel.cor <- function(x, y, digits = 2, prefix = "", cex.cor, ...)
{
usr <- par("usr"); on.exit(par(usr))
par(usr = c(0, 1, 0, 1))
r <- abs(cor(x, y))
txt <- format(c(r, 0.123456789), digits = digits)[1]
txt <- paste0(prefix, txt)
if(missing(cex.cor)) cex.cor <- 0.8/strwidth(txt)
text(0.5, 0.5, txt, cex = 2)
}
pairs(~mpg+disp+drat+wt + cyl, data=mtcars, lower.panel=panel.smooth, upper.panel = panel.cor, diag.panel = panel.hist, pch = 21)

|