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:
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:
<- read.csv(file = "data/isvann.csv", skip = 19, sep=",", dec=".") isvann
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 %>% select(c(time,hr_heartrate)) isvann_sorted
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
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
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")
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])
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)
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:
`r max(isvann_sorted$hr_heartrate)` og laveste puls
høyeste puls var `r min(isvann_sorted$hr_heartrate)`. var
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
.
<- isvann_sorted %>%
puls_lav filter(time>46 & time<79) %>%
summarise(min(hr_heartrate))
<- isvann_sorted %>%
puls_maks filter(time>46 & time<79) %>%
summarise(max(hr_heartrate))
<- isvann_sorted %>%
puls_gjennomsnitt 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:
`r puls_lav`,
Nå kan vi skrive inn den laveste pulsmålingen som er `r puls_maks` og den gjennomsnittelige som er
den høyeste 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:
<- isvann_sorted %>%
pulsverdier 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:
::kable(pulsverdier, caption = "Tabell for å vise resultatene", row.names = FALSE, align = "c") knitr
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:
`r pulsverdier[1,1]`, den høyeste er `r
Den laveste pulsmålingener pulsverdier[1,2]` og den gjennomsnittelige er `r pulsverdier[1,3]`
46 til 79 sekunder. i tidsrommet
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.
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.