R – Kuinka päästä alkuun?

R Ei kommentteja

R on ilmainen ohjelmointikieli, jonka vahvuutena ovat datan muokkaamiseen sekä analysointiin keskittyvät avoimesti saatavilla olevat paketit (package). R on suosittu ohjelmointikieli data-analytiikassa, ja se on erityisesti tunnettu huipputason graafisista kuvaajista, joita ohjelmistolla on helppo luoda. R:llä pystyy tekemään kaiken tarvittavan datan putsaamisesta ja perusanalyyseistä aina koneoppimiseen ja tekoälyyn saakka. R:llä on myös mahdollista tehdä jopa nettisivuja sekä applikaatioita.

Suurin haaste uuden ohjelmointikielen oppimisessa on usein alkuun pääseminen. Tämän vuoksi tälle sivulle on koottu ohjeita R-kielen opettelun alkumetreille. Ohjeet koskevat uuden projektin aloittamista sekä aineiston lataamista ohjelmistoon, eivätkä ne vaadi aiempaa kokemusta R:n tai muiden ohjelmointikielien käytöstä. Varsinaisen ohjelmointikielen sujuvaan opetteluun kannattaa käyttää sille erikseen luotuja tutoriaalisivuja, joita on kerätty tämän artikkelin loppuun. Kuten kaikkien muidenkin ohjelmointikielien, myös R:n opettelu vaatii alkuvaiheessa toistoja ja pitkää pinnaa error-viestien ilmestyessä toistuvasti ruudulle. Onneksi R-kielen tullessa käytön myötä tutummaksi error-viestit vähenevät ja käyttö sujuvoituu.

Lisäksi R:n vahvuus on laaja käyttäjäkunta ja sen myötä internetistä löytyvät ohjeet käytännössä kaikkeen: minkä tahansa ongelman koodatessa kohtaat, on joku aikaisemmin varmasti törmännyt vastaavaan ongelmaan, ja hakenut internetin keskustelupalstoilta asiaan ratkaisua muilta R-käyttäjiltä. Heti alkuvaiheessa onkin hyvä omaksua Google tärkeimmäksi työkaluksi R:n opettelussa. Huomaa, että googlaaminen kannattaa alusta saakka tehdä englanniksi, sillä ohjetarjonta on luonnollisesti huomattavasti laajempi, kuin suomeksi.

Muistisäännöt errorin selättämiseen:

  1. Lue error-viesti tarkasti läpi, yleensä se kertoo missä on vika.
  2. Varmista, että sulkeet, pilkut, pisteet sekä lainausmerkit ovat oikeassa kohdassa ja että sulkeille ja lainausmerkeille löytyy pari.
  3. Katso vielä kerran käyttämäsi funktion ohjeet kirjoittamalla Consoleen ? ja käyttämäsi funktion nimi (esim. ?mean()).
  4. Kopioi error -viesti sellaisenaan ja kirjoita se googlen hakukenttään. Yleensä joku muu on kohdannut saman ongelman ja ongelmaan löytyy ratkaisu internetin keskustelufoorumeilta.
  5. Jos tämäkään ei auta, kyseessä on useimmiten jokin vähemmän käytetty paketti ja vastausta ei välttämättä löydy. Silloin kannattaa tehdä errorista toistettavissa oleva esimerkki (reproducible example) vapaasti saatavilla olevalla aineistolla, ja lähettää se internetin keskustelupalstalle, kuten sivulle Stack Overflow.

RStudio ja R Markdown

Ensimmäisenä tulee ladata itse R-ohjelmisto, sekä RStudio, jonka kautta R-ohjelmistoa käytetään.

Kun nämä on asennettu, on aika avata Rstudio, jossa kaikki seuraavat toiminnot tehdään. Helpointa on luoda aina uusi R-projekti, johon voi kerätä kaikki projektiin liittyvät tiedostot. Projektin saa luotua ylävalikosta File->New project->New directory->New project->Create project

Tämän jälkeen kannattaa ehdottomasti luoda kyseiseen projektiin oma R Markdown -tiedosto, joka on yksi monikäyttöisimmistä tiedostomuodoista koodin säilyttämiseen, jakamiseen sekä sen esittämiseen. Markdownin saa luotua File -> New file -> R Markdown.

Ensimmäistä kertaa R Markdownia käyttäessa kannattaa valita tiedoston yläpalkissa olevasta asetusvalikosta Chunk Output in Console, jolloin ajettu koodi tulee jatkossa näyviin alempana olevaan Console-laatikkoon, eikä keskelle Markdown-tiedostoa.

Sitten on aika tutustua Rstudion käyttöliittymään, josta kuva alla

RStudion käyttöliittymä koostuu neljästä ruudusta, joista

  • Vasen yläneljännes on varattu R Markdown -tiedostolle, johon itse koodi kirjoitetaan, lisäksi tähän ruutuun saa näkyviin aineiston kokonaisuudessaan komennolla view().
  • Oikea yläneljännes on tämän projektin ympäristö (Environment) johon tulee näkyviin kaikki projektiin tallennetut aineistot, funktiot, vektorit ja muut käytetyt objektit.
  • Vasen alaneljännes (Console) näyttää ajetun koodin, siihen liittyvät virheet (Error) ja muut huomautukset.
  • Oikea alaneljännes sisältää projektikansion sisällön. Lisäksi sinne saa näkyviin kuvat joita luodaan, sekä funktioihin liityvät ohjeet, jotka voi tarkistaa kirjoittamalla kysymysmerkin (?) ennen funktiota (?mean).

Aineiston tuominen R-ympäristöön

Aineisto ladataan Rstudioon Environment -osiosta valitsemalla Import Dataset. RStudio tukee yleisimpien tilasto-ohjelmien käyttämiä tiedostomuotoja (Excel, SPSS, STATA, SAS) ja nämä vaihtoehdot tulevat alavalikkoon näkyviin. Esimerkiksi CSV-tiedostomuotoa avatessa kannattaa käyttää From Text (readr) vaihtoehtoa, koska sillä aineiston voi esikatsella ennen lataamista.

Import Options -laatikosta pystyy säätämään yksityiskohtia jos esim. data onkin eroteltu puolipisteellä normaalin pilkun sijaan (Delimiter -> Semicolon). Jos aineisto ei ala ensimmäiseltä riviltä, voi väliin jätettävien riven yli hypätä lisäämällä rivien määrän kohtaan Skip.

Import valinnan sijasta kannattaa kopioida Code Preview-laatikosta koodirivit, ja liittää ne juuri luotuun R Markdown -tiedostoon.

Import osion voi sulkea painamalla Cancel, ja sen jälkeen voidaan tyhjentää R Markdown -tiedostossa esimerkkinä oleva koodi. Poiston jälkeen luodaan uusi koodiosio (chunk), jonka saa kätevästi luotua haluamaansa kohtaan painamalla R Markdown -tiedoston yläpalkista Insert -> R (Pikanäppäin Mac: command+option+i; tai Windows: ctrl+alt+i).

Vaalea osioon voi kirjoittaa kommentteja ja muistiinpanoja.
Harmaaseen osioon (chunk) kirjoitetaan koodi.

Nyt painamalla chunkin ylänurkasta vihreää nuolta, RStudio ajaa chunkin sisältämän koodin, ja tallentaa .csv tiedostossa olevan datan R-ympäristöön, Näin ladattu data tulee näkyviin oikeaan yläneljännekseen. Klikkaamalla dataa tai kirjoittamalla view(mtcars) dataa voi esikatsella.

Aineisto on nyt ladattu RStudioon ja on valmiina muokkausta ja analyysejä varten!

Johdatus analyyseihin

Useasti kliinisestä tutkimuksesta kerätty data on puutteellista, muuttujat ovat väärässä muodossa tai osa havainnoista tulee poissulkea, ennen kuin analyysejä voidaan tehdä. Tämän vuoksi seuraava artikkeli käsittelee aineiston muokkaamista analyysivalmiiseen muotoon: R – Aineiston tarkastelu ja puhdistaminen.

Koska esimerkissämme käytimme valmista puhdistettua harjoitusdataa, käydään lopuksi vielä läpi pari esimerkkiä perusanalyyseistä ilman että aineistoa tarvitsee muokata. Koodissa käytetään Tidyverse-pakettia, joka käsitellään seuraavan artikkelin yhteydessä.

Ensin tutustutaan muuttujan “hp” (horse power) jakaumaan. Peruspaketilla se onnistuu nopeasti käyttämällä hist() funktiota.

hist(mtcars$hp)

Jos histogrammista haluaa tehdä julkaisukelpoisen, on suositellumpaa tehdä se esim. paketilla ggplot2.

mtcars %>% 
  ggplot(aes(x=hp)) + #valitaan muuttuja
  geom_histogram(fill="skyblue1", #valitaan palkkien väri
                 color="black",  #valitaan reunojen väri
                 binwidth =70) + #valitaan palkkien leveys
  theme_classic() #valitaan teema

Tunnuslukujen katsominen aineistosta kannattaa tehdä funktiolla summarise(), jonka käyttöön tutustutaan tarkemmin seuraavassa artikkelissa. Koska histogrammin perusteella muuttuja “hp” on vinosti jakautunut, katsotaan sen mediaani (median()) sekä kvartiiliväli (IQR()).

mtcars %>% 
  summarise(hp_median=median(hp), 
            hp_IQR=IQR(hp))

  hp_median hp_IQR
       123   83.5

Esimerkkinä vielä ggplot2:n käyttömahdollisuuksista katsotaan hevosvoimien (hp) mediaanit eri syliterikoon (cyl) autoissa.

mtcars %>% 
  ggplot(aes(x=cyl, y=hp)) + #valitaan muuttujat
  geom_boxplot(aes(group=cyl), #valitaan ryhmittelevä muuttuja
               fill="skyblue1") + #valitaan väri
  theme_classic() #valitaan teema

Kuvaa vastaavat numeeriset arvot saamme taas summarise() -funktiolla kun lisätään sylinterikoko ryhmitteleväksi muuttujaksi.

mtcars %>% 
  group_by(cyl) %>% 
  summarise(hp_median=median(hp),
            hp_IQR = IQR(hp))

    cyl hp_median hp_IQR
  <dbl>     <dbl>  <dbl>
     4       91    30.5
     6      110    13  
     8      192.   65

Tarkastellaan vielä kahden jatkuvan muuttujan (kulutus: mpg ja paino: wt) välistä yhteyttä ensin kuvalla:

mtcars %>% 
  ggplot(aes(x=wt, y=mpg)) + #valitaan muuttujat x- ja y-akseleille
  geom_point() + #valitaan pistekuvaaja
  geom_smooth(method="lm") + #lisätään viiva kuvaamaan lineaarista regressiota
  theme_classic() #lisätään teema

Korrelaatio

Kuvasta näemme, että kulutuksen ja painon välillä on selvä korrelaatio, sillä pisteet ovat jakautuneet parveksi, joka siirtyy johdonmukaisesti alemmas, mitä pidemmälle x-akselia edetään. Korrelaation vahvuuden voimme testata funktiolla cor.test() ja valitsemalla Pearsonin korrelaation.

cor.test(mtcars$mpg, mtcars$wt, method="pearson")

	Pearson's product-moment correlation

data:  mtcars$mpg and mtcars$wt
t = -9.559, df = 30, p-value = 1.294e-10
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.9338264 -0.7440872
sample estimates:
       cor 
-0.8676594 

Näin ollen korrelaatio on -0.8676594, 95% luottamusvälin ollessa [-0.744,-0.934] eli auton painon ja kulutuksen välillä on vahva negatiivinen korrelaatio, joka myös kuvasta on nähtävissä.

Lineaarinen regressio

Edellä esitetystä kuvasta näemme, että auton painon ja polttoainekulutuksen välillä vallitsee likimain lineaarinen yhteys. Kuvasta voimme tulkita, että mitä painavampi auto on kyseessä, sitä lyhyemmän matkan yhdellä gallonalla polttoainetta pääsee. Havaittua yhteyttä voimme arvoida tilastollisesti lineaarisella regressioanalyysilla. Tämän esimerkin regressiomallissa selitettävänä muuttujana on auton polttoainekulutus (mpg) ja selittävänä muuttujana vain yksi muuttuja, auton paino (wt). Lineaarisen mallin (eli kuvassa olevan suoran) regressiokertoimen (suoran kulmakertoimen) saamme funktiolla lm() (lm tulee sanoista linear model). Funktioon sisällytetään ensin selitettävä muuttuja (mpg), joka erotellaan merkillä ~ selittävästä (wt) muuttujasta, ja tämän jälkeen nimetään käytettävä aineisto (data=mtcars).

lm(mpg ~ wt, data=mtcars)

Call:
lm(formula = mpg ~ wt, data = mtcars)

Coefficients:
(Intercept)           wt  
     37.285       -5.344 

Tulosteesta voimme tulkita, että auton painon kasvaessa yhden wt muuttujan yksikön (1000 paunaa) verran, yhdellä gallonalla polttoainetta pääsee 5.344 mailia lyhyemmän (koska kerroin negatiivinen) matkan. “Intercept” eli vakiotermi tarkoittaa käytännössä selitettävän muuttujan arvoa pistessä, jossa selittävän muuttujan arvo on 0. Lineaarisen regressiomallin avulla voidaan ennustaa selitettävän muuttujan arvo, jos selittävän muuttujan arvo ja vakiotermi tunnetaan. Selitettävän muuttujan arvo voidaan laskea kertomalla selittävän muuttujan arvo regressiokertoimella ja lisäämällä tuloon vakiotermi.

Lineaarista regressiota tullaan käsittelemään syvällisemmin tulevissa artikkeleissa.

Seuraavissa artikkeleissa

Näissä esimerkeissä tunnuslukujen katsomiseen käytettyjä funktioita (group_by() ja summarise()) käydään seuraavassa artikkeleissa tarkemmin läpi. Laadukkaisen kuvien tekemistä ggplot2 on erittäin laajasti käytetty paketti, johon löytyy kattavasti ohjeita esimerkiksi seuraavista linkeistä.

Kursseja ja muita hyödyllisiä sivustoja R:n opetteluun (ei sidonnaisuuksia):

  • Codecademy – Ilmaisia aloittelijatason kursseja
  • Coursera – Ilmaisia yliopistojen tarjoamia kursseja
  • DataCamp – Peruskurssit ilmaisia, laajasti maksullista materiaalia
  • R Markdown – Ohjeita R Markdownin käyttöön
  • ggplot2 – ggplot2:n kotisivu ja cheatsheet
  • STHDA – ggplot2 ohjeita
Kirjoittanut Ville Ponkilainen, vertaisarvioinut Aleksi Reito ja Mikko Uimonen.

Mitä mieltä olit artikkelin sisällöstä?

Klikkaa tähteä arvostellaksi artikkelin!

Keskiarvo 5 / 5. Arvostelujen lukumäärä: 13

Kukaan ei ole vielä äänestänyt, ole ensimmäinen

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *