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 med disse
(og med spredningsskøn ).
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. Til beregning i R ligger de to funktioner
i filen Rfunktioner.txt. Det følgende skjulte punkt viser brugen af forward og
cvForward på data vedrørende sedimenter i bunden af søer
fra afsnit 7.5.
Kør koden, og se, at output fra de 6 første variable stemmer
overens med tallene i tabellen i det
foregående afsnit, og
at alle -værdierne stemmer overens med det højre delplot i
figuren i afsnit 7.5. Ændr dernæst funktionskaldet forward(spek,LOI,15) til
cvForward(spek,LOI,6), for at finde prædiktionsspredningen
ved forward selektion når der medtages fra 1 til 6 variable.
Beregningen tager lidt under et minut.
Tjek, at de fundne værdier stemmer overens
med tallene i tabellen i det foregående afsnit.
Å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. 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. Lad os dernæst se på opbygningen af
funktionen cvForward.
I denne 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 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.
Prædiktionsspredningen fra leave one out crossvalidation er mindst med
14 variable, og da dette næsten passer med, at
-værdierne i figuren i afsnit 7.5
kommer op over 0.05, vælges dette antal. Skønnet over spredningen fra den multiple regressionsmodel med
de 14 variable fra en forward selektion er hvorimod
prædiktionsspredningen er LOI-værdien
ligger i disse data spredt ud mellem 5 og 74. Med en
spredning omkring 8 kan vi konkludere, at NIRS-spektret
giver brugbar viden om
LOI-værdien, men med en del usikkerhed.
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.