Som et eksempel ønskede jeg at måle vægten af 10 pakker af den
muesli, jeg spiser til morgenmad, for at se, om pakkerne
holder den lovede vægt på 600 gram. Til rådighed har jeg dog
kun min simple køkkenvægt, og jeg ville ikke kunne sige, om en eventuel
afvigelse skyldes indholdet af muesli eller en fejlvisning af min
køkkenvægt. I stedet lavede jeg et kalibreringeksperiment. Ti gange
tændte jeg for køkkenvægten, målte vægten af et målebæger, fyldte
målebægeret op til 600 ml markeringen med vand, målte vægten igen og
trak de to vægtmålinger fra hinanden. De 10 differencer er skrevet
ind i kodevinduet nedenfor. Det første spørgmål, jeg ønsker at stille,
er, om målingerne stemmer overens med det forventede 600
gram? Det andet spørgsmål,
jeg er interesseret i, er, hvor meget variation der er
i målingerne? Umiddelbart vil jeg bruge dette til at sige, hvor
stabil min køkkenvægt er, men så simpelt er det ikke: variationen i
målingerne kommer både fra køkkenvægten og fra min opmåling af de 600 ml
vand.
Jeg vil gerne bruge normalfordelingen til at beskrive mine data, men
er dette rimeligt? Jeg har ikke nok data til at lave et
goodness of fit test som beskrevet i afsnit
3.4, og som I prøvede at lave i
Opgave 3.3 i Øvelse 3. I stedet vil jeg her beskrive
en grafisk undersøgelse, der kan give en indikation af, om det er rimeligt
at bruge en normalfordeling. I den grafiske metode laves en figur, hvor
punkterne bør "sno sig" omkring en ret linje, i fald data stammer fra
en normalfordeling. Med kun ganske få datapunkter, som i mit eksempel
ovenfor, kan det være svært at afgøre, om data afviger fra at "sno sig"
omkring en ret linje. Den grafiske undersøgelse er således af større
værdi, hvor man har flere datasæt og kan se, om de alle viser den samme
form for afvigelse fra "sno sig" egenskaben.
Det følgende kodevindue laver den grafiske undersøgelse for data i
eksemplet ovenfor.
I R benyttes kommandoen qqnorm
til at lave et qqplot. Det er også muligt at tilføje en linje med kommandoen
qqline (linjen er baseret på 25% og 75% fraktilerne, det vil sige
vaerdierne, hvor der ligger 25% af data på den ene side og 75% på
den anden).
xxxxxxxxxx
1
v600=c(579,583,586,601,576,559,609,572,567,587)
2
qqnorm(v600)
3
qqline(v600)
4
c("Figur er dannet")
Messages
Jeg beskriver nu den grafiske undersøgelse,
lavet i kodevinduet ovenfor, som går under navnet
normal-qqplot. Her står "q" for quantile, som på dansk
er fraktil, og på dansk taler man om en fraktilsammenligning.
For nemhed i notationen vil jeg fremover blot omtale metoden som et
qqplot. For at beskrive metoden lader jeg up være
p-fraktilen i en standard normalfordeling, N(0,1)-fordelingen,
det vil sige, at Ncdf(up,0,1)=p.
I R beregnes p-fraktilen som qnorm(p).Vi betragter n datapunkter
x1,x2,…,xn og ordner disse efter størrelse, x[1]
betegner den mindste, x[2] den næstmindste, og så videre op til
x[n] som er den største: x[1]≤x[2]≤⋯≤x[n].
Et qqplot består i at tegne punkterne
(u(i−0.5)/n,x[i]),i=1,2,…,n.
I R produceres denne figur med kommandoen
qqnorm(x), hvor x er en vektor med data.
I nedenstående kodevinduer vises nogle eksempler på qqplots.
Hvis vektoren x indholder dataværdierne, laves
et (normal-) qqplot med kommandoen qqnorm(x).
R-kommandoen qqline(x) tilføjer en linje
til figuren. Her kommer først et kodevindue, hvor data er normalfordelt.
Der laves en figur med fire qqplots, alle med det samme antal
observationer. Prøv at køre koden et par gange. Prøv dernæst at
ændre n fra 10 til 40, og dernæst til 100. Kommandoen
rnorm(n) simulerer n observationer fra en standard
normalfordeling.
xxxxxxxxxx
1
# der gøres klar til fire delplots
2
n=10
3
par(mfrow=c(2,2))
4
5
# for hver delplot simuleres data fra rnorm
6
x=rnorm(n)
7
qqnorm(x,pch=20)
8
qqline(x)
9
x=rnorm(n)
10
qqnorm(x,pch=20)
11
qqline(x)
12
x=rnorm(n)
13
qqnorm(x,pch=20)
14
qqline(x)
15
x=rnorm(n)
16
qqnorm(x,pch=20)
17
qqline(x)
18
c("Figur er dannet")
Messages
Nu følger et kodevindue, der danner en figur med fire
qqplots, og hvor data ikke er normalfordelte for de sidste to
qqplots.
Prøv at køre koden et par gange. Prøv dernæst at
ændre n fra 10 til 40, og dernæst til 100.
xxxxxxxxxx
1
# der gøres klar til fire delplots
2
n=10
3
x=rnorm(n)
4
par(mfrow=c(2,2))
5
6
# fire forskellige fordelinger betragtes
7
qqnorm(x,main="Normalfordeling",pch=20)
8
qqline(x)
9
qqnorm(3+2*x,main="Normalfordeling",pch=20)
10
qqline(3+2*x)
11
qqnorm(exp(x),main="Log-normalfordeling",pch=20)
12
qqline(exp(x))
13
qqnorm(pnorm(x),main="Uniform fordeling",pch=20)
14
qqline(pnorm(x))
15
c("Figur er dannet")
Messages
I det øvre højre delplot betragtes data fra en normalfordeling.
Hvad er middelværdi og spredning i denne normalfordeling?
I det nedre venstre delplot betragtes data fra en stokastisk variabel,
der kun kan antage
positive værdier. Hvad er fordelingen af logaritmen til den
stokastiske variabel?
Der simuleres først data data fra en N(0,1) fordeling, hvorefter
disse ganges med 2 og der lægges 3 til. Dette betyder, at de nye data
stammer fra en N(3,22)-fordeling, middelværdi er 3 og spredning er 2.
Data kommer fra en stokastisk variabel Y=eX, hvor X er
N(0,1)-fordelt. Hvis vi tager logaritmen, får vi log(Y)=log(eX)=X,
som er normalfordelt. Man siger, at Y er log-normalfordelt.
Hvorfor giver et qqplot en figur,
hvor normalfordelte data snor sig omkring en ret linje?
Her er kort den tekniske ide bag et qqplot.
Hvis data følger en N(μ,σ2)-fordeling,
så bør der gælde, at for ethvert p mellem 0 og 1 vil p-fraktilen
beregnet ud fra data x1,…,xn ligne p-fraktilen i en
N(μ,σ2)-fordeling. Hvis X∼N(μ,σ2),
kan vi skrive X=μ+σU, hvor U∼N(0,1), hvorfor
p-fraktilen for X kan skrives som μ+σup. Hvad mener
jeg med fraktiler beregnet ud fra data x1,…,xn?
Per definition af de ordnede værdier vides,
at i punktet x[i] er andelen af data mindre end eller
lig med denne værdi givet ved i/n, men hvis vi betragter en værdi
x lidt mindre end x[i] (men større end x[i−1]), er
andelen af data mindre end eller
lig med denne værdi i stedet (i−1)/n. Vi vælger derfor at sige, at
x[i] er et skøn over ((i−21)/n)-fraktilen. Vores argument
er derfor, at hvis data er N(μ,σ2)-fordelt, så bør
x[i]≈μ+σu(i−21)/n,i=1,…,n,
hvor "≈" skal læses som "cirka lig med".
I qqplottet bør punkterne derfor sno sig om en linje med hældning
σ. ForegåendeNæste