Sjekkliste for arbeidskrav og eksamen

Følgende punkter er basert på leverte arbeidskrav i emnet. Disse kan brukes for å forbedre dine arbeidskrav.

Å skrive rapporter

  • Unngå å forfatte rapporter i punkter/lister. Denne formen av tekst kan hjelpe leseren men kan også bryte opp og skape unødvendig forvirring. En punktliste kan også få spørsmålet «hvorfor» å forsvinne. Leseren kan være interessert i å vite hvorfor man velger en tilnærming eller metode.
  • Skriv for en lesere som er kjent med området men savner informasjon om hvorfor man skal lese rapporten. Du må fylle i «blanks» hos leseren!
  • Rapporter kan med fordel struktureres som introduksjon, metode, resultat og diskusjon. Man kan velge å ikke ha med disse overskriftene men til tross organisere paragrafene på denne måten. Introduksjonen forteller leseren hva teksten skal belyse, metoden gir et innblikk i hva og hvordan du gjennomført arbeidet, resultatene beskriver og diskusjon tolker.
  • Vær sikker på at begreper og metoder er definerte! «Typical error», «Coefficient of variation», «laktatterskel» osv. kan være mange ulike ting. Man kan bruke en referanse eller en formel for å definere beregninger og konsepter osv.
  • Husk å definer feilstapler (error bars), farger, punkter enheter osv. I tabeller, figurer og tekst.
  • Enheter som V̇O2max kan defineres mer eller mindre presist, her står V for volum og punktet over V indikerer et volum per tidsenhet. Denne skreves som V&#775;O<sub>2max</sub> hvor &#775; er HTML-kode for å gi en punkt over bokstaven som skreves før tegnet. Når vi angir enheten kan vi bruke ml×kg-1×min-1 eller ml kg-1 min-1, denne notasjonen er mer vanlig i vitenskapelig kommunikasjon.

Å bruke R

  • R bruker punktum som kommaseparerare. For en helhetlig rapport kan det være lurt å velge en måte å rapportere resultater på.

  • Hensikten/styrken med reproduserbar rapportering er at tall, tabeller, figurer osv. er direkte koblet til dataene. Prøv å unngå å skrive inn tall direkte. Bruk isteden variabler (eks. var1) som du skaper i code chunks och settes inn i teksten. R vill i dette fallet lete etter en variable i environment som heter var1. Se her https://rmarkdown.rstudio.com/lesson-4.html for mer info.

  • Å definere innstillinger for code chunks vil gjøre rapportene lettere å lese. F.eks. ved å inkludere koden som beskrives under vil ta vekk meddelende, «warnings» og koden fra din rapport. Hus at innstillinger må settes først i code chunken.

#| echo: false
#| message: false
#| warning: false

  • Unngå å bruke print() i en rapport da dette vil resultere i uformatert tekst. Bruk istedenfor tabellverktøy (som gt eller knitr::kable()) for tabeller.
  • Se her Quarto - Citations & Footnotes for hvordan du kan sette en egen overskrift for referanser og inkludere referanser hvor du ønsker.

For å bytte ut engelsk Table/Figure mot norsk Tabell/Figur, sett inn

crossref:
  fig-title: "Figur"
  tbl-title: "Tabell"

i YAML feltet.

Spesifikt innhold

Arbeidskrav 1

  • Se til å organiser github-mapper på en overskuelig måte. En metode for å underlette for leseren er å bruke en README.md. Denne vil bli konvertert til HTML på github og kan dermed gi et overblikk over mappen (repository). Hvis du trenger å spare gamle filer så kan disse flyttes til en mappe («archive» eller lignende).
  • Det er viktig å vise at du bruker kilder som er angitt i oppgaven. Bruk disse for å vise til definisjoner og gi bakgrunn til hvorfor du ønsker å vise dine resultater til leseren. Bruk funksjonen for bibliography i quarto.
  • Hva betyr CV, typical error osv. som du beregnet? Her holder det ikke bare med definisjoner, prøv deg også på en tolkning. En måte kan være å bruke annen litteratur som beregnet CV, eller sammenligne med et annet test som du gjort.
  • Noen detaljer i en metode kan med fordel holdes kort og kanskje til og med utelates da det tilhører eks. «good laboratory practice». Her kan man spørre seg hvilken informasjon som kreves for å repetere forsøkene gitt at man praktiserer gode rutiner i laboratoriet?

Arbeidskrav 2

  • Rapportene savner noen steder en introduksjon, hva er det rapporten skal beskrive? Bruk rapportens deler til å skrive noe om de grafer og analysene som dere presenter. Hvordan kan man tolke laktatterskel? hvorfor predikerer man størrelse på DNA fragmenter? Hva betyr t-verdien, p-verdien?
  • Standard error er spredning i en estimert fordeling av «teoretiske» utvalg. Den forteller ikke hvor bra modellen er, men snarere med hvilken usikkerhet vi bør tolke estimatet. Hvordan skiller denne tolkningen fra deres tolkning?
  • T-verdien i en regresjonstabell er en ratio mellom estimat og SE, denne brukes for å beregne p-verdien. P-verdien i sin tur forteller oss om hvor usannsynlig vår data, eller enda mer ekstrem data er hvis nullhypotesen er sann. Hvordan kan dere justere beskrivelsen av regresjonsoutput basert på denne beskrivelsen?
  • Rapportene er generellt komplekse med tabller, figurer og tall i tekst. Bruk fig-cap, tbl-cap osv for å numrere figurer og tabeller.

Arbeidskrav 3

Spørsmål 1-3:

  • Definisjon av standardfeilen er ikke at vi kan forvente en endring fra gjennomsnittet i en størrelse som tilsvarer SE, isteden beskriver SE variasjon i repeterte gjennomsnitt konstruerte fra utvalg fra populasjonen.
  • Forskjell i SE mellom modellene henger sammen med utvalgsstørrelsen. P-verdien forteller ikke sannsynligheten for at null-hypotesen er sann. Hvordan henger utvalgsstørrelse sammen p-verdien?
  • Den skyggete delen av t-fordeling er resultater like eller mer ekstreme enn et observert resultat. T-fordelingen representerer vårt beste estimat av mulige resultater under null-hypotesen.
  • I modellene får vi en t-verdi, dette er avstanden fra nullhypotesen målt i antall standardfeil.

Spørsmål 4:

  • Her er del lurt å igjen definere SE! Den gjennomsnittlige standardfeilen er et estimat på spredningen i utvalgsfordelingen! Utvalgsfordelingen er alle beregnede gjennomsnittene!

Spørsmål 5-7:

  • Hvordan kan vi bruke dette for å definere statistisk styrke? Statistisk styrke kan defineres ved hjelp av tankeeksperimentet at man gjennomfører 1000 studier på samme populasjon. Hvor mange vill finne en definert effekt når man setter grensen for p-verdien og utvalgsstørrelsen til et spesifikt nivå?

Spørsmål 8:

  • Når vi ikke har noen effekt så vil vi finne en effekt i et antall studier basert på den grense vi setter på \(\alpha\). Dette betyr at \(\alpha\) definerer våre antall falske positive fynd og at fordeling av p-verdier ved ingen effekt er uniform, hva betyr dette?

Arbeidskrav 4:

  • Husk primær målsetting med denne oppgaven: «fokus på design av studiene og valg av statistiske metoder/test for å besvare studienes problemstilling». For å løfte flere av deres tekster kan man tenke at man fokuserer på å sammenligne studiene på disse punktene.

  • Jeg savner noe informasjon i mange arbeidskrav om studiedesigner i stort, hvordan forholder seg de studier dere har analysert til andre studiedesigner. Her kan tenkes at man gir en generell innføring i studiedesigner i en paragraf for å vise for leseren hvordan man kan forstå de studiene som du har analysert. Det er da også mulig å bruke forslag på pensum!:)

  • Bruk gjerne også noe plass på å beskrive de statistiske metodene som blir brukt, dette kan med fordel gjøres med henvisning til pensum (eller annen passende litteratur). Har du kjennskap til testene som blir brukt på den nivå at du vet hvilke kommandoen som skal brukes i R for å gjenskape analysene?

  • Til tross for at jeg foreslå at man kan bruke QALMRI så sa jeg også at rapporten ikke skulle inneholde QALMRI-tabellen. (Jeg vil ikke underkjenne oppgaver som har QALMRI som bærende struktur).

  • Tenk på om din tekst kan bli mer strukturert ved å bruke tydeligere temaer per paragraf. Når en paragraf er veldig lang, og inneholder flere ulike temaer blir det vanskelig for leseren å følge. En lettlest paragraf har kanskje 100-200 ord!

  • I oppgaven er det lov på kommer med noen meninger om studiedesignene, eller analysene er «gode», hva bør gjøres annerledes for å lage bedre vitenskap. Et eksempel som flere er inne på er statistiske tester innad eksperimentelle grupper, hva sier disse oss?

  • En tabell eller figur er et veldig godt innslag i en rapport. Men den må følges opp i løpende tekst.

Arbeidskrav 5

  • Bruk tabeller for det mest sentrale. En kortere liste på eksempelvis øvelser, eksklusjonskriterier osv. kan skrives i løpende tekst. Når man har en mer kompleks fremstilling kan tabellen hjelpe.

  • Husk at %-vis endring passer mindre bra for statistiske analyser. Det finnes noen unnatak, når vi log-transformerer så blir tilbake-transformerte data % endring (pga loven om logaritmer, log(a) – log(b) = log(a/b)). Istedenfor % endring i statistiske analyser kan man bruke absolutte tall og eventuelt konvertere til % endring for fremvisning av resultater.

  • Ved å bruke ordet signifikant så gjør man av tradisjon et utsagn om et statistikk test, vær nøyaktig med hvilken sammenligning som er «signifikant».

  • I metodeavsnitt så bør rapporten bare beskrive de deler som rapporten omhandler. Dersom man f.eks. ikke presenterer muskelbiopsidata bør disse ikke presenteres. Tanken her er å lage en rapport som etterligner men ikke er en kopi av originalrapporten!

  • Studiedesignen kan stille till problemer da vi måler styrke og muskelvekst innad deltakere. Vi kan bruke mixed-effects models, men også forenkle. Under følger eksempler på modeller for muskelmassedataene (den samme tilnærmingen kan brukes for styrke).

library(tidyverse); library(exscidata); library(lme4)

# Load data
dat <- dxadata %>%
  select(participant:include, lean.left_leg, lean.right_leg) %>%
        
        # Extract leg specific data
  pivot_longer(names_to = "leg", 
               values_to = "lean.mass", 
               cols = lean.left_leg:lean.right_leg) %>%
  mutate(leg = if_else(leg == "lean.left_leg", "L", "R"), 
         sets = if_else(multiple == leg, "multiple", "single")) %>%
  select(participant, time, sex, include, sets, leg, lean.mass) %>%
        # Filter only included participants
        filter(include == "incl") %>%
        # Make data set wider by time 
        
        pivot_wider(names_from = "time", 
                    values_from = "lean.mass") %>%
        # Calculate change score
        
        mutate(change = post - pre) %>%
        
        # Keep change score and make it wider by sets
        select(participant:sets, change) %>%
        pivot_wider(names_from = sets, values_from = change) %>%
        
  print()
# A tibble: 34 × 5
   participant sex    include multiple single
   <chr>       <chr>  <chr>      <dbl>  <dbl>
 1 FP28        female incl         214    123
 2 FP40        female incl         -69      2
 3 FP21        male   incl         619    189
 4 FP34        female incl         396    312
 5 FP23        male   incl        -205    445
 6 FP36        female incl         587    386
 7 FP38        female incl         -85    225
 8 FP25        male   incl         373    -47
 9 FP19        male   incl         302    127
10 FP13        male   incl         734    915
# ℹ 24 more rows
### Use simple t-test on change score

t.test(dat$multiple, dat$single, paired = TRUE)

    Paired t-test

data:  dat$multiple and dat$single
t = 2.1875, df = 33, p-value = 0.0359
alternative hypothesis: true mean difference is not equal to 0
95 percent confidence interval:
   8.586109 237.002126
sample estimates:
mean difference 
       122.7941 
  • Denne enkle måten å analysere dataene på er helt OK. Et annet alternativ er en “mixed-effects” modell.
# Load data
dat <- dxadata %>%
  select(participant:include, lean.left_leg, lean.right_leg) %>%
        
        # Extract leg specific data
  pivot_longer(names_to = "leg", 
               values_to = "lean.mass", 
               cols = lean.left_leg:lean.right_leg) %>%
  mutate(leg = if_else(leg == "lean.left_leg", "L", "R"), 
         sets = if_else(multiple == leg, "multiple", "single")) %>%
  select(participant, time, sex, include, sets, leg, lean.mass) %>%
        # Filter only included participants
        filter(include == "incl") %>%
        # Fix time factor 
        mutate(time = factor(time, levels = c("pre", "post"))) %>%
        
  print()
# A tibble: 136 × 7
   participant time  sex    include sets     leg   lean.mass
   <chr>       <fct> <chr>  <chr>   <chr>    <chr>     <dbl>
 1 FP28        pre   female incl    multiple L          7059
 2 FP28        pre   female incl    single   R          7104
 3 FP40        pre   female incl    single   L          7190
 4 FP40        pre   female incl    multiple R          7506
 5 FP21        pre   male   incl    single   L         10281
 6 FP21        pre   male   incl    multiple R         10200
 7 FP34        pre   female incl    single   L          6014
 8 FP34        pre   female incl    multiple R          6009
 9 FP23        pre   male   incl    single   L          8242
10 FP23        pre   male   incl    multiple R          8685
# ℹ 126 more rows
### Use a mixed model to determine effects of time and condition

m <- lmer(lean.mass ~ time + time:sets + (1|participant), 
          data = dat)


summary(m)
Linear mixed model fit by REML ['lmerMod']
Formula: lean.mass ~ time + time:sets + (1 | participant)
   Data: dat

REML criterion at convergence: 2022.2

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-2.72697 -0.60997 -0.03598  0.46355  2.78820 

Random effects:
 Groups      Name        Variance Std.Dev.
 participant (Intercept) 4181094  2044.8  
 Residual                  57202   239.2  
Number of obs: 136, groups:  participant, 34

Fixed effects:
                    Estimate Std. Error t value
(Intercept)          8603.53     353.07  24.368
timepost              289.06      58.01   4.983
timepre:setssingle    -14.53      58.01  -0.250
timepost:setssingle  -137.32      58.01  -2.367

Correlation of Fixed Effects:
            (Intr) timpst tmpr:s
timepost    -0.082              
tmpr:stssng -0.082  0.500       
tmpst:stssn  0.000 -0.500  0.000
confint(m)
                        2.5 %     97.5 %
.sig01              1614.7219 2609.47559
.sigma               206.6486  272.06561
(Intercept)         7902.4449 9304.61392
timepost             175.9888  402.12889
timepre:setssingle  -127.5995   98.54066
timepost:setssingle -250.3936  -24.25346
  • I modellen over gis ingen korreksjon for “baseline” i sammenligningen post. Dette er en legitim måte å analysere dataene på når vi kan anta at forskjeller ved baseline bare er målefeil.

  • Til sist kan vi prøve en ANCOVA, denne må og ta hensyn til at dataene kommer fra samme individ to ganger

# Load data
dat <- dxadata %>%
  select(participant:include, lean.left_leg, lean.right_leg) %>%
        
        # Extract leg specific data
  pivot_longer(names_to = "leg", 
               values_to = "lean.mass", 
               cols = lean.left_leg:lean.right_leg) %>%
  mutate(leg = if_else(leg == "lean.left_leg", "L", "R"), 
         sets = if_else(multiple == leg, "multiple", "single")) %>%
  select(participant, time, sex, include, sets, leg, lean.mass) %>%
        # Filter only included participants
        filter(include == "incl") %>%
        # Fix time factor 
        mutate(time = factor(time, levels = c("pre", "post"))) %>%
        # Pivot wider by time
        pivot_wider(names_from = time, 
                    values_from = lean.mass) %>%
        
  print()
# A tibble: 68 × 7
   participant sex    include sets     leg     pre  post
   <chr>       <chr>  <chr>   <chr>    <chr> <dbl> <dbl>
 1 FP28        female incl    multiple L      7059  7273
 2 FP28        female incl    single   R      7104  7227
 3 FP40        female incl    single   L      7190  7192
 4 FP40        female incl    multiple R      7506  7437
 5 FP21        male   incl    single   L     10281 10470
 6 FP21        male   incl    multiple R     10200 10819
 7 FP34        female incl    single   L      6014  6326
 8 FP34        female incl    multiple R      6009  6405
 9 FP23        male   incl    single   L      8242  8687
10 FP23        male   incl    multiple R      8685  8480
# ℹ 58 more rows
### Use a mixed model to determine effects of time and condition

m <- lmer(post ~ pre + sets + (1|participant), 
          data = dat)


summary(m)
Linear mixed model fit by REML ['lmerMod']
Formula: post ~ pre + sets + (1 | participant)
   Data: dat

REML criterion at convergence: 966.1

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.2720 -0.5705  0.0531  0.4515  1.5658 

Random effects:
 Groups      Name        Variance Std.Dev.
 participant (Intercept) 90183    300.3   
 Residual                53840    232.0   
Number of obs: 68, groups:  participant, 34

Fixed effects:
              Estimate Std. Error t value
(Intercept)  230.12571  260.08567   0.885
pre            1.00685    0.02927  34.401
setssingle  -122.69459   56.27822  -2.180

Correlation of Fixed Effects:
           (Intr) pre   
pre        -0.968       
setssingle -0.116  0.008
fit warnings:
Some predictor variables are on very different scales: consider rescaling
confint(m)
                   2.5 %     97.5 %
.sig01       203.3519123 399.741610
.sigma       183.2295834 296.089498
(Intercept) -274.8628148 749.191873
pre            0.9483379   1.063678
setssingle  -234.5001167 -10.850906
  • lme4 gir oss ikke p-verdier. Men vi kan bruke confint() for å beregne konfidensintervaller. Disse kan brukes får inferens.

  • Man kan være intressert i å få ut estimate fra modellene, her kan pakken emmeans hjelpe. La si at du ønsker å estimere post-skår fra modellen m.

library(emmeans)

# store estimated marginal means in new object
em <- emmeans(m, specs = ~ sets)

# For plotting you can make the estimates to a data frame
data.frame(em)
      sets   emmean       SE       df lower.CL upper.CL
1 multiple 8885.274 65.08461 46.04908 8754.269 9016.279
2   single 8762.579 65.08461 46.04908 8631.574 8893.584

Reproduserbare rapporter på Github

  • Med en reproduserbar rapport mener jeg at tekst, kode og data blir brukt til å skape et «output» som en pdf-, html- eller word-fil. Fordelen med github (og lignende løsninger) er at man har mulighet å samle alle delene i et versjonskontrollsystem. Dette har fordeler for deg som forfatter og for vitenskapelig arbeid i stort (transparens, muligheter å reprodusere osv.). Hensikten med å bruke Github i emnet er å øve på denne måten å lage rapporter.

Med det sagt vil jeg ikke underkjenne rapporter som ikke er reproduserbar i denne betydningen. - Vær konsekvent med filstruktur, filnavn osv på github. Filer som ikke blir brukt bør f.eks. flyttes til en annen mappe.

  • Kontroller at din mappe går å laste ned fra github, at den seneste versjonen av prosjektet ligger oppe osv!

Innlevering av eksamen

  • Eksamen skal leveres som en pdf på inspera.

  • I pdf:en skal det stå beskrevet hvor man kan finne data og kod (beskriv dette under preface i mallen).

  • Jeg har skapt en mal for innlevering av eksamen, for å bruke denne:

    - Lag en `fork` av `https://github.com/dhammarstrom/innlevering-idr4000-qmd` til din egen github bruker.
    - Last ned din `fork` til R Studio og oppdatere qmd-filene med dine tekster og repository med dine data.
    - For å lage pdf:en, tryck på render. Det kan kreves flere render for å løse problemer som oppstår. Se til å levere den endlige versjonen!
    - Den pdf som skapes finner du i mappen `_book`
    - Legg til endringer (gi add -A) og commit (git commit -m ‘a message’) og push (git push). Din versjon av innleveringsmappen er nå oppdatert på din github profil
  • For å bruke denne løsningen kreves at du har quarto installert (https://quarto.org/docs/get-started/).

  • Det kreves også en installasjon av TeX, quarto sier at TinyTeX er et godt alternativ (se https://quarto.org/docs/output-formats/pdf-engine.html)

  • Du kan være interessert av å forandre automatisk generert tekst i rapporten, eks. figurtekster, overskrifter. Se i .yml-filen for å endre disse innstillingene.