Afsnit 4.2: Normal-qqplot

Eksempel 4.2.1. (Kontrol af køkkenvægt)
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.

4.2.2 QQplot i R

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).

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 upu_p være pp-fraktilen i en standard normalfordeling, N(0,1)N(0,1)-fordelingen, det vil sige, at Ncdf(up,0,1)=p.N_{\text{cdf}}(u_p,0,1)=p. I R beregnes pp-fraktilen som qnorm(p).
Vi betragter nn datapunkter x1,x2,,xnx_1,x_2,\ldots,x_n og ordner disse efter størrelse, x[1]x_{[1]} betegner den mindste, x[2]x_{[2]} den næstmindste, og så videre op til x[n]x_{[n]} som er den største: x[1]x[2]x[n].x_{[1]}\leq x_{[2]}\leq\cdots\leq x_{[n]}. Et qqplot består i at tegne punkterne
(u(i0.5)/n,x[i]),i=1,2,,n. (u_{(i-0.5)/n},x_{[i]}),\quad i=1,2,\ldots,n.
I R produceres denne figur med kommandoen qqnorm(x), hvor xx er en vektor med data.

QQplots af simulerede data

I nedenstående kodevinduer vises nogle eksempler på qqplots. Hvis vektoren xx 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 nn fra 10 til 40, og dernæst til 100. Kommandoen rnorm(n) simulerer nn observationer fra en standard normalfordeling.
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 nn fra 10 til 40, og dernæst til 100.
  1. I det øvre højre delplot betragtes data fra en normalfordeling. Hvad er middelværdi og spredning i denne normalfordeling?
  2. 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?

Svar: Fordelinger

  1. Der simuleres først data data fra en N(0,1)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)N(3,2^2)-fordeling, middelværdi er 3 og spredning er 2.
  2. Data kommer fra en stokastisk variabel Y=eX,Y=e^X, hvor XX er N(0,1)N(0,1)-fordelt. Hvis vi tager logaritmen, får vi log(Y)=log(eX)=X,\log(Y)=\log(e^X)=X, som er normalfordelt. Man siger, at YY 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)N(\mu,\sigma^2)-fordeling, så bør der gælde, at for ethvert pp mellem 0 og 1 vil p-p\text{-}fraktilen beregnet ud fra data x1,,xnx_1,\ldots,x_n ligne pp-fraktilen i en N(μ,σ2)-N(\mu,\sigma^2)\text{-}fordeling. Hvis XN(μ,σ2),X\sim N(\mu,\sigma^2), kan vi skrive X=μ+σU,X=\mu+\sigma U, hvor UN(0,1),U\sim N(0,1), hvorfor pp-fraktilen for XX kan skrives som μ+σup.\mu+\sigma u_p. Hvad mener jeg med fraktiler beregnet ud fra data x1,,xnx_1,\ldots,x_n? Per definition af de ordnede værdier vides, at i punktet x[i]x_{[i]} er andelen af data mindre end eller lig med denne værdi givet ved i/n,i/n, men hvis vi betragter en værdi xx lidt mindre end x[i]x_{[i]} (men større end x[i1]x_{[i-1]}), er andelen af data mindre end eller lig med denne værdi i stedet (i1)/n.(i-1)/n. Vi vælger derfor at sige, at x[i]x_{[i]} er et skøn over ((i12)/n)((i-\frac{1}{2})/n)-fraktilen. Vores argument er derfor, at hvis data er N(μ,σ2)-N(\mu,\sigma^2)\text{-}fordelt, så bør
x[i]μ+σu(i12)/n,i=1,,n, x_{[i]} \approx \mu+\sigma u_{(i-\frac{1}{2})/n},\quad i=1,\ldots,n,
hvor "\approx" skal læses som "cirka lig med". I qqplottet bør punkterne derfor sno sig om en linje med hældning σ.\sigma.
ForegåendeNæste