Hei,
Velkommen til den tredje numeriske øvelsen i BIO104 - Komparativ fysiologi. Som en del av kurset skal du lære å bruke R/RStudio for å
Ø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.
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.
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.
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.
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:
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" :)
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:
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=".")
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().
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))
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 coordinateneFigure 3: Et standard linjediagram fra ggplot.
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ørrelseFigure 4: Et linjediagram lagt på ekstra elementer.
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")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])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)Figure 7: Et linjediagram lagt på ekstra elementer.
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.
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)`.
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")| 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)`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.
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.
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.
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.
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.
Figure 9: Lagre som PDF.