Hei,

Velkommen til den tredje numeriske øvelsen i BIO104 - Komparativ fysiologi. Som en del av kurset skal du lære å bruke R/RStudio for å

  • lage linjediagram
  • hente ut og beregne verdier fra datasettet
  • sette alt sammen til en fullstending rapport

Øvelsen skal utføres i R/RStudio. Vi på bioST@TS har utviklet denne siden for å hjelpe deg med å komme i gang med R/RStudio og å løse de numeriske oppgavene i denne øvelsen.


Du kan også gå tilbake til første lab-øvelse i mikrobiologi hvis du har behov for å friske opp i R.

1 Mal til rapporten

Gå til fanen Files og klikk på filen Bio104_Template_rapport.Rmd. Filen åpnes øverst til venstre og viser malen til rapporten.

Denne filen er skrevet i Rmarkdown-format som gjør redigeringsprosessen pålitelig. Ved bruk av den forhåndsinstallerte R-pakken knitr og knappen Knit, produserer RStudio et ferdigformatert dokument med figurer, titler og tekst.

2 Introduksjon

I denne seksjonen skal du skrive en introduksjon til forsøket. Les og følg instruksjonene i malen. Hvis du trenger litt hjelp med å skrive den delen, kan du gå til denne bioSKRIV-siden.

3 Metode

I denne seksjonen skal du beskrive hvordan eksperimentet ble utført og hvordan målingene ble registrert. Les og følg instruksjonene i malen.

Hvis du trenger litt hjelp med å skrive den delen, kan du gå til denne bioSKRIV-siden.

4 Resultater

I denne seksjonen skal du presentere resultatene. Les og følg instruksjonene i malen.

Hvis du trenger litt hjelp med å skrive den delen, kan du gå til denne bioSKRIV-siden.

I de neste seksjonene forklarer vi:

  • hvordan man leser inn og rydder opp i et datasett
  • hvordan man lager et linjediagram sammen med markeringer
  • hvordan man kalkulerer verdier og henter disse i teksten.


Har du problemer med R så er det mange steder hvor du kan få hjelp.

"Help will always be given at UiB for those who ask for it" :)


4.1 Lese inn datasettet

Filen man laster ned fra pulsmåleren er en csv fil (Comma Separated Values) og dette er et format som R enkelt kan forstå og vil se slik ut om den åpnes i excel:
_Skjermbilde av hvordan datasettet ser ut._

Figure 1: Skjermbilde av hvordan datasettet ser ut.


Inni denne csv filen, kan man se at tabellen vi ønsker å bruke starter på linje/rad nr 20 (Figur 1).


Vi kan enkelt hoppe over de linjene vi ikke ønsker å ha med ved å bruke skip når vi leser inn datasettet. Vi må også spesifisere hvilket symbol som sepererer kolonnene i datasettet (sep) og hvilket symbol som brukes for desimaler (dec). I datasettet over kan vi se at seperatoren (sep) er komma (,) og desimalene (dec) defineres med punktom (.).


Vi kan nå bruke koden read.csv for å lese inn datasettet:

isvann <- read.csv(file = "data/isvann.csv", skip = 19, sep=",", dec=".")


Slik ser datasettet ut når vi har lest det inn i R:
_Skjermbilde av hvordan datasettet ser ut etter det er lest inn i R._

Figure 2: Skjermbilde av hvordan datasettet ser ut etter det er lest inn i R.


Som du kan se så inneholder datasettet mange kolonner som vi ikke trenger, men vi kan enkelt hente ut de kolonnene en ønsker med å bruke funksjonen select().

4.2 Rydde opp i datasettet

Vi ønsker å ta vare på kolonnen med tid (time) og kolonnen med pulsmålingene (hr_heartrate). Vi henter opp datasettet vi kalte isvann og deretter (%>%) velger vi (select) å beholde kolonnene time og hr_heartrate:

isvann_sorted <- isvann %>% select(c(time,hr_heartrate))


4.3 Lage linjediagram

Nå er alt klar til å lage et plot. Vi lager først et helt enkelt plot med å bruke ggplot og tegner linjen med å bruke geom_line

isvann_sorted %>% 
  ggplot(aes(x = time, y = hr_heartrate)) + #Definerer x- og y- akser
    geom_line() #Tegner linje med disse coordinatene
_Et standard linjediagram fra ggplot._

Figure 3: Et standard linjediagram fra ggplot.


4.3.1 Endre plottet visuelt

Nå bygger vi på med å endre linjefargen (color=darkblue), sette egendefinerte navn på x- og y-aksen (labs()), bestemmer tema/utseende til grafen (theme_) og skriftstørrelse (base_size):

isvann_sorted %>% 
  ggplot(aes(x = time, y = hr_heartrate)) +
    geom_line(color="darkblue") + # Endre linjefargen til å være blå
    labs(x="Time (sec)", y="Beats per minute") + #Setter navn på x og y akse
    theme_classic(base_size = 15) #Bestemmer tema og skriftstørrelse
_Et linjediagram lagt på ekstra elementer._

Figure 4: Et linjediagram lagt på ekstra elementer.


4.3.2 Sette inn markeringer i plot

I denne øvelsen kan det være nyttig å markere ulike tidspunkter i plottet hvor det skjer noe i eksperimentet. For eksempel så kan vi nedenfor markere når man dykker ansiktet ned i isvann og når man tar ansiktet opp igjen. Da kan vi lage en horisontal linje ved disse tidspunktene og bruke ulike farger for å henvise start (46 sekunder og rød) og slutt (79 sekunder og mørk cyan):

starter ved 46 sekunder og ender ved 79 sekunder

isvann_sorted %>% 
  ggplot(aes(x = time, y = hr_heartrate)) +
    geom_line(color="darkblue") +
    labs(x="Time (sec)", y="Beats per minute") +
    theme_classic(base_size = 15) + 
    geom_vline(xintercept = 46, color= "red") +
    geom_vline(xintercept = 79, color= "darkcyan")
_Et linjediagram lagt på ekstra elementer._

Figure 5: Et linjediagram lagt på ekstra elementer.


Det er også mulig å sette inn punkt(er) på selve linjediagrammet med å sette inn individuelle punkter med å bruke geom_point(). Her må vi definere både hvor på x-aksen og på y-aksen vi ønsker å sette inn et punkt. x-aksen er bare å sette inn tiden, men for y-aksen så vil vi sette inn y-verdien som er for denne tiden.

Vi finner y-verdien med å hente opp datasettet isvann_sorted og inn i kolonnen med pulsmålinger (hr_heartrate) og velger den radnummer som i vårt tilfelle er det samme som tiden. Altså hvis tiden er 46 sekund, så er x=46 og y=isvann_sorted$hr_heartrate[46], hvor datasettet og kolonnenavnet defineres og separeres med et dollartegn ($).

isvann_sorted %>% 
  ggplot(aes(x = time, y = hr_heartrate)) +
    geom_line(color="darkblue") +
    labs(x="Time (sec)", y="Beats per minute") +
    theme_classic(base_size = 15) + 
    geom_point(x=46, y=isvann_sorted$hr_heartrate[46]) +
    geom_point(x=79, y=isvann_sorted$hr_heartrate[79])
_Et linjediagram lagt på ekstra elementer._

Figure 6: Et linjediagram lagt på ekstra elementer.


Vi kan også velge egne farger, størrelse og form på hvert punk ved å legge til color, size og shape. Du finner en oversikt over formene (shape) en kan bruke her.

isvann_sorted %>% 
  ggplot(aes(x = time, y = hr_heartrate)) +
    geom_line(color="darkblue") +
    labs(x="Time (sec)", y="Beats per minute") +
    theme_classic(base_size = 15) + 
    geom_point(x=46, y=isvann_sorted$hr_heartrate[46], 
               color = "red", size = 3, shape = 4) +
    geom_point(x=79, y=isvann_sorted$hr_heartrate[79], 
               color = "darkcyan", size = 3, shape = 19)
_Et linjediagram lagt på ekstra elementer._

Figure 7: Et linjediagram lagt på ekstra elementer.


4.4 Hente ut data

En del av spørsmålene til disse øvelsene går ut på å hente ut enkelte verdier fra datasettet. R har mange funksjoner som gjør det enkelt å finne disse verdiene, som for eksempel min() som finner laveste verdien, max() som finner høyeste verdien og mean() som finner gjennomsnittsverdien.


4.4.1 In-text kalkuleringer

Disse kan vi enkelt beregne ut i code-chunk, men vi vil jo gjerne vise disse tallene som en del av teksten. Dette kan vi gjøre ved å lage en “liten” code-chunk inni teksten hvor vi gjør små beregninger eller henter opp en variabel. Da setter vi inn et klamme-tegn etterfulgt av bokstaven r og så med et mellomrom følger koden og avsluttes med ny klamme. Koden vist nedenfor kan vi derfor ha direkte i teksten og vil vise tallet når vi knitter!

`r max(isvann_sorted$hr_heartrate)`


Vi kan for eksempel skrive at høyeste puls var 78 og laveste puls var 48, som vil se slik ut i skriptet før knitting:

høyeste puls var `r max(isvann_sorted$hr_heartrate)` og laveste puls 
var `r min(isvann_sorted$hr_heartrate)`.


4.4.2 In-text variabler

Når man har lengre koder, så kan det være litt rotete og ta med disse som en del av teksten og da kan det være lettere å gjøre beregningen i en vanlig code-chunk og deretter hente opp variabelen.

Nedenfor bruker vi funksjonen filter() for å bare beholde den pulsmålingene fra tiden ansiktet var under vann (fra 46 til 79 sekunder). Det vil si at vi ønsker å ha med pulsmålingene som kommer etter 46 sekund (time>46) frem til det har gått 79 sekund (time<79). Vi kan deretter bruke funksjonen summarise for å finne min(), max() og mean() og lagre disse i variablene puls_lav, puls_maks og puls_gjennomsnitt.

puls_lav <- isvann_sorted %>% 
  filter(time>46 & time<79) %>% 
  summarise(min(hr_heartrate))

puls_maks <- isvann_sorted %>% 
  filter(time>46 & time<79) %>% 
  summarise(max(hr_heartrate))

puls_gjennomsnitt <- isvann_sorted %>% 
  filter(time>46 & time<79) %>% 
  summarise(round( mean(hr_heartrate), digits=0 ))

Merk at vi under gjennomsnittet også inkluderte en funksjon som heter round(). Denne funksjonen runder opp/ned tallet og kan fjerne desimaler. Ettersom vi ikke ønsker desimaler for pulsmålinger kan vi sette digits=0.


Nå kan vi skrive inn den laveste pulsmålingen som er 48, den høyeste som er 69 og den gjennomsnittelige som er 61 i tidsrommet 46 til 79 sekunder.

Dette vil se slikt ut i skriptet:

Nå kan vi skrive inn den laveste pulsmålingen som er `r puls_lav`, 
den høyeste som er `r puls_maks` og den gjennomsnittelige som er 
`r puls_gjennomsnitt` i tidsrommet 46 til 79 sekunder.

Merk at når man henter opp en variabel i teksten, så må denne komme etter code-chunken.


Alternativt, så kan vi komprimere koden ovenfor og samle verdiene i en tabell og deretter hente ut hver verdi:

pulsverdier <- isvann_sorted %>% 
  filter(time>(60*2)) %>%  #Verdier etter 2 minutt (60 sec * 2)
  summarise("Lowest HR" = min(hr_heartrate), 
            "Highest HR" = max(hr_heartrate), 
            "Average HR" = round(mean(hr_heartrate),0) )


Hvis vi ønsker kan vi printe ut denne tabellen:

knitr::kable(pulsverdier, caption = "Tabell for å vise resultatene", row.names = FALSE, align = "c")
Table 1: Tabell for å vise resultatene
Lowest HR Highest HR Average HR
60 78 66


For å hente opp disse pulsverdiene inni teksten, må vi bruke posisjonene i tabellen. Dette gjør man med å bruke klammer som inneholder rad og kolonne nummer, f. eks pulsverdier[1,2] hvor vi henter ut pulsverdien fra første rad og i kolonne nummer to.

Vi kan dermed skrive det samme som vi gjorde ovenfor, men henter dataene fra tabellen istedenfor:

“Den laveste pulsmålingen er 60, den høyeste er 78 og den gjennomsnittelige er 66 i tidsrommet 46 til 79 sekunder.”

Dette vil se slikt ut:

Den laveste pulsmålingener `r pulsverdier[1,1]`, den høyeste er `r
pulsverdier[1,2]` og den gjennomsnittelige er `r pulsverdier[1,3]` 
i tidsrommet 46 til 79 sekunder.


Hvis du skulle ha problemer å printe en variabel så kan du prøve å sette den inn i funksjonen toString() som omgjør alle verdier til tekstformat:

`r toString(variabel)`

5 Diskusjon

I denne seksjonen skal du tolke resultatene. Er det noe overraskende, uforventet eller rart med dataene? Har du en forklaring for det? Her kan du gi din mening. Husk å linke informasjonen fra introduksjonen til diskusjonen og bruk argumenter sammen med relevant forskningslitteratur.

Hvis du trenger litt hjelp med å skrive den delen, kan du gå til denne bioSKRIV-siden.

6 Referanser

I denne delen skal du oppgi referanser og kilder som du har brukt i teksten til rapporten. Det er mulig å bruke en funksjon i R som heter citr som vil hjelpe deg å enkelt sette inn referanser og som vil automatisk generere en referanseliste når man knitter dokumentet.

Du finner en detaljert beskrivelse av hvordan man bruker denne funksjonen i mikrobiologi-delen ved å klikke her.


Hvis du trenger litt hjelp med å skrive den delen, kan du gå til denne bioSKRIV-siden.

7 Tilleggsmateriale

Hvis man har resultater som man ikke viser i resultat-delen, så kan man gjerne supplementere disse i denne seksjonen (Appendix/Supplementary). Dette kan være f. eks. en tabell eller figur.

8 Skriv ut rapporten

Når rapporten din er ferdig, så er det bare å trykke på knappen Knit (Figur 8). Hvis alt er korrekt, så åpnes rapporten i et nytt vindu. Les gjennom dokumentet. Finner du noe feil, så kan du gå tilbake til malen og rette det.

_Trykke på knit._

Figure 8: Trykke på knit.


Hvis det ligger noen feil i koden din, skal fanen R Markdown (ved siden av Console) vise feilmelding istedenfor å skrive ut rapporten. Les feilmeldingen, rett feilen(e), og trykk på Knit igjen.


Liker du rapporten din akkurat som den er, så trykker du på Open in Browser øverst i vinduet. Rapporten åpnes da i nettleseren din. Trykk på CTRL + P (⌘ + P) for å skrive ut rapporten. Du kan f. eks. skrive den ut i pdf-format. Den er klar til innlevering.

_Lagre som PDF._

Figure 9: Lagre som PDF.