NMST539, LS 2015/16

Cvičenie 1 (praktické cvičenie 1)

(Základy práce so statistickým softwarom R)

(práca s daty a používanie Sweave)


Na úvod použijeme data mtcars ktoré sú štandardne obsiahnuté v distribúcii Rka.

head(mtcars)
##                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
## Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1
dim(mtcars)
## [1] 32 11
summary(mtcars)
##       mpg             cyl             disp             hp       
##  Min.   :10.40   Min.   :4.000   Min.   : 71.1   Min.   : 52.0  
##  1st Qu.:15.43   1st Qu.:4.000   1st Qu.:120.8   1st Qu.: 96.5  
##  Median :19.20   Median :6.000   Median :196.3   Median :123.0  
##  Mean   :20.09   Mean   :6.188   Mean   :230.7   Mean   :146.7  
##  3rd Qu.:22.80   3rd Qu.:8.000   3rd Qu.:326.0   3rd Qu.:180.0  
##  Max.   :33.90   Max.   :8.000   Max.   :472.0   Max.   :335.0  
##       drat             wt             qsec             vs        
##  Min.   :2.760   Min.   :1.513   Min.   :14.50   Min.   :0.0000  
##  1st Qu.:3.080   1st Qu.:2.581   1st Qu.:16.89   1st Qu.:0.0000  
##  Median :3.695   Median :3.325   Median :17.71   Median :0.0000  
##  Mean   :3.597   Mean   :3.217   Mean   :17.85   Mean   :0.4375  
##  3rd Qu.:3.920   3rd Qu.:3.610   3rd Qu.:18.90   3rd Qu.:1.0000  
##  Max.   :4.930   Max.   :5.424   Max.   :22.90   Max.   :1.0000  
##        am              gear            carb      
##  Min.   :0.0000   Min.   :3.000   Min.   :1.000  
##  1st Qu.:0.0000   1st Qu.:3.000   1st Qu.:2.000  
##  Median :0.0000   Median :4.000   Median :2.000  
##  Mean   :0.4062   Mean   :3.688   Mean   :2.812  
##  3rd Qu.:1.0000   3rd Qu.:4.000   3rd Qu.:4.000  
##  Max.   :1.0000   Max.   :5.000   Max.   :8.000

Pripadne ‘summary’ pomocou jedného obrázku…

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)

Boxploty

Využijeme niekoľko štandardných grafických nástrojov, ktoré sú k dispozícii v Rku, aby sme získali základnu predstavu a štruktúre dat.

boxplot(mpg ~ cyl, col = "lightblue", xlab = "number of cylinders", ylab = "miles per galon", main= "")

Alebo dokonca zložitejší prípad zobrazujúci spotrebu v závislosti na dvoch rôznych faktoroch (s voľbou notched = TRUE).

boxplot(mpg ~ cyl * am, col = c(1,2,1,2,1,2), xlab = "number of cylinders", ylab = "miles per galon | automatic transmission", main= "", notch = T)
## Warning in bxp(structure(list(stats = structure(c(21.5, 22.15, 22.8, 23.6,
## : some notches went outside hinges ('box'): maybe set notch=FALSE

Alebo celkom sofistikovany ‘histogram’, ktorý inkorporuje aj odhad hustoty (pomocou príkazu vioplot() z knižnice ‘vioplot’).

library(vioplot)
x1 <- mtcars$mpg[mtcars$cyl==4]
x2 <- mtcars$mpg[mtcars$cyl==6]
x3 <- mtcars$mpg[mtcars$cyl==8]
vioplot(x1, x2, x3, names=c("4 cyl", "6 cyl", "8 cyl"), col="gold")
title("Violin Plots of Miles Per Gallon")

Scatterploty

Inou (pomerne jednoduchou) možnosťou, ako globálne nahliadnúť na veličiny v datach, ktoré nás zaujímajú, je použiť ‘scatterplot matrix’.

pairs(~mpg+disp+drat+wt,data=mtcars, 
   main="Jednoduchá Scatterplot Matica")

A sofistikovanejšie verzie aj s odhadom hustoty (pomocou knižnice library(car)).

library(car)
scatterplot.matrix(~mpg+disp+drat+wt|cyl, data=mtcars,  main="")

Existujú samozrejme mnohé iné možnosti, ako využiť dostupné grafiké nástroje v Rku a vytvoriť case-specific obrázky, grafy. Hlavný dôraz je pritom kladený na vizuálnu stránku, graf by mal dostatočne názorne zobrazovať podstatnú štruktúru datového súboru.

3D Scatterploty

Ďalšiou možnosťou sú viacrozmerné grafy, limitovaný sme ale ľudskou schopnosťou takéto grafy dobre vnímať. V prípade 3D grafov ale často existuje opodstatnenie na ich využitie. Použijeme príkaz scatterplot3d z knižnice ‘library(scatterplot3d)’.

library(scatterplot3d) 
## Warning: package 'scatterplot3d' was built under R version 3.1.3
s3d <-scatterplot3d(wt,disp,mpg, pch=16, highlight.3d=TRUE,
  type="h", main="3D Scatterplot")
fit <- lm(mpg ~ wt+disp) 
s3d$plane3d(fit)

Parallel Coordinates Plot

Pomocou príkazu parcoord() z knižnice ‘library(MASS)’.

library(MASS)
## 
## Attaching package: 'MASS'
## 
## The following object is masked from 'package:sm':
## 
##     muscle
colorVector <- rep("brown", dim(mtcars)[1])
colorVector[am == 0] <- "brown1"
colorVector[cyl == 6] <- "blue4"
colorVector[cyl == 6 & am == 0] <- "blue1"
colorVector[cyl == 4] <- "darkgreen"
colorVector[cyl == 4 & am == 0] <- "green"
parcoord(mtcars, col = colorVector, lty = gear)

A mnoho iných možnosti. Vždy je potrebné zvážiť, aký graf a ktoré grafické nástroje sú ideálne vzhľadom k problému a datovému súboru, ktorý je potrebné analyzovať.

Niekoľko dalších grafických príkazov, ktoré sú štandardne dostupné v Rku sú napr. barplot(), pie(), pie3d(), hist(), plot() a potom niekoľko dalších príkazov, ktoré je možne využiť na ‘dopracovanie’ resp. ‘dokreslenie’ obrázku/grafu, ktorý už existuje: napr. lines(), abline(), points(), text(), legend(), a ďalšie.


## Práca so Sweave Jednoduchý help na používanie Sweave a tiež Knit (ktorým bol vytvorený tento dokument) je na webovej stránke

https://support.rstudio.com/

Stručne a jednoducho je Sweave funkcia v Rku (teda Sweave()), ktorá integruje Rko a LaTeX. Analogicky je tomu tak v pripade Knit, čo je opäť funkcia v Rku, ktorá integruje (kompiluje) Rko do HTML kódu.

Základom je vytvorenie klasického tex súboru (pre Sweave) a html súboru (pre Knit). Príslušné súbory sa ale neuložia ako tex a html, ale ako Rnw (Sweave) a Rmd (Knit).

Do týchto suborov je potom možne okrem tex kódu a html kódu vkladať aj vhodne označený R kod. Volanim funkcie Sweave("nazov_suboru.Rnw") alebo Knit(nazov_suboru.Rmd) Rko prejde celý dokument, tex a html kód ignoruje, R kód spracuje a výstupom je súbor tex (po použití Sweave), alebo html (po použití Knit). S týmito súbormi je ďalej možné pracovať ako s klasickými tex a html súbormi.

V prípade, že použijeme k práci user-friendly interface (asi jedna z najlepších možnosti je RStudio)

https://www.rstudio.com

tak je možné okamžite vytvárať PDF a HTML súbory priamo z Rnw a Rmd súborov a to pouze stlačením príslučného tlačítka v menu RStudia.

Podrobnejší návod na prácu so Sweave napr. tu:

http://gosset.wharton.upenn.edu/

Pre názornú ukážku ako vkládať R kód do Rnw resp. Rmd súboru, viď nasledujúce obrázky (otvorené v RStudio).






Domáca úloha

(Deadline: druhé cvičenie / 07.03.2016)

Na webovej stránke Doc. Hlávku

http://www1.karlin.mff.cuni.cz/~hlavka/teac.html

je k dispozícii niekoľko dátových súborov, ktoré do Rka stačí načítať pomocou príkazu load(nazov_suboru.rda).

  • vyberte si jeden dátový súbor a načítajte ho v Rku;
  • vytvorte Rnw súbor, ktorý bude obsahovať aspoň niekoľko popisných štatistík spočítaných z datového súboru, ktorý ste si zvolili;
  • využijte niektoré grafické nástroje, ktoré sme si ukázali na cvičení a vhodne ich aplikujte na niektoré premenné v zvolenom datovom súbore;
  • pokúste sa vymyslieť vhodný a užitočný graf/obrázok, v ktorom použijete niektoré z grafických príkazov vymenovaných na záver sekcie ‘Parallel Coordinates Plot’;