Afsnit 8.4: Analyse i python

Den ensidede variansanalysemodel (Statistisk Model 8.2.3) analyseres i python med funktionerne ols og summary2 og i MATLAB med funktionerne fitlm og coefCI, som er beskrevet i afsnit 7.4. Modelformlen, der bruges, er 'x~G', hvor er en faktor, der deler data op i grupper, og er en vektor med responsværdierne. Se det skjulte punkt nedenfor.
For at forstå parametertabellen er det vigtigt at kende den parametrisering, som anvendes i beregningerne. For modellen i 8.2.3, med grupper, faktorniveauerne og tilhørende middelværdiparametre benyttes i forbindelse med modelformlen 'x~G' følgende parametrisering og navngivning.
Vi kan se, at i parametertabellen bruges intercept, svarende til det første niveau af faktoren, og derefter forskelle mellem parametre, hvilket ofte vil være af større interesse end parameterværdierne selv. Det -test, der står i parametertabellen ud for et faktorniveau, bliver således et test for at forskellen i parameterværdi er nul, eller sagt på en anden måde et test for, at de to parameterværdier er ens. På tilsvarende vis er konfidensintervallerne for forskel i parameterværdier. (Bemærk iøvrigt, at i tilfældet med to grupper vil analysen her betragte forskellen hvorimod ttest2 fra afsnit 6.5 betragter
Hvis variablen består af tekststrenge, vil denne i en modelformel automatisk blive opfattet som en faktor, uanset om den er defineret som en faktor eller ej. I python vil intercept i begge tilfælde være det niveau, der kommer først lexikografisk. I MATLAB vil det første niveau, som bruges til intercept, imidlertid afhænge af om er defineret som en faktor. Hvis er en faktor, bruges en leksikografisk ordning, og hvis ikke er en faktor, bruges den første indgang i til intercept. Bogstavet , der bruges i pythons navngivning i formatet variabelnavn[T.niveau], står for Treatment.

Parametrisering og intercept i python

I nedenstående kodevindue laves en parametertabel, hvor spredningen er nul, hvorfor estimaterne bliver lig med de sande værdier af parametrene. Kør kommandoerne, og sørg for at forstå output i parametertabellen i forhold til de sande værdier af og

Se opstartskoden (til/fra)

MATLAB-kode

Forklaring

I output er og Vi kan også udtrykke dette omvendt: og I parametriseringen bruges en leksikografisk ordning af niveauerne i faktoren således at intercept svarer til "A".

Prøv at lægge mere og mere støj på data ved at vælge sigma=0.5, sigma=1 og sigma=2. Bemærk, hvordan -værdierne stiger i de tre test i parametertabellen.
Hvis man vil ændre på hvilken gruppe, der bruges som Intercept, kan man i eksemplet ovenfor indsætte følgende lige efter ,
hvorefter Intercept bliver Prøv dette.

Hvis man ønsker, at estimationsalgoritmen skal bruge parametriseringen med i stedet for forskelle i parameterværdierne, kan dette gøres med modelformlen 'x~G-1'. I modelformlen undertrykker "-1" brugen af et intercept.

8.4.1 Test af modelreduktion i python

Vi vil generelt udtrykke os på den måde, at vi tester en reduktion fra en model til en model , hvis vi tester en hypotese, der bringer os fra model til model I dette afsnit vil model være den ensidede variansanalysemodel 8.2.3, og model er modellen (8.2.1), hvor alle middelværdierne er ens. For at beregne -testet for denne reduktion skal man benytte funktionen anovalm. Input til denne er output fra to kald af estimationsfunktionen, nemlig output fra analyse af model og output fra analyse af model Hvis vi betegner de to output med lmUD1 og lmUD2 bliver kaldet (bemærk, at lmUD2 står før lmUD1)
anovalm(lmUD2,lmUD1)
I tilfældet med model fra (8.2.1), hvor alle observationerne har samme middelværdi, foregår analysen med modelformlen 'x~1'. Brugen af anovalm er vist i eksemplet nedenfor.
Output fra anovalm er en Testtabel. Denne har 2 rækker og 7 søjler. Strukturen er som følger.
Søjlen ssr indeholder for de to modeller, og dfresid de tilhørende frihedsgrader. Til beregning af -testet skal vi bruge som fremkommer som hvor dfdiff kan beregnes som differensen mellem de to værdier under dfresid, og ssdiff kan beregnes som differensen mellem de to værdier under ssr (dette beskrives nøjere i afsnit 8.7). Søjlen indeholder -teststørrelsen og søjlen Pr(>F) angiver den tilhørende -værdi beregnet fra en -fordeling med dfdiff frihedsgrader i tælleren og den anden indgang i dfresid som frihedsgrader i nævneren.

8.4.2 Analyse af data omkring metoder til håndvask

For datasættet beskrevet i starten af afsnit 8.2 lader vi være bakterietallet for den 'te måling og lader være den tilhørende metode til håndvask. Vi betragter modellen
hvor middelværdiparametrene og kan variere frit. Kør følgende kode for at få lavet en parametertabel for modellen.

8.4.1 Parametertabel i ensidet variansanalyse

Se opstartskoden (til/fra)

MATLAB-kode

Eftersom niveauet "antibakspray" kommer først i en leksikografisk ordning, er Intercept i parametertabellen Skønnet over forskellen mellem at bruge antibakteriel sæbe (antisaebe) og antibakteriel spray er som står i rækken "metode[T.antisaebe]". I samme række ses, at -værdien er 0.0067 for et -test af, at forskellen i middelværdi er nul (de to middelværdier er ens). Da -værdien er langt under 0.05, tyder data altså på en forskel i de to metoder til håndvask. Vi kan også fra output se, at 95%-konfidensintervallet for forskel mellem de to middelværdier er Dette er et bredt interval, hvilket afspejler, at der kun er 8 observationer i hver gruppe og spredningen i bakterietallet fra dag til dag er stort: skønnet over spredningen er
Parametertabellen indeholder tre -test for forskel i middelværdier. Hvis nu de tre -værdier alle havde været 0.06, skulle vi så konkludere, at data ikke strider mod at alle fire middelværdier er ens? Svaret er nej, for eksempel kunne ligge over og kunne ligge under og så ville data tyde på en forskel mellem og For at teste hypotesen om ens middelværdier
benyttes kommandoen anovalm som vist i den følgende kode.

8.4.2 Teste middelværdier ens med anova-funktion

Se opstartskoden (til/fra)

MATLAB-kode

MATLAB har ikke en funktion til at beregne et enkelt -test, og jeg har derfor selv kodet en funktion anovalm, som findes i m-filen af samme navn.

Genfind -teststørrelsen og -værdien fra afsnit 8.3 i testtabellen. Beregn også ud fra tallene i testtabellen.

Test dig selv

Betragt igen analysen af modellen, hvor hver gruppe har sin egen middelværdi.

MATLAB-kode

Beregn ud fra parametertabellen skøn over de fire middelværdier. Kør så koden igen, hvor du tilføjer "-1" lige efter "metode" i modelformlen for at kontrollere dine beregninger.
Hvis vi gerne vil se forskellen mellem at bruge enten sæbe eller at bruge antibakteriel sæbe, tilføjer vi kommandoen metode=pd.Categorical(metode,categories=["saebe","vand","antisaebe","antibakspray"]) lige efter linjen, hvor metode indskrives, således at "saebe" bliver brugt som Intercept i modelformlen 'bakt~metode' (i MATLAB skal man bruge kommandoen metode=reordercats(metode,'saebe','vand','antisaebe','antibakspray')). Prøv dette. Er den antibakterielle sæbe bedre end almindelig sæbe?

Svar: Bedre sæbe

Fra parametertabellen i output under indgangen metodeantisaebe ses, at skøn over forskellen er -13.5, og et -test, for hypotesen at denne forskel er nul, giver en -værdi på 0.48. Den observerede forskel er derfor ikke stor nok, til at vi kan påvise en forskel i middelværdi.

ForegåendeNæste