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 i Øvelse 2. 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.
Resultat 4.2.2. (Brugen af normal-qqplot)
I både python og MATLAB konstrueres et (normal-) qqplot med kommandoen qqplot. Punkterne der tegnes vil altid være stigende ( for to på hinanden følgende punkter), og som beskrevet til sidst i dette afsnit, forventer vi, at hvis data stammer fra en normalfordeling, så vil punkterne sno sig omkring en ret linje.
Det følgende kodevindue laver den grafiske undersøgelse for data i eksemplet ovenfor.

4.2.3 QQplot i python

Både i python og i MATLAB hedder den relevante funktion qqplot. I MATLAB produceres automatisk en linje, der går gennem første og tredje kvartil af data. I python skulle man kunne få den samme linje med tilføjelsen line='q' i kaldet af qqplot, men der beregnes desværre en forkert linje (fejlen ser ud til at være i funktionen numpy.quantile). Hvis man i stedet bruger tilføjelsen line='r' får man en brugbar linje.

MATLAB-kode

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 være -fraktilen i en standard normalfordeling, -fordelingen, det vil sige, at I python beregnes -fraktilen som norm.ppf(p) og i MATLAB som norminv(p).
Vi betragter datapunkter og ordner disse efter størrelse, betegner den mindste, den næstmindste, og så videre op til som er den største: Et qqplot består i at tegne punkterne
I python og MATLAB produceres denne figur med kommandoen qqplot(x), hvor er en vektor med data.

QQplots af simulerede data

I nedenstående kodevinduer vises nogle eksempler på qqplots. Først kommer 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 fra 10 til 40, og dernæst til 100. Kommandoen norm.rvs(0,1,n) (MATLAB: normrnd(0,1,1,n)) simulerer observationer fra en standard normalfordeling.

MATLAB-kode

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 fra 10 til 40, og dernæst til 100.

MATLAB-kode

  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 fordeling, hvorefter disse ganges med 2 og der lægges 3 til. Dette betyder, at de nye data stammer fra en -fordeling, middelværdi er 3 og spredning er 2.
  2. Data kommer fra en stokastisk variabel hvor er -fordelt. Hvis vi tager logaritmen, får vi som er normalfordelt. Man siger, at 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 -fordeling, så bør der gælde, at for ethvert mellem 0 og 1 vil fraktilen beregnet ud fra data ligne -fraktilen i en fordeling. Hvis kan vi skrive hvor hvorfor -fraktilen for kan skrives som Hvad mener jeg med fraktiler beregnet ud fra data ? Per definition af de ordnede værdier vides, at i punktet er andelen af data mindre end eller lig med denne værdi givet ved men hvis vi betragter en værdi lidt mindre end (men større end ), er andelen af data mindre end eller lig med denne værdi i stedet Vi vælger derfor at sige, at er et skøn over -fraktilen. Vores argument er derfor, at hvis data er fordelt, så bør
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