Skip to content

Instantly share code, notes, and snippets.

@daroczig
Last active November 9, 2016 14:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save daroczig/e1b6aa7db18a3ffc956a8e1cc2511a99 to your computer and use it in GitHub Desktop.
Save daroczig/e1b6aa7db18a3ffc956a8e1cc2511a99 to your computer and use it in GitHub Desktop.
Daróczi Gergely (2016): Alkalmazott statisztika? R! In. Statisztikai Szemle. KSH.
---
title: Alkalmazott statisztika? R!
author: Daróczi Gergely
date: 2016
---
Az R programozási nyelvvel és adatelemző, statisztikai és adatvizualizációs rendszerrel (R Core Team 2016) kicsit több mint 10 éve ismerkedtem meg felsőfokú tanulmányaim során, amikor is egy választható gazdaságszociológia kurzus keretén belül a magyarországi burgonyapiac kaotikus viselkedésével (Vizvári, Bacsi 1997; Vizvári 2002) volt szerencsém rövidebben foglalkozni. Ezt a személyes emléket azért tartottam fontosnak leírni, mert a káoszelmélettel való ismerkedés in medias res -- a kapcsolódó meglehetősen összetettnek tűnő matematikai háttér tárgyalása nélkül --, az alkalmazással indult, és az R-nek köszönhetően a félév végén sikerrel abszolváltam a kurzust. Ezzel párhuzamosan egy új és igen gazdag világ tárult fel előttem az R eszköztárával, amely évekkel később egyik legkedvesebb szabadidős elfoglaltságommá, majd elsődleges munkaeszközömmé vált.
Noha az R nyelv már több mint 20 éves múltra tekinthet vissza, népszerűségét leginkább az elmúlt 5 évben nyerte el, és korábban inkább csak a felsőoktatásban és akadémiai pályán, statisztikusok között volt ismert. Ez jól látszik az alábbi ábrán is, ahol a Google Trends adatai alapján öt adatelemzésre alkalmas szoftver online keresési népszerűségét láthatjuk 2004 óta:
```{r gtrends, echo = FALSE, warning = FALSE, message = FALSE, results = 'hide', fig.width = 6.5, fig.height = 3.2, dpi = 150, fig.cap = 'Adatelemző szoftverek online keresettsége, népszerűsége'}
## https://cran.r-project.org/web/packages/gtrendsR/
library(data.table)
df <- fread('gtrends.csv')
setnames(df, sub(': (Worldwide)', '', names(df), fixed = TRUE))
df[, Month := as.Date(paste0(Month, '-01'))]
df <- df[, .(Month, MATLAB, SAS, R, SPSS, Stata)]
library(ggplot2)
library(reshape2)
ggplot(melt(df, id.vars = 'Month'), aes(x = Month, y = value, group = variable,
color = variable, linetype = variable)) +
geom_line() + theme_bw() + scale_x_date(date_breaks = 'year', date_labels = '%Y') +
xlab('') + ylab('Relatív keresési népszerűség (%)') + theme(legend.position = 'top') +
theme(legend.title=element_blank()) + theme(legend.key = element_blank())
```
Bár ezen adatok nem reprezentálják a szoftverek valódi népszerűségét és a keresési adatokból nem tudunk a valódi használati adatokra következtetni, annyi mégis látszik, hogy az elmúlt közel 15 év alatt komoly változások történtek. A keresési toplista éléről a MATLAB igen gyorsan visszaesett, majd a SAS vette át a vezetést évekig, mígnem 2011 óta egyértelműen az R lett a "legkeresettebb" adatelemző eszköz a listában, és az egyéb feltüntetett szoftverekkel ellentétben a kapcsolódó kereséseken belüli aránya szinte töretlenül növekszik^[A teljesség kedvéért meg kell jegyezni, hogy a listában nem szerepel például az Excel, amellyel kapcsolatban egy nagyságrenddel több keresés indult, továbbá a keresési adatok éven belüli szezonalitásából jól látszik, hogy a keresések száma erősen összefügg a tanévek időbeosztásával, tehát a keresési adatok inkább jellemzik a (felső)oktatás résztvevőit, mint például az ipari szereplőket.].
Mindenesetre joggal vetődhet fel a kérdés, hogy mire fel ez a nagy népszerűség vagy keresettség?
## Az R múltja és jelene
Tóth Gergely szerzőtársammal 2013-ban írt cikkünkben részletesebben tárgyaltuk az alkalmazott statisztika fejlődéséhez aktívan hozzájáruló hardver és szoftver eszközök XX. századi történetét, amelyben többek között kitértünk az első digitális számítógépek, a mainframe-ek, a személyi számítógépek és mobil eszközök; továbbá a BMD(P), a SPSS és SAS, a JMP, STATA és S, S+ továbbá R nyelvek fontosabb mérföldköveire is. Az alábbiakban ezekből az R története szempontjából a legfontosabb momentumokat emelem ki, hogy megérthessük mi vezetett az R mai sikeréhez.
A Scheme nyelv mellett az S nyelv tekinthető az R előfutárának, hiszen az R valójában az S nyelv open-source (nyílt forráskódú) implementációjaként született meg a '90-es évek elején. Az S nyelv azonban már jóval korábban, 40 évvel ezelőtt megszületett a C és C++ nyelveket is világra hozó Bell Laboratóriumban. Az S és R nyelvek szoros kapcsolatát jól jellemzi, hogy az S nyelven eredetileg dolgozó John Chambers ma az R Development Core Team (az R központi fejlesztőcsapata) tagja, továbbá Rick Beckert is örömmel számolt be az S fejlesztésével kapcsolatos tapasztalatairól a 2016-os R konferencián a Stanford Egyetemen (Smith 2016).
A Bell Laboratórium belső hálózatában már az 1970-es évek második felétől használták az elsősorban John Chambers által fejlesztett S programcsomagot. Nagy előnye volt a korábbi, egyedi feladatokra írt FORTRAN programokkal szemben, hogy egységes parancsok segítették az interaktív adatelemzést, illetve a különböző statisztikai módszerek elvégzéséért felelős függvények (programrészek) könnyen elérhetők voltak a fejlesztők számára. Ezeken kívül a nagyszámítógépekre szánt General Comprehensive Operating Systemről UNIX-ra történő portolás (1980), majd a program (1981), illetve a programkód (1984) megnyitása a külvilág felé garantálhatta leszármazottjai hatalmas sikerét. Az 1980-as évek végére az immáron több mint tíz éves program többszöri átdolgozása után megjelent a „New S” nyelv, amely a korábbi makrók helyett már valódi függvényekre épített, újabb grafikus eszközök (X11 és PostScript) váltak használhatóvá, kialakul a napjainkban is használt „formula-notation” (szabályjelölés) és az alapértelmezett S3, majd később az S4 metódusok (Daróczi, Tóth 2013).
Bár az S nyelv és programozási környezet, továbbá annak a kereskedelmi implementációja, a TIBCO által szállított S PLUS, a mai napig elérhető, de napjainkban az S nyílt forrású leszármazottja, az R szoftver és variánsai jóval népszerűbbek és általánosabban használtak mind az akadémiai, mind az ipari és egyéb környezetekben. Többek között például a TIOBE-index (a programozási nyelvek népszerűségét számszerűsítő lista) szerint az R a leggyakrabban használt programozási nyelvek sorában is bekerült az első 30 közé (2012), 2015-ben a 12. volt a listán, míg az S kereskedelmi változata (S-PLUS) csak ritkán került be az első 100 közé.
Az R program fejlesztése az S eredményein túl (Hornik 2012) Gerald Jay Sussman SCHEME nyelvéből kölcsönzött "lexical scoping" funkciója köré épült, és 1993-ban indult az Auckland-i Egyetemen Ross Ihaka és Robert Gentleman vezetésével. Azóta az R szoftver központi magjának fejlesztését és karbantartását a jelenleg 20 főt számláló R Development Core Team végzi.
A program nyílt forráskódú: szabadon használható, terjeszthető és módosítható a GPL v2 licenc mellett. A Free Software Foundation által elismert program, a GNU része. Számos platformon ingyenesen elérhető a telepítésre kész változata (Windows, Macintosh, Linux), sőt, napjainkra sok grafikus felhasználói felület („frontend”, „graphical user interface”) segíti az R-t használók mindennapi munkáját a hagyományos parancssorok, megoldások és azok integrált környezetben (RStudio, Emacs/ESS, Eclipse/StatET, Architect, TextMate, Notepad++ stb.) való futtathatósága mellett (Daróczi, Tóth 2013). Ezek közül napjainkban az RStudio a leggyakrabban használt és talán legdinamikusabban fejlődő IDE ("integrált fejlesztői környezet") az R felhasználók körében, amelynek létezik desktop (asztali) és szerver változata is. Ez utóbbi a számításokat egy távoli, általában nagy kapacitású, számítógépen végzi, a kezelőfelület, a parancssor pedig bármely szabványos Internet-böngészőből elérhető a kliens-oldalról -- akár jelszóval védetten is.
## R csomagok
Bár az alap R telepítés is tartalmaz számos adat-beolvasásra és átalakításra alkalmas funkciót, továbbá az általánosan használt statisztikai próbák és modellek körét, tovább adatvizualizációra is alkalmas, az R egyre növekvő sikerét az ingyenes és szabadon használható volta mellett (vagy talán inkább az alapján) elsődlegesen a CRAN (Comprehensive R Archive Network) csomagtárolónak és a felhasználók által megosztható és az R-hez hasonlóan ingyenesen, általában különösebb korlátozás nélkül megosztott programkódoknak köszönheti.
Napjainkban a CRAN több mint 9000 R csomagot számlál, amelyek többnyire lefedik a kurrens statisztikai módszerek tárházát, és mára elmondható, hogy alig jelenik meg új statisztikai módszert bemutató tudományos folyóiratcikk a kapcsolódó R csomag publikálása nélkül. A növekedés az elmúlt közel 20 év adatai alapján exponenciálisnak mondható^[Az adatok forrása: https://gist.github.com/daroczig/3cf06d6db4be2bbe3368] -- az első 10 évben összesen ezer, majd évről évre egyre több csomag került publikálásra. 2016-ban mindösszesen 6 hónap telt el a 8000. és a 9000. aktívan karbantartott új csomag publikálása között:
```{r cran_pkgs, echo = FALSE, warning = FALSE, message = FALSE, results = 'hide', fig.width = 6.5, fig.height = 3.2, dpi = 150, fig.cap = 'A CRAN tárolókban megtalálható aktív csomagok száma'}
pkgs <- fread('https://gist.githubusercontent.com/daroczig/3cf06d6db4be2bbe3368/raw/8e970fad675d443813be2c98c508e6224491495e/results.csv')
ggplot(pkgs, aes(as.Date(first_release), index)) +
geom_line(size = 1.25) +
scale_x_date(date_breaks = '2 year', date_labels = '%Y') +
scale_y_continuous(breaks = seq(0, 9000, 1000)) +
xlab('') + ylab('') + theme_bw()
```
Bár a CRAN-re bárki beküldhet R csomagokat, és azokon kizárólag automatikus teszteket futtatnak a hálózat üzemeltetői, a nagy számú felhasználó és az aktív közösség (GitHub, StackOverflow, [R-help] és egyéb levelezőlisták több mint havi 3000 üzenete stb.) állandó ellenőrzése és visszajelzése egyfajta garanciát jelent a programok karbantartására és további fejlesztésére. E mellett az R Core Development Team kezeskedik az alapcsomagok és néhány további library hibamentes működéséért, illetve mára a valóban standard munkaeszközzé vált R többek között klinikai vizsgálatok esetében is megfelelő felülvizsgálattal és tanúsítványokkal bír (R Foundation 2012).
Az alábbiakban sorra veszem a leggyakrabban, legáltalánosabban használt és általam leginkább nagyra értékelt csomagok tematizált listáját, hogy az R-rel ismerkedni vágyókat segíteni tudjam az első lépésekben. Természetesen ez a lista egyáltalán nem teljes és valamelyest szubjektív válogatás, mégis úgy gondolom, hogy a több mint 9000 csomag közötti választ nagymértékben tudja segíteni a kezdő felhasználók számára. A csomagok és az R függvények neveit `dőlt` betűvel jelölöm.
### Adatmanipuláció
Mint általánosan ismert, az adatelemzéssel foglalkozó projektekre fordított idő 80 százaléka általában az adatok beolvasásával, tisztításával és előkészítésével telik, és mindösszesen a maradék 20 százalék fókuszál a tényleges adatelemzésre, vizualizációra és modellezésre, ill. az eredmények kiértékelésére.
Ennek megfelelően R-ben is számos eszköz áll rendelkezésünkre az adatok beolvasására:
* a `read.csv` vagy általánosabb `read.table` függvény segítségével CSV, txt vagy egyéb strukturált szöveges állományokat olvashatunk be, nagyobb állományok gyors beolvasásához pedig a külön telepített `readr` csomagot vagy a `data.table` csomag `fread` függvényét javasolt használni,
* a `foreign` csomag lehetőséget biztosít a `dbf` fájlformátumon túl az általánosan használt egyéb adatelemző programok egyedi fájlformátumait olvasni, mint például az SPSS `sav` vagy a SAS által használt `ssd` és `xport`, továbbá az újabb `haven` csomag is számos kereskedelmi program formátumát támogatja, úgy mint a SAS `sas7bdat` és `sas7bcat`, az SPSS `sav` és `por` vagy a Stata `dta` fájljait,
* Excel fájlok legegyszerűbben a `readxl` csomag segítségével olvashatók, amely nagy előnye, hogy sem Java, sem Perl függőségekkel nem rendelkezik, így egyszerűen telepíthető, de a fejlettebb funkciók eléréséhez sokszor megkerülhetetlen valamelyik Java-alapú csomag, pl a `openxlsx` használata, amely formázott Excel táblák írására is alkalmas,
* a `DBI` csomag egy általános adatbázis réteget biztosít a felhasználók számára, amely segítségével kényelmesen tudunk kapcsolódni például MySQL (`RMySQL`), Postgres és Amazon Redshift (`RPostgreSQL`), Oracle (`ROracle`) MS SQL Server (`RSQLServer`) vagy egyéb adatbázisokhoz ODBC (`RODBC`) vagy JDBC (`RJDBC`) kommunikációs csatornákon keresztül.
Az adatbeolvasáson túl általában szükségünk lesz az adatok ellenőrzésére és tisztítására is. A holland statisztikai hivatal munkatársai által fémjelzett `validate` csomag egyszerűen meghatározható szabály-rendszerek alkalmazására nyújt lehetőséget beolvasott adatainkon, amely szabályok automatizált felderítésére is lehetőségünk nyílik a `deductive` csomag segítségével.
A tisztított adatok elemzése előtti adattranszformációk (pl adatok rendezése, szűrése, aggregálása, származtatott változók létrehozása, adathiány kezelése, imputálás, táblák összekapcsolása stb.) során már az alap R telepítés is számos hasznos függvényt biztosít például egy mátrix sorain vagy oszlopain végzett műveletek elvégzésére az `apply` függvény-család segítségével, vagy a `rowSums`, `colSums` etc. vektorizált megoldásokkal, de a hatékonyabb és felhasználó-barátabb szintaxis érdekében érdemesebb egyéb csomagokkal is megismerkednünk:
* a `data.table` csomag az R-ben általánosan használt `data.frame` adattömb oszlop-műveletekre optimalizált kiterjesztése, amely az alap R telepítéshez képest sokkal gyorsabb és hatékonyabb működést tesz lehetővé nagyobb adatbázisokkal való munka során egy SQL-szerű szintaxis segítségével, és különböző táblák komplex összekapcsolásaira (például overlap, rolling vagy non-eque join) is lehetőséget biztosít,
* napjainkban egyre népszerűbb a `magrittr` csomag által biztosított "pipe" (cső, csővezeték) operátorra épülő, Hadley Wickham^[Hadley Wickham számos további méltán népszerű R csomag (többek között például a `ggplot2`, `readr`, `stringr`, `lubridate`, `tidyr`, `rvest`) eredeti szerzője és karbantartója, amely csomagokat összefoglaló névvel csak egyszerűen `hadleyverse` vagy `tidyverse` névvel illetnek általában.] által karbantartott `dplyr` csomag, amely egyrészt a `data.table`-hez hasonló gyors működést, másrészt olvashatóbb kódot tesz lehetővé az R függvények egymásba ágyazása helyett a UNIX-ban megszokott pipe operátor segítségével a függvények kimenetét újabb függvényeknek adja át sorról sorra,
* a `reshape2` és `tidyr` csomagok az ún. long (hosszú) és wide (széles) táblák átalakítására nyújtanak lehetőséget a `dcast` és `melt` függvények segítségével, amely többek között a modellezés vagy adatvizualizációhoz szükséges adatformátum előállítása során bizonyul hasznosnak.
Bár R-ben általában adattömbökkel dolgozunk, de olykor elkerülhetetlen az ettől összetettebb adatstruktúrák kezelése. Ilyen esetekben a listák kényelmesen használhatók, azonban az adattömböknél megismert módszereket sajnos nem alkalmazhatjuk. Hasonló metódusokat kínál többek között az `rlist` csomag, amellyel listákon belül szűrhetünk, rendezhetünk vagy alakíthatjuk át adatainkat, ill. transzformálhatjuk adattömb formátumúra lehetőség szerint a további elemzésekhez.
### Adatvizualizáció
Az exploratív adatelemzés elengedhetetlen eszköze az adatok vizuális ábrázolása, amely segítséget nyújt az adatban rejlő minták felismerésében, vagy például konfirmatív faktorelemzés során is igen hasznos a feltárt eredmények képszerű megjelenítése, így az adattal foglalkozó szakemberek elengedhetetlen eszköztárába tartozik az adatvizualizáció is, amelyre már a kezdetek óta is igen jól használható módszerekkel és függvényekkel érkezik az R.
Már az alap telepítés is tartalmazza az általánosan használt főbb grafikai megoldásokat a `plot` függvény-család személyében, mint például az oszlop- vagy pontdiagram, de ugyanúgy elérhető hisztogram (`hist`) vagy éppen kördiagram (`pie`) is.
Bár már ezekkel a függvényekkel is egyszerűen tudunk egyszerre akár több változót is ábrázolni R-ben, a `lattice` csomag a formula jelölésnek köszönhetően a `grid` rendszerre támaszkodva, kiterjeszthető és testreszabható módon képes sokváltozós vizualizációk megjelenítésére többek között a `barchart`, `xyplot`, `histogram`, `densitzplot`, `contourplot` vagy például a kördiagram helyett javasolt `dotplot` segítségével. A `lattice` csomaggal készített ábrák általában kedvezőbb esztétikai megítélésben részesülnek mint az alap R függvényekkel generált grafikonok.
A legtöbbször használt grafikai csomag mégis a `ggplot2`, amely Wilkinson (1999) Grammar of Graphics (a grafikonok elemei és nyelvtana) R-beli implementációja. Sikerét egyrészt Wilkinson elképzelésének megvalósításának, így az egységes interfésznek és az egyszerű, gyors fejlesztést lehetővé tevő használatnak, továbbá a szép megjelenésű grafikonoknak köszönheti. A csomag segítségével a kezdő R felhasználók is publikálásra kész ábrákat tudnak készíteni akár csak néhány könnyen megjegyezhető és meglehetősen intuitív parancs használatával.
A fentebb bemutatott, statikus ábrák készítésére alkalmas csomagokon túl napjainkban egyre több olyan alkalmazással is találkozhatunk, amelyek segítségével egyszerűen készíthetünk interaktív grafikonokat -- sőt, azok összekapcsolásával akár dashboardokat is. Az általában D3.js (Bostock, Ogievetsky, Heer 2011) alapú vizualizációs technikákat R-en belül a legegyszerűbben a `htmlwidgets` csomag segítségével hívhatjuk meg, amely R csomag automatizálja az adatok Javascript számára való átadását, és általában az interaktív vizualizáció mindösszesen egy-két parancs meghívásával, pusztán R-en belül maradva, tehát bármiféle további Javascript, HTML vagy egyéb szoftverfejlesztési ismeret nélkül is megvalósítható.
Az általános grafikonok készítésére alkalmas csomagokon túl találunk speciális igényeket kielégítő R csomagokat is, például a hálózatelemzés (`igraph`), térbeli statisztika és GIS (`maps`, `maptools`, `rgeos`, `sp`, `choroplethr`), idősorelemzés (`zoo`, `xts`, `forecast`) területén, vagy akár folyamatábrák (`DiagrammeR`) is egyszerűen rajzolhatók R-ben.
A fentebb említett bármely az adatvizualizációs modul (és lényegében bármely R output) relatíve egyszerűen, pár soros R kóddal interaktív webalkalmazásban, dashboardban is felhasználható a `shiny` csomag és keretrendszer segítségével, amelyet futtathatunk akár saját gépünkön, akár szerver oldali környezetben is.
### Statisztikai modellek, machine learning
Az R leglényegesebb funkcionalitása talán azonban továbbra is a statisztikai módszerek nagyon gazdag tárháza, és teljes bizonyossággal kijelenthető, hogy nincs olyan programozási nyelv vagy adatelemző környezet, ahol több statisztikai modell vagy machine learning eljárás lenne elérhető, mint az R-ben -- legyen az akár egy hagyományos OLS regresszió, kevert modell vagy bayesi megközelítés.
A lineáris modellek már az alap R telepítésben elérhetők az egységes `lm` parancs segítségével, amely lineáris regressziós modelleken túl például varianciaanalízisre is lehetőség nyújt. A program a megadott változók mérési szintje alapján dönt az alkalmazott módszerről, de természetesen a modellek részletesen is paraméterezhetők. A `glm` parancs segítségével általánosított lineáris modellek építhetők, például Poisson-eloszlás alapján, vagy többek között logisztikus regresszió segítségével.
A felsőoktatásban hagyományosan bemutatott többdimenziós eljárások közül a hierarchikus klaszterelemzés (`hclust`), a k-közép eljárás (`kmeans`), a többdimenziós skálázás (`cmdscale`), a főkomponenselemzés (`prcomp` és `princomp`) és faktoranalízis (`factanal`) az alap R telepítés részei, amelyeket egyszerűen kiegészíthetünk akár új rotálási eljárásokkal (`FactoMineR`), vagy például új klaszterező algoritmusokkal (többek között `fpc` vagy `dbscan`).
Az R egyik fő erénye azonban abban rejlik, hogy nem csak natív megoldásokat kínál, hanem egyéb programnyelvek -- például C, C++ vagy a "big data"-val terhelt napjainkban egyre inkább a Java -- moduljai is jól beágyazhatók a környezetbe, sőt, azokhoz natív interfészen keresztül biztosít hozzáférést. Erre jó példa a `h2o` csomag, amely valójában egy különálló, elosztott rendszereken való futtatásra tervezett, machine learning eljárásokat igen hatékonyan megvalósító Java programcsomag. A H2O programot R parancsok segítségével is indíthatjuk, az adatok átadása a két környezet között automatikusan megtörténik, és a felhasználó számára észrevétlen módon nyílik lehetőségünk ezt a jól skálázható és meggyőző eredményeket produkáló ML eszközt egy pár soros R szkriptben használni. Hasonló módon érhető el az `xgboost` framework is.
Mindezek alapján ma már véleményem szerint kevéssé érdemes natív R függvényeket és (például a `randomForest`, `gbm`, `C50`, `rpart` vagy `party`) csomagokat használni ML algoritmusok futtatására, hiszen a külső modulok segítségével jóval hatékonyabb módon nyílik erre lehetőségünk, de ha mégis erre adnánk fejünket, akkor a `caret` csomag egy egységes interfészt biztosít a különböző csomagokban elérhető függvények futtatásához.
### Megismételhetőség
Napjainkban a statisztikai programokról szóló online társalgások központi témáját adják a „megismételhető” („reproducible research”), ún. „annotált” jelentések készítése („literate programming”) az R segítségével. Ennek az eljárásnak a lényege, hogy az elemzés folyószövegébe „csempészett” R kódot (ún. „chunk”-ok tartalmát) feldolgozva a kész anyag a szöveg között az eredményeket tartalmazza, ráadásul a szerző által meghatározott formátumban. Így nem szükséges többé táblázatkezelő eszközökben finomítani a statisztikai programok kimenetét, hogy azt majd egy szövegszerkesztőbe átmásolva tudjuk végleges formába önteni, hiszen mindezt megtehetjük egy lépésben is – az adatokra és nem a segédeszközökre koncentrálva.
R-ben minderre már az ezredforduló óta is lehetőségünk nyílt a `Sweave` segítségével PDF kimenetet generálva, azonban napjainkban már jóval népszerűbbek az egyéb fájlformátumokat is támogató, markdown-alapú eszközök. A markdown szöveges fájl formátum egyszerű szimbólumok segítségével jelöli a szöveg formázását (mint például a cím, alcím, táblázatok, beágyazott képek, hiperhivatkozások, referenciák, félkövér és kurzív betűk), amely többek között a `pandoc` program segítségével HTML, PDF, Word és egyéb dokumentum-formátumokba konvertálható. Ez a funkcionalitás R-en belül egyszerűen elérhető a `knitr`, `rmarkdown`, továbbá például a `pander` csomagok használatával.
A sima szöveges (markdown) formátum nagy előnyei közé tartozik az egyszerűség mellet például a Word dokumentumok kézzel való szerkesztésével szemben, hogy
* a kimeneti formátum bármikor megváltoztatható (legyen szükség akár PPT prezentációra vagy egy HTML blog-posztra az elemzés végén),
* ha változik a bemeneti adat vagy elképzelésünk a kimenettel kapcsolatban, például a grafikonokat szeretnénk újragenerálni más színpalettát használva, mindezt egy gombnyomással megtehetjük,
* az eredményeket generáló programkód a grafikonok, táblázatok mellett marad, az utólag bármikor ellenőrizhető, felülvizsgálható és újrafuttatható,
* a teljes dokumentum és programkód egyszerűen tárolható verziókövető rendszerekben (például git vagy subversion) és a különböző változatok bármikor elővehetők.
Ennek egy példája a jelen dokumentumot generáló R markdown fájl, amely elérhető a http://bit.ly/statszemle-2016-R címen.
### Egyéb eszközök
A fentebb röviden bemutatott témákon túl számos egyéb, különböző tudomány- vagy üzleti területen is jól használható R csomag született. Ennek részletesebb és még válogatottan is igen hosszú felsorolására terjedelmi okokból nem térek ki, de az érdeklődők számára ajánlom a CRAN tematikus és annotált csomaglistáját a https://cran.r-project.org/web/views címen. Itt, többek között, klinikai vizsgálatokkal, farmakokinetikával, pénzüggyel, szövegbányászattal, térstatisztikával, társadalomtudománnyal, idősor-elemzéssel, ill. további két tucat témával kapcsolatos oldalt tartanak karban a kapcsolódó kutatási kérdéseket, problémákat és az R csomagokat is jól ismerő szakértők.
Ezen listák közül ízelítőképpen a webes technológiákkal kapcsolatos gyűjteményt emelném ki. Itt találhatunk fejlesztőknek szánt csomagokat különböző webes szolgáltatásokkal való kommunikációs interfészek és R kliensek fejlesztésére, online tartalmak feldolgozására (például hogyan tudjuk egy weboldalon közzétett táblázat adatait különösebb manuális beavatkozás nélkül beolvasni), e-mail vagy IM üzenetküldésre alkalmas csomagokat, felhő szolgáltatásokhoz (mint például az Amazon, Google, Microsoft Azure vagy éppen a Facebook) tervezett klienseket, de akár interaktív, Javascript-alapú online dashboardok, teljes honlapok és infografikák készítésére alkalmas R csomagokat, sőt R alapú webalkalmazásokat is.
## R közösség
Azonban a rengeteg hasznos csomagon és algoritmuson túl az R népszerűségét és sikerét véleményem szerint a mögötte meghúzódó, pontosabban aktívan közreműködő közösségnek köszönheti. A Revolution Analytics 2014-es becslése szerint a világon mintegy 2 millió R felhasználó található, és számuk egyre növekszik. Sajnálatos, hogy a becslés kapcsán nem került közlésre az alkalmazott módszertan, annak megbízhatósága és a várható hiba nagysága, azonban egyéb metrikák mentén is jól látszik az R felhasználók magas létszáma:
* az [R-help] levelezőlistán 1997 és 2015 között közel 400 ezer üzenet született több mint 100 ezer különböző e-mail címről küldve (Daróczi 2015: 333),
* 2016 közepéig majdnem 150 ezer kérdés született R témában a programozó körökben jól ismert StackOverflow Q&A fórumon, amelyek meghatározó része igen gyorsan (pár órán belül) megválaszolásra is került,
* a Facebook adatai alapján körülbelül 1,3 millió felhasználójukat érdekli az R nyelv (Daróczi 2015: 343),
* az R fejlesztői és felhasználói tábor különösen aktív Twitteren: a Budapesten megrendezésre került 2016. szeptember 3-i satRday konferenciával kapcsolatban több mint 400 bejegyzés született 48 órán belül, de világszerte naponta több ezer tweet kerül publikálásra az #rstats hashtag jelöléssel rendezvényektől függetlenül is,
* a github.info adatai alapján 2014 végéig közel 35 ezer aktív R kódtárolót hoztak létre a GitHubon, amely alapján az R a 12. legnépszerűbb programozási nyelv a nyílt forráskódú programoknak otthont adó, online verziókezelő rendszerben.
Az R felhasználók fentebb említett informális kommunikációs csatornáin túl természetesen léteznek hagyományosabb fórumok is az eszmecserére és személyes találkozókra. A legnevesebb R-es esemény az éves useR! konferencia, amelyet évente váltakozva hol Európában, hol USA-ban rendeznek meg. Idén a Stanford Egyetemen 800 résztvevővel zajlott az esemény, jövőre Brüsszelben legalább ennyi résztvevőt várnak -- és remélhetőleg az idei hibából tanulva sikerül javítani a logisztikán és nem zárul le a regisztráció két hét alatt, a konferencia kezdete előtt hónapokkal a nagyon magas túljelentkezés hatására.
Ezen univerzális R konferencián túl számos egyéb többnapos nemzetközi rendezvény is működik világszerte. Az "R/Finance" konferenciát Chicago-ban rendezik évente május végén a pénzügyi kérdések iránt érdeklődőknek körülbelül 300 résztvevővel -- testvérrendezvénye a londoni "R in Insurance". A BioC konferenciát évente nyáron rendezik a biostatisztika fókusszal, de létezik az üzleti alkalmazásokra szakosodott előadássorozat is, például a jó pár éve ősszel Londonban és Bostonban is megrendezésre kerülő EARL konferencia. Kínában immáron 9. éve rendezik meg China-R konferenciát, amelyen a tavalyi látogatottsági adatok alapján körülbelül 4 ezer ember vesz részt évente. Az ERUM konferencia idén először került megrendezésre Lengyelországban azzal a céllal, hogy az európai R felhasználók számára nyújtson egy alternatív találkozási lehetőséget azokban az években, amikor a useR! konferencia az USA-ban van.
A nagy nemzetközi konferenciákon túl azonban számos egyéb kisebb esemény is színesíti az R felhasználók életét. Az R User Groups (rövidítve RUG), azaz R felhasználói csoportok célja, hogy a helyi R közösség tagjainak nyújtson lehetőséget a rendszeres találkozásokra és fejlődésre elérhető fizikai távolságban és minimális költségekkel. Hagyományosan a meetup.com oldalon meghirdetett események 1-2 havonta kerülnek megszervezésre, ahol egy hosszabb vagy több rövidebb szakmai előadás után a résztvevők egy pizza, üdítő vagy sör mellett informálisan beszélgetve tudnak ismerkedni egymással, amely beszélgetések általában nagyon inspiráló szakmai eszmecserékké és hasznos együttműködésekké, olykor barátságokká mélyülnek.
A hazai R meetup 2013. augusztusa óta működik. Mára a tagok száma elérte a 800 főt, és havonta váltakozva angol és magyar nyelvű, minden esetben ingyenes előadásokat szervezünk mintegy 60-80 fő részvételével. További információ található a http://www.meetup.com/Budapest-Users-of-R-Network oldalon, ahol szívesen látunk haladó és teljesen kezdő R felhasználókat, továbbá érdeklődő látogatókat is.
A világon először idén került megrendezésre az R Consortium és számos hazai adatelemzéssel foglalkozó cég támogatásával a satRday konferencia Budapesten, amely egynapos, szombatra eső rendezvénysorozattal azt a célt tűztük ki magunk elé, hogy a havonta megrendezésre kerülő meetupok és a nagy nemzetközi konferenciák között is lehetősége nyíljon az R felhasználóknak megismerkedni a környező országok R fejlesztőivel és felhasználóival. A rendezvény sikerét jól jelzi, hogy ezen első, kísérleti alkalommal is közel 200 fő regisztrált, és a résztvevők egyharmada külföldről érkezett, összesen 19 országból. A következő satRday konferencia a Dél-afrikai Köztársaságban és Puerto Ricoban kerül megrendezésre jövő év elején, hazánkba várhatóan 2018 tavaszán tér majd vissza.
## R kiadványok és egyéb média
Természetesen az R nyelv és annak alkalmazásai a konferenciák és meetupok forgatagán túl, akár jóval formálisabb keretek között is elsajátítható. Az R akadémiai háttérének köszönhetően számos szakkönyv született az elmúlt 20 évben: az r-project.org oldal több mint 150 R-rel foglalkozó könyvet sorol fel, elsősorban a Springer és a Chapman & Hall/CRC kiadóktól. Az általános statisztikai tankönyveken és módszertani kiadványokon túl jelentek meg gyakorlatorientált alkalmazás-gyűjtemények is különböző tudományterületekre fókuszálva, de találhatunk kifejezetten adatvizualizációval vagy például machine learning módszerekkel foglalkozó köteteket is, ill. készült könyv kifejezetten SPSS és SAS felhasználók számára is (Muenchen 2011).
A hazai R iránt érdeklődők számára magyarul is egyre több segédanyag áll rendelkezésre. Többek között ingyenesen elérhető Solymosi (2005), Abari (2008) és Tóth (2016) online jegyzete, de azok mellett bátran merem ajánlani Münnich és szerzőtársai (2006) pszichológus hallgatóknak írt, R példákat használó statisztika könyvét, vagy Reiczigel (2014) és szerzőtársainak hasonlóan magas színvonalú és remekül használható biostatisztika és R bevezető tankönyvét.
Ezen szisztematikus gyűjtemények mellett az R Foundation évente 2-3 alkalommal jelenteti meg az R Journal (korábbi nevén R News) folyóiratot, amelyben a legújabb R csomagokról, továbbá a legfrissebb R verzió újdonságairól olvashatunk. Az R csomagok részletesebb leírásainak hagyományosan a Journal of Statistical Software biztosít helyet, amely 20 éves folyóirat elismertségét jól példázza, hogy évek óta igen magas (3 fölötti) az impakt faktora.
A lektorált szövegeken túl számos további ingyenes forrást találhatunk az Interneten, például a GitHub-on közzétett tutorialok, ingyenesen elérhető könyvfejezetek, R feladatgyűjtemények vagy akár blog posztok formájában. Az R-bloggers.com oldal célja a világhálón sok száz különböző helyen megjelenő, de hasonló témával foglalkozó cikk összegyűjtése, hogy egy naponta néhányszor frissülő központi helyen olvashassuk az R-relevanciával bíró online írásokat.
Mindezeken túl az írott médiával szemben az audiovizuális tartalmakat előnyben részesítő érdeklődők számára is kínál kész megoldásokat az R közösség: többek között a coursera.org vagy a datacamp.com oldalon is találhatunk angol nyelvű előadásokat, online teszteket és komplett (ingyenes és fizetős) tanfolyamokat, amelyek akár iskola, akár főállás mellett is végezhetőek heti néhány órában.
## Bibliográfia
* Abari Kálmán [2008]: *Bevezetés az R-be*. http://psycho.unideb.hu/munkatarsak/abari_kalman/szamitastechnika_II/bevezetes_az_R_be_2008_04.pdf
* Bostock, Michael -- Ogievetsky, Vadim -- Heer, Jeffrey [2011]: *D3: Data-Driven Documents*. IEEE Trans. Visualization & Comp. Graphics (Proc. InfoVis).
* Chambers, John M. [1980]: Statistical Computing: History and Trends. In. *The American Statistician*. 34(4): 238–243.
* Daróczi Gergely -- Tóth Gergely [2013]: Felhőtlen statisztika a felhőben. In. *Statisztikai Szemle*. 11: 1118-1142.
* Daróczi Gergely [2015]: *Mastering Data Analysis with R*. Packt. London. 396.
* Gareth James -- Witten, Daniela -- Hastie, Trevor -- Tibshirani, Robert [2013]: *An Introduction to Statistical Learning*. Springer. http://www-bcf.usc.edu/~gareth/ISL
* Francis, Ivor [1981]: *Statistical Software: A Comparative Review*. Elsiever. New York.
* Hornik, Kurt [2012]: *The R FAQ*. http://cran.r-project.org/doc/FAQ/R-FAQ.html
* Leeuw, Jan de [2011]: Statistical Software: An Overview. In. *International Encyclopedia of Statistical Science*. Springer. Berlin. 1470–1473.
* Muenchen, Robert A. [2011]: *R for SAS and SPSS Users*. Springer.
* Münnich Ákos -- Nagy Ágnes -- Abari Kálmán [2006]: *Többváltozós statisztika pszichológus hallgatók számára*. http://psycho.unideb.hu/statisztika/
* R Core Team [2016]: *R: A language and environment for statistical computing*. R Foundation for Statistical Computing, Vienna, Austria. https://www.R-project.org
* Reiczigel Jenő -- Harnos Andrea -- Solymosi Norbert [2014]: *Biostatisztika nem statisztikusoknak*. Pars Kft.
* Routh, David A. [2007]: Statistical Software Review. *British Journal of Mathematical and Statistical Psychology*. 60(2): 429–432.
* Smith, David [2016]: *The history of R's predecessor, S, from co-creator Rick Becker*. Revolution Analytics Blog. http://blog.revolutionanalytics.com/2016/07/rick-becker-s-talk.html
* Solymosi Norbert [2005]: *...erre, erre...!*. https://cran.r-project.org/doc/contrib/Solymosi-Rjegyzet.pdf
* Tóth Dénes [2016]: *Bevezetés az R statisztikai programnyelv használatába*. https://tdeenes.gitbooks.io/rintro_ma/content/
* The R Foundation for Statistical Computing [2012]: *R: Regulatory Compliance and Validation Issues. A Guidance Document for the Use of R in Regulated Clinical Trial Environments*. http://www.r-project.org/doc/R-FDA.pdf
* Vizvári Béla -- Bacsi Zsuzsa [1997]: A magyar burgonyapiac kaotikus viselkedése. In. *Rend és Káosz* (szerk. Fokasz Nikosz). Replika könyvek 4. 205-214.
* Vizvári Béla [2002]. Dinamikus piacok és irányítás. In. *Magyar Tudomány*. 47: 1284-1297.
* Wilkinson, Leland [1999]: *The Grammar of Graphics*. Springer.
* Zeileis, A. [2005]: CRAN Task Views. *R News*. 5(1): 39–40.
We can make this file beautiful and searchable if this error is corrected: It looks like row 2 should actually have 1 column, instead of 6. in line 1.
Category: All categories
Month,R: (Worldwide),SAS: (Worldwide),Stata: (Worldwide),SPSS: (Worldwide),MATLAB: (Worldwide)
2004-01,34,65,5,29,79
2004-02,35,70,6,29,95
2004-03,36,68,6,33,98
2004-04,40,67,7,32,100
2004-05,40,66,6,31,89
2004-06,37,67,6,28,81
2004-07,35,65,5,25,72
2004-08,35,61,6,24,65
2004-09,37,67,6,27,84
2004-10,41,63,6,29,94
2004-11,41,61,6,31,89
2004-12,39,55,5,27,74
2005-01,39,60,5,26,70
2005-02,42,63,7,27,78
2005-03,42,62,6,29,81
2005-04,42,62,7,30,83
2005-05,43,62,6,30,77
2005-06,42,64,5,26,68
2005-07,42,60,5,22,55
2005-08,40,59,6,21,53
2005-09,44,61,6,24,67
2005-10,45,60,6,26,75
2005-11,44,62,6,26,73
2005-12,43,57,5,24,59
2006-01,43,65,5,23,55
2006-02,46,64,6,24,65
2006-03,46,61,6,25,69
2006-04,46,62,6,26,68
2006-05,45,64,6,26,63
2006-06,46,62,5,22,56
2006-07,48,58,5,19,46
2006-08,48,63,5,19,45
2006-09,52,64,5,20,57
2006-10,55,68,6,22,66
2006-11,56,64,6,24,68
2006-12,53,54,5,20,53
2007-01,52,64,5,21,51
2007-02,54,64,6,21,57
2007-03,54,65,6,23,63
2007-04,54,64,6,23,62
2007-05,54,65,6,23,59
2007-06,53,67,5,20,53
2007-07,49,67,5,18,44
2007-08,49,59,5,17,41
2007-09,51,63,5,19,50
2007-10,51,64,6,21,59
2007-11,52,63,6,22,62
2007-12,51,56,5,19,50
2008-01,48,66,5,20,48
2008-02,51,69,6,20,54
2008-03,49,64,6,21,57
2008-04,49,67,7,24,61
2008-05,48,65,6,21,55
2008-06,47,65,5,19,49
2008-07,48,61,5,17,43
2008-08,47,57,5,16,39
2008-09,48,63,6,19,52
2008-10,50,66,6,20,60
2008-11,50,62,6,21,61
2008-12,48,55,5,19,50
2009-01,48,59,5,19,45
2009-02,48,61,6,20,56
2009-03,47,64,6,22,61
2009-04,46,59,7,22,63
2009-05,44,56,6,21,57
2009-06,42,58,6,19,51
2009-07,42,53,6,17,43
2009-08,41,49,6,16,41
2009-09,43,55,6,18,54
2009-10,42,51,6,19,57
2009-11,42,49,6,21,58
2009-12,40,43,5,19,48
2010-01,40,49,5,18,45
2010-02,42,51,6,19,51
2010-03,43,51,6,21,58
2010-04,44,51,6,22,59
2010-05,43,50,6,21,54
2010-06,42,51,5,19,47
2010-07,43,44,5,15,37
2010-08,43,44,5,15,37
2010-09,46,50,5,16,49
2010-10,50,50,6,18,58
2010-11,49,47,6,19,58
2010-12,50,45,5,17,46
2011-01,50,51,5,17,42
2011-02,54,49,6,17,50
2011-03,53,50,6,19,56
2011-04,53,48,6,20,55
2011-05,54,51,6,20,52
2011-06,53,50,5,17,44
2011-07,52,46,5,15,36
2011-08,54,43,5,14,36
2011-09,58,48,6,16,48
2011-10,61,49,6,17,54
2011-11,64,48,6,19,58
2011-12,59,43,5,16,44
2012-01,60,50,5,16,41
2012-02,62,50,6,17,50
2012-03,65,49,6,18,54
2012-04,67,45,6,19,53
2012-05,63,45,6,19,49
2012-06,64,46,5,16,41
2012-07,62,43,5,14,36
2012-08,62,43,5,13,34
2012-09,63,45,6,16,47
2012-10,69,46,6,16,55
2012-11,60,46,6,17,53
2012-12,60,37,5,15,41
2013-01,62,45,5,15,41
2013-02,64,44,6,16,48
2013-03,63,43,6,16,50
2013-04,63,46,6,18,54
2013-05,63,42,6,18,48
2013-06,60,42,5,15,40
2013-07,59,42,5,13,35
2013-08,58,39,5,11,34
2013-09,60,43,5,14,46
2013-10,64,44,6,15,56
2013-11,64,40,6,17,56
2013-12,60,36,5,14,44
2014-01,62,44,5,14,43
2014-02,64,43,6,15,50
2014-03,64,43,6,16,55
2014-04,66,43,7,17,55
2014-05,65,44,6,17,50
2014-06,63,43,5,15,38
2014-07,62,42,5,12,34
2014-08,61,40,5,11,33
2014-09,63,46,6,13,46
2014-10,64,45,6,15,55
2014-11,64,42,6,17,55
2014-12,62,37,5,14,43
2015-01,62,43,5,14,41
2015-02,64,45,6,14,49
2015-03,66,47,6,16,53
2015-04,66,45,7,17,54
2015-05,64,45,6,17,49
2015-06,62,44,5,15,39
2015-07,62,42,5,11,32
2015-08,60,40,5,11,32
2015-09,63,44,6,12,44
2015-10,64,44,6,14,52
2015-11,64,42,6,16,53
2015-12,60,37,5,14,42
2016-01,62,44,5,13,40
2016-02,64,46,6,13,47
2016-03,66,44,6,14,50
2016-04,65,44,6,16,52
2016-05,63,43,6,16,45
2016-06,62,46,5,14,37
2016-07,60,41,5,10,31
2016-08,61,41,5,11,32
2016-09,64,45,5,12,43
2016-10,65,43,6,13,49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment