Afsnit 5.7: Beregning i R

Jeg har lavet en funktion forward, der laver beregninger til et enkelt trin i forward selektion. Koden til funktionen ligger i filen Rfunktioner.txt og er kopieret ind i kodevinduet nedenfor. Input til funktionen er en matrice med værdierne af de forklarende variable for prøver, en vektor med responsværdierne og en vektor med numrene på de variable, der allerede er inkluderet i modellen. Hvis matricen hedder og responsvektoren starter man med kaldet forward(T,x). Fra output aflæses hvilken variabel, man vil starte med at inkludere i modellen, og næste kald til funktionen bliver forward(T,x,c()), hvor er nummeret på den variabel, der inkluderes. Efter at variablen er inkluderet i modellen, findes det næste led ved kaldet forward(T,x,c()), dernæst forward(T,x,c()), og så videre. Output fra et kald til forward er spredningsskønnet fra den multiple regressionsmodel med et nyt led inkluderet (altså et led mere end i kaldet til forward), en vektor med numrene på de variable der indgår i modellen, og en vektor med -værdierne for test af at en regressionskoefficient er nul. Det er den sidste indgang i vektoren med -værdier, der bruges til at vurdere, om man vil inkludere det sidst fundne led, og dermed om man vil fortsætte forward selektionsproceduren.
I kodevinduet nedenfor hentes datasættet fra afsnit 5.5, men i stedet for kun at bruge de første 40 målinger bruges her alle 50 målinger.

5.7.1 Forward selektion i R

Se opstartskoden (til/fra)

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. I den efterfølgende kommando which.min(res) finder man nummeret på den variabel, der giver den mindste værdi af Estimation af den multiple regressionsmodel foregår ikke her med lm, som I ellers er vant til, men med funktionen lsfit. 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 beregnes ud fra standard errors og opslag i en -fordeling.

Kør koden, og se, at den første variabel, der medtages, er nummer 151, og at den tilhørende -værdi er Kør nu koden igen, hvor forward(spek,brix) udskiftes med forward(spek,brix,c(151)). Her vil du se, at variablen nummer 221 inkluderes, og den tilhørende -værdi er Fortsæt selv forward selektionsalgoritmen, og overvej, hvornår du vil stoppe.
Jeg har også lavet en funktion cvForward til at lave crossvalidation (leave one out) beregningerne for en forward selektionsmodel med et givet antal variable. Input til funktionen er matricen med værdierne af de forklarende variable, vektoren med responsværdierne og et tal, der angiver, hvor mange led der skal medtages i forward selektionsmodellen. I kodevinduet nedenfor kaldes funktionen med 3 som antal led i forward selektionsmodellen. Output fra cvForward er en vektor med prædiktionsspredningen beregnet ved leave one out crossvalidation, når der medtages henholdsvis 1 variabel i forward selektion, 2 variable og 3 variable, hvor 3 var angivet i kaldet til funktionen. Det tager cirka et minut at køre koden nedenfor.

5.7.2 Crossvalidation i R

I funktionen cvForward indeholder matricen mat 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 crossvalidation skridtet, hvor den 'te observation tages ud, og træningssættet består af de resterende observationer. For hvert træningssæt genemfø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.

Kør koden (det tager nogle minutter), og vurder ud fra output, hvor mange led du vil medtage i din model.

Resultat

Resultaterne ved at køre forward 15 gange er vist i figuren nedenfor. Ud fra figuren med -værdier vil man nok vælge forward selektionsmodellen med 5 variable, hvilket stemmer overens med den røde kurve med prædiktionsspredningen fra leave one out crossvalidation. Formelt vil man ved forward selektion med en grænseværdi på 0.05 kun medtage 2 variable, men crossvalidation viser, at det er bedre med 5 variable. Den følgende tabel viser de fem første variable, der kommer med ved forward selektion, baseret på henholdsvis de 40 første målinger, som i afsnit 5.5, og baseret på alle 50 målinger som i dette afsnit.
Skønnet over spredningen fra den multiple regressionsmodel med de 5 variable fra en forward selektion er hvorimod prædiktionsspredningen er Brixværdien ligger i disse data spredt ud mellem 11 og 20. Med en spredning på omring 1.5 er der, set relativt til variationsområdet, en stor usikkerhed i bestemmelsen af brixværdien.

Test dig selv

Prøv at køre forward selektion på data i afsnit 5.4 med i alt 10 forklarende variable. Beregn også crossvalidation prædiktionsspredning.

Svar: Forward selektion

Forward selektion tager variable med i rækkefølgen , , , og SV, hvorefter -værdi bliver over 0.05. Crossvalidation giver mindst prædiktionsspredning med 4 variable.

ForegåendeNæste