Afsnit 1.7: Øvelse 1: Biologi

Denne første uges øvelse skal især gøre jer fortrolige med programpakken R. Derudover skal I vurdere holdbarheden af en hypotese ved hjælp af simulationer (at simulere betyder her at generere tilfældige tal fra en given fordeling). Vi starter dog først ud med en opgave, der skal vise jer nogle eksempler på den type data, I kan støde på i biologi. Alle opgaverne skal være forberedt hjemmefra og gennemgås ved tavlen til øvelserne.

Opgave 1.1: Dataeksempler

I denne opgave skal I ikke lave formelle test, men blot argumentere ud fra jeres "mavefornemmelse".
  1. I et af sine ærteeksperimenter betragter Mendel både farven og formen af 556 ærter. Farven kan enten være gul eller grøn, og formen kan enten være rund eller rynket. Mendel formoder, at de to egenskaber nedarves uafhængigt af hinanden, og eksperimentet er sådan sat op, at han forventer en udspaltning i forholdet for (gul,rund), (gul,rynket), (grøn,rund) og (grøn,rynket). Mendels eksperimentelle data er
    Synes I, at Mendels data stemmer overens med en udspaltning?
  2. I opgave 1.5 nedenfor omtales et eksperiment med laks i en vandtank med to udgangsrør. Ud af 25 laks er der 19, der svømmer ud gennem rør 1, og 6 der svømmer ud gennem rør 2. Er dette udtryk for, at det er tilfældigt, hvilket rør laksen svømmer ud gennem?
  3. I et eksperiment betragtes antallet af kromosomforandringer i bestrålede celler. Eksperimentet er delt op i to dele, hvor der i del 2 bruges en dobbelt så stor strålingsdosis som i den første del. I den første del er der opstået 87 kromosomforandringer i 160 bestrålede celler, og i den anden del er der opstået 122 kromosomforandringer i 160 celler. Giver den dobbelte strålingsdosis dobbelt så mange kromosomforandringer?
De tre eksempler ovenfor vedrører alle tælledata. Dette er også hovedemnet for øvelserne hørende til de tre første kapitler af denne bog.

Opgave 1.2: Regne i R

Når I skal køre R på jeres egen computer, bør I som hovedregel ikke skrive jeres kommandoer direkte i kommandovinduet. I stedet skal I åbne en editor, skrive kommandoerne her og derefter overføre dem til kommandovinduet. På denne måde er det nemmere at rette fejl og at gentage beregninger med forskelligt input. I windowsversionen af R er der en indbygget editor, hvor I blot skal bruge control R for at overføre markeret tekst (i Mac-versionen skal man i nogle opsætninger bruge command enter i stedet).
Som forberedelse til denne opgave skal I have læst afsnit 1.2, der indeholder en introduktion til R.
  1. Definer en variabel med værdien 4. Udregn kvadratroden af logaritmen af (naturlige logaritme) og eksponentialfunktionen af
    Lad endvidere være en variabel med værdien 10 og en variabel med værdien 1.96. Beregn
    Hvad tror du, at kommandoen n+c(-1,1)*x giver?
  2. Lad være en vektor med indgangene og Beregn og ( er den naturlige logaritme). Numerisk værdi af et tal beregnes i R med funktionen abs.
  3. Lad være en vektor med indgangene og og lad være en vektor med indgangene og Beregn og
  4. Lad være vektoren med indgangene og lad være vektoren med indgangene Beregn og I den sidste sum skal der kun medtages de elementer i hvor det tilhørende element i er lig med 2.
    Lad nu være vektoren med indgangene "Lise","Lise","Peter","Lise","Peter","Peter". Beregn
    Prøv at gætte på resultatet af beregningen sum(x[-c(4:6)]).

Opgave 1.3: Figur i R

Denne opgave går ud på, at I skal prøve at lave en figur i R, som beskrevet i afsnit R.5. Til dette skal I bruge data fra artiklen Comparative metal oxide nanoparticle toxicity using embryonic zebrafish. Tabellen nedenfor gengiver (ved aflæsning) resultaterne i figur 4 i artiklen. For forskellige koncentrationer af metal-nanopartikler har man registreret, hvor mange ud af 32 embryoer af zebrafisk der dør efter at have opholdt sig i opløsningen.
  1. Dan en vektor Konc med koncentrationsværdierne, en vektor test med antal testede embryoer og en vektor doed med antallet af døde embryoer. Dan ud fra disse vektoren Lkonc=log(Konc) med logaritmen til koncentrationen, og dan en vektor frek med frekvensen af døde embryoer, det vil sige, antal døde divideret med antal testede.
  2. Benyt kommandoen plot(Lkonc,frek) til at lave en figur, hvor frekvens afsættes mod logaritmen til koncentrationen. Prøv at køre kommandoen igen, hvor du indsætter xlab="Log koncentration" efter frek i kaldet af plot.
    Tilføj også en titel til andenaksen i figuren ved at tildele ylab en værdi i kaldet af plot. En overskrift til figuren kan opnås ved at indsætte main="overskrift" i kaldet af plot.
  3. Funktionen, der sender over i kaldes den logistiske dosis-respons funktion. Den bedste tilpasning til data ovenfor fås med og For at indtegne denne kurve i jeres figur kan I benytte kommandoen
    curve(exp(-1.8132+1.6548*x)/(1+exp(-1.8132+1.6548*x)),
    from=-2,to=3,add=TRUE)
    Funktionen curve skal som input have et funktionsudtryk i variablen et startpunkt og et slutpunkt. Tilføjelsen add=TRUE gør, at kurven indtegnes i den allerede eksisterende figur.
    Gentag plot-kommandoen, og prøv at tilføje col=2 til kaldet af curve. Prøv også at tilføje lty=3 til kaldet af curve.

Opgave 1.4: Indlæse datafil i R (dataframe)

I denne opgave skal I prøve at indlæse data fra en fil. I filen Kromosomskader.csv ligger for hver af 20 celler antallet af kromosomskader efter en bestråling med 2Gy, og tilsvarende antallet af skader på hver af 10 celler efter en bestråling med 3Gy. Filen har to søjler med overskrifterne Dosis og Skadesantal. I den første står bestrålingen (2Gy eller 3Gy), og i den anden står antallet af skader på cellen. Filen har rækker svarende til det totale antal celler. Data i denne opgave er simulerede, men stemmer overens med resultaterne i artiklen A dose-response curve for biodosimetry from a 6 MV electron linear accelerator.
  1. Indlæs filen, og placer indholdet i datKrom, med kommandoen
    datKrom=read.csv("Kromosomskader.csv",header=TRUE,stringsAsFactors=TRUE)
    Prøv at skrive head(datKrom) for at se strukturen af denne. Kommandoen head giver de første få rækker i datKrom. Skriv dernæst class(datKrom).
  2. Kommando class fortæller jer, at datKrom er en dataframe. En dataframe er en samling af søjler, der alle har den samme længde, og hvor søjlerne kan være af forskellig type.
    Prøv nu både at skrive datKrom[,2] og datKromSkadesantal. Dette viser, at en søjle kan addresseres på to måder. Prøv også at skrive class(datKrom[,2]).
    Dan en variabel med dosis (søjle 1) og en variabel med skadesantallene (søjle 2).
  3. Lav et datasæt med skadesantallene for de 20 celler med bestråling 2Gy ved kommandoen
    Skad2Gy=S[D=="2Gy"]
    Lav tilsvarende et datasæt med skadesantallene for cellerne med bestråling 3Gy. Find for hvert datasæt antallet af observationer (benyt length), summen af skadesantallene og gennemsnittet af skadesantallene.
  4. Du skal nu lave en dataframe med dine beregnede værdier ved hjælp af funktionen data.frame. Benyt følgende kommando, hvor du selv må udfylde, hvor der blot står "...".
    Mintabel=data.frame(Antal=...,Sum=...,Gennemsnit=...,
    row.names=c("2Gy","3Gy"))
    Skriv dernæst Mintabel for at se resultatet.

Opgave 1.5: Sammenligne observerede med forventede

For at undersøge hvad der får laksen til at vende tilbage til det vandløb, hvor den voksede op, er der lavet et eksperiment med laks i en vandtank med søvand. Vandtanken har to udgangsrør, og i det ene rør tilsættes der en sammensætning af aminosyrer, der modsvarer sammensætningen i den flod, laksen er vokset op i. For de laks, der forlader vandtanken, er det registreret, om det er gennem rør 1 (rør med aminosyrer) eller gennem rør 2 (rør uden aminosyrer). I nedenstående tabel er vist resultatet fra to eksperimenter. I det første eksperiment (Søvand/Søvand) er der ikke tilsat aminosyrer til rør 1, hvorimod dette er gjort i det andet eksperiment (Amino/Søvand). Data stammer fra artiklen Olfactory homing of chum salmon to stable compositions of amino acids in natal stream water.
  1. I det første eksperiment er der ikke forskel på de to rør, og vi forventer derfor, at det er tilfældigt, hvilket rør laksen svømmer ud gennem. Udtryk dette som en sandsynlighed for at svømme ud gennem rør 1, og angiv de forventede antal svarende til de tomme pladser i ovenstående tabel. Tilsvarende, hvis aminosyrerne ikke har nogen betydning, forventer vi også i det andet eksperiment, at det er tilfældigt, hvilket rør laksen svømmer ud gennem. Beregn igen de forventede antal under antagelsen om tilfældigt valg. Hvad er din umiddelbare vurdering: tyder data på, at det er tilfældigt, hvilket rør laksen svømmer ud gennem i eksperimentet med aminosyrer i rør 1?
For at få en ide om hvorvidt det observerede antal på 19 laks, der svømmer ud gennem røret med aminosyrer, er typisk eller ekstremt under antagelsen om et tilfældigt valg af rør, skal I nu sammenligne udfaldet med en simulering. Vi kan bruge en simulering som den vist i kodevinduet i afsnit 1.1 (med 580 erstattet af 25 og c(0.75,0.25) erstattet af c(0.5,0.5)) til at simulere 25 kast med en mønt (terning med 2 sider), og dernæst tælle op antallet af gange, hvor terningen viser 1, som vi tolker som antallet af gange, laksen svømmer ud gennem røret med aminosyrer. Vi kan dog gøre dette nemmere, idet vi ved, at det stokastiske antal af laks, der svømmer ud gennem røret med aminosyrer, er binomialfordelt. I R kan man simulere fra binomialfordelingen med rbinom:
rbinom(Nsim,25,0.5)
Denne kommando giver Nsim observationer fra en binomialfordeling med antalsværdi 25 og sandsynlighedsparameter
  1. Prøv at køre ovenstående kommando et par gange med Kør dernæst kommandoen med
    Lav en tabel ved hjælp af funktionen data.frame med tre søjler. Første søjle skal indeholde en vektor med de 20 simulerede værdier fra rbinom. Den anden søjle skal indeholde absolutværdien af afstanden mellem det simulerede antal og det forventede antal, Funktionen abs i R giver absolutværdien af et tal. Den tredje søjle skal være enten 0 eller 1, alt efter om er under eller er større end eller lig med denne værdi. Her er afstanden mellem det observerede antal på 19 og det forventede antal. Du kan benytte funktionen ifelse til at lave den tredje søjle: ifelse(D<6.5,0,1).
  2. Hvor mange af dine 20 simuleringer (som er baseret på et tilfældigt valg af udgangsrør) giver anledning til en lige så stor eller større afstand end den, der er observeret i vores faktiske eksperiment? Argumenter for, om observationen på 19 laks er typisk eller atypisk for, hvad man observerer ved et tilfældigt valg af udgangsrør.
    Hvis du ikke allerede har gjort det, så læs nu Definition 1.1.1 på en -værdi, og se Resultat 1.4.1 omkring hvordan en -værdi bruges.

ForegåendeNæste