Som omtalt i foregående afsnit, kan vi ikke bruge backward selektion
til at lave en simpel model, når der er for mange forklarende variable.
Hvis man formoder, der kun er få af variablene, der har indflydelse på
middelværdien af respons, kan man benytte
en alternativ metode, kaldet forward selektion,
til at etablere en model.
Ved forward selektion starter man med den mindst mulige model, det
vil sige modellen uden nogen forklarende variabel, hvor
alle de stokastiske variable har samme middelværdi.
Man bygger dernæst modellen op successivt, ved i hvert trin at
inkludere en ny forklarende variabel valgt således, at
spredningsskønnet reduceres mest muligt.
Definition 9.4.1.
(Forward selektion)
Et trin i forward selektionsalgoritmen kan beskrives på følgende vis.
Antag, at den nuværende model har inkluderet variablene
(ved start af algoritmen er ).
For hver variabel prøver vi at udvide modellen med variabel
blandt de variable, der endnu ikke er inkluderet. Dette giver en
model med variable, og for hvert kan vi beregne et
spredningsskøn, som vi kalder Den variabel med mindst
spredningsskøn er vores kandidat til udvidelsen af modellen. I modellen hvor variabel er inkluderet, kan vi se på -værdien
for test af hypotesen det vil sige, et test for at den sidst
inkluderede variabel kan undværes i modellen med variable.
Alt efter størrelsen på denne -værdi kan vi vælge at stoppe algoritmen.
I denne bog vil jeg ikke stoppe algoritmen ud fra -værdien, men ud fra
prædiktionsspredningen opnået ved cross-validation.
Definition 9.4.2.
(Forward selektion med cross-validation)
Prædiktionsspredningen i en model, der inkluderer variable, findes ved,
at der i hvert trin af LOOCV proceduren laves en model med
variable fundet ved forward selektion.
Antallet af variable i slutmodellen findes
som den værdi af hvor prædiktionsspredningen er mindst.
Lad os vende tilbage til data omkring oktantallet for 60
bensinprøver i afsnit 9.3. Tabellen nedenfor
viser i de tre første rækker resultatet af at bruge forward selektion,
indtil 6
variable er inkluderet. Den sidste række viser prædiktionsspredningen som
funktion af, hvor mange variable der inkluderes.
Den første variabel, der inkluderes, er variabel nummer 155.
Skønnet over spredningen i en regressionsmodel med kun
denne ene variabel er 0.661, og hvis vi i denne model laver
-testet for hypotesen er -værdien
Når vi går fra denne ene variabel
til to variable, er det variabel nummer 149, der tilføjes,
og spredningsskønnet falder fra 0.661 til 0.276. Dette
er et stort fald, og tilsvarende er -værdien for test af
hypotesen meget lille, nemlig
I næste trin inddrages variabel nummer 39, og den
tilsvarende -værdi er 0.0000056, og i fjerde trin kommer
variabel nummer 397 med, hvor -værdien er 0.0006.
I det femte trin
tilføjes variabel 36, men nu er -værdien noget større
nemlig 0.0245, og faldet i spredningsskøn er da også kun fra
0.210 til 0.202. Figuren nedenfor viser tallene i tabellen
udvidet op til forward selektion med 15 variable.
Den sorte kurve i det venstre delplot er spredningsskønnet,
og det højre delplot viser p-værdierne. Vi ser tydeligt et
spring opad i -værdierne, efter at fire variable er inkluderet.
Fra 5 til 9 variable svinger -værdien mellem to og fem procent,
og det er først, når den tiende variabel inkluderes, at vi kommer over
en formel grænse på 5 procent.
Vi kan se, at spredningsskønnet falder (sorte kurve),
jo flere variable vi inkluderer,
og dette vil typisk være tilfældet i en situation som her
med mange forklarende variable. Det skyldes, at vi i hvert trin leder
efter den variabel, der gør spredningsskønnet mindst muligt. Vi kan derfor
ikke bruge værdien af spredningsskønnet til at vurdere, hvornår vi skal
stoppe forward selektionsprocessen. I stedet bruger vi
prædiktionsspredningen fundet ved leave one out cross-validation.
Prædiktionsspredningen, som funktion af hvor mange variable der
inkluderes, er vist som den røde kurve i det venstre delplot i
ovenstående figur. Prædiktionsspredningen viser, at vi kun bør
inddrage tre variable i modellen, flere variable vil blot øge
usikkerheden i prædiktionerne. Samlet set peger analysen på, at
vi nok skal bruge tre eller fire variable til at beskrive data.
Prædiktionsspredningen peger på tre variable hvorimod -værdierne
fra hvert trin viser et markant skift, når fire variable er inkluderet.
9.4.1 Beregning i python
Jeg har lavet to funktioner til at lave forward selektionsanalysen.
Funktionen forward finder variable og tilhørende
-værdier baseret på alle data, og producerer en tabel, som
vist i de tre første rækker i tabellen ovenfor for bensindata.
Input til funktionen er matricen med værdierne
af de forklarende variable, vektoren med responsværdierne og et tal,
der angiver, hvor mange trin der skal laves
i forward selektionsalgoritmen. Den anden funktion, cvForward, laver beregningerne
hørende til cross-validation (LOOCV). Input er som til
funktionen forward. Output er prædiktionsspredningen,
når der kun medtages 1 variabel, når der medtages 2 variable
og så videre op til det antal, der er angivet i kaldet
til funktionen. De to funktioner i filen pytFunktioner.py. Det følgende skjulte punkt viser brugen af forward og
cvForward på data vedrørende oktantallet i bensinprøver.
Kør koden, og se, at output fra de 6 første variable stemmer
overens med tallene i tabellen ovenfor, og
at alle -værdierne stemmer overens med det højre delplot i
figuren ovenfor. Ændr dernæst funktionskaldet forward(spek,oktan,15) til
cvForward(spek,oktan,4), for at finde prædiktionsspredningen
ved forward selektion når der medtages fra 1 til 4 variable.
Beregningen tager lidt under et minut, men vil typisk være hurtigere, hvis
man kører python på egen computer.
Tjek, at de fundne værdier stemmer overens
med den røde kurve i ovenstående figur.
Åbn nu opstartskoden for at se definitionen på de to funktioner
forward og cvForward.
Her følger først lidt forklaring til koden i forward.
Det essentielle trin i beregningen er "for"-løkken inde i
forward-funktionen. Her prøver man for alle de
forklarende variable, der endnu ikke er med i modellen, at tilføje
en af disse () og beregne spredningskønnet når
variablen er tilføjet de allerede udvalgte variable (som der er af).
I den efterfølgende kommando argmin(res)
finder man nummeret på den variabel, der giver den mindste værdi
af Estimation af den multiple regressionsmodel foregår
ikke her med ols, som I ellers er vant til, men med
funktionen OLS. I den sidste er input ikke en modelformel,
men derimod en matrice med værdierne af de forklarende variable.
Efter at den nye variabel er fundet, estimeres den
multiple regressionsmodel, og -værdier findes i output. Lad os dernæst se på opbygningen af
funktionen cvForward.
I denne indeholder matricen sqFejl alle
de kvadrerede prædiktionsfejl, rækker svarer til observationsnummer
og søjle angiver, hvor mange led der tages med i forward selektion.
"For-løkken" over er selve cross-validation skridtet, hvor den
'te observation tages ud, og træningssættet består af de
resterende observationer. For hvert træningssæt gennemføres
forward selektion, og hver gang en ny variabel er tilføjet,
beregnes den prædikterede værdi for den observation, der er udeladt
af træningssættet.
Det næste skjulte punkt viser, hvordan vi kan bruge modellen fundet ved
forward selektion til at prædiktere nye prøver. Denne del kræver, at
vi indskriver de variable, vi har fundet ved forward algoritmen.
Når vi har gennemført en forward selektionsproces, og endt med at tage
variable med, ønsker vi at bruge en multipel regressionsmodel,
baseret på disse variable, til at lave prædiktion for kommende datasæt. Umiddelbart vil vi nok gribe dette an som beskrevet i det skjulte punkt
Konfidensinterval og prædiktionsinterval. Dog må
vi forvente, at de konfidensintervaller og prædiktionsintervaller,
der beregnes, er for smalle. Dette skyldes, at disse intervaller er på
formen
Per konstruktion af modellen vil vi forvente, at kan være for lille,
og en mulighed vil være at skifte denne ud med prædiktionsspredningen
I koden nedenfor er vist, hvordan dette kan gennemføres,
idet prædiktionsspredningen er kendt fra opbygningen af
modellen. Kør koden. Kan du forstå længden af prædiktionsintervallerne set i relation til
prædiktionsspredningen fra cross-validation ?
Prøv også at lave konfidensintervaller for middelværdien af kommende
observationer. Synes du, at modellen til beskrivelse af oktantallet er god nok i
forhold til at prediktere oktantallet for nye prøver ?