In de prostaatkanker dataset (Sectie 10.1.1) zijn veel predictoren aanwezig. Automatische selectieprocedures kunnen behulpzaam zijn als het doel van het regressiemodel erin bestaat om (1) de uitkomst op basis van de predictoren te voorspellen; of (2) associaties tussen de uitkomst en predictoren te beschrijven. Net zoals in vele andere aspecten van de statistiek, zullen we een geobserveerde dataset (steekproef) gebruiken om tot een resultaat te komen (hier: een model) dat ruimer toepasbaar is dan enkel op de geobserveerde data. Het geselecteerde model moet toepasbaar zijn op de ruimere populatie waaruit de steekproefdata bekomen is en waarop de onderzoeksvraag van toepassing is.
Modelselectie kan dan omschreven worden als een methode voor het selecteren van een model dat best geschikt is voor het beantwoorden van de onderzoeksvraag. In dit hoofdstuk beperken we ons tot meervoudige lineaire regressiemodellen waarin sommige van de \(p-1\) effecttermen mogelijks interactietermen voorstellen. Het totaal aantal mogelijke modellen is dan (zonder hiërarchie-restrictie) \(2^{p-1}\) (ieder van de \(p-1\) termen kan opgenomen worden in het model, of niet).
We onderscheiden de volgende algemene procedures:
Alle mogelijke modellen worden geëvalueerd. Deze methode zal enkel haalbaar blijken als het aantal kandidaat modellen niet te groot is.
Niet alle modellen worden geëvalueerd (stapsgewijze procedures): De methode wordt geïnitialiseerd met een model. D.m.v. een regel en een evaluatiecriterium wordt het pad doorheen de modelruimte bepaald.
Merk op dat we hiërarchisch moeten modelleren als we interactietermen toelaten. Een interactieterm mag nooit in het model voorkomen zonder de lagere orde termen.
##Modelselectie op basis van hypothesetesten
Stel, we willen een model selecteren voor lpsa waarbij lcavol, lweight en svi als predicoren worden toegelaten, alsook alle paarsgewijze interactietermen. We zullen drie verschillende strategiën beschouwen voorwaartse modelselectie, achterwaartse modelselecties en stapsgewijze modelselectie waarbij er in elke stap geëvalueerd wordt of een term in het model kan worden opgenomen en of er een andere term kan worden verwijderd.
De procedure kan als volgt beschreven worden:
met \(\epsilon_i \text{ i.i.d. } N(0,\sigma^2)\).
met \(\epsilon_i \text{ i.i.d. } N(0,\sigma^2)\).
Voorbeeld voor lpsa. We laten interactietermen toe, maar de modelbouw moet zich houden aan de hiërarchie van hoofd- en interactietermen. We stellen \(\alpha_{\text{IN}}=5\%\).
m1 <- lm(lpsa ~ 1, data=prostate)
add1(m1,scope=~lweight+lcavol+svi+lweight:lcavol+lweight:svi +lcavol:svi,test="F")
## Single term additions
##
## Model:
## lpsa ~ 1
## Df Sum of Sq RSS AIC F value Pr(>F)
## <none> 127.918 28.838
## lweight 1 16.041 111.877 17.841 13.621 0.000373 ***
## lcavol 1 69.003 58.915 -44.366 111.267 < 2.2e-16 ***
## svi 1 41.011 86.907 -6.658 44.830 1.499e-09 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
m2 <- update(m1,~. + lcavol)
add1(m2,scope=~lweight+lcavol+svi+lweight:lcavol+lweight:svi +lcavol:svi,test="F")
## Single term additions
##
## Model:
## lpsa ~ lcavol
## Df Sum of Sq RSS AIC F value Pr(>F)
## <none> 58.915 -44.366
## lweight 1 5.9484 52.966 -52.690 10.5567 0.001606 **
## svi 1 5.2375 53.677 -51.397 9.1719 0.003172 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
m3 <- update(m2,~ . + lweight)
add1(m3,scope=~lweight+lcavol+svi+lweight:lcavol+lweight:svi +lcavol:svi,test="F")
## Single term additions
##
## Model:
## lpsa ~ lcavol + lweight
## Df Sum of Sq RSS AIC F value Pr(>F)
## <none> 52.966 -52.690
## svi 1 5.1814 47.785 -60.676 10.084 0.002029 **
## lweight:lcavol 1 0.1222 52.844 -50.914 0.215 0.643962
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
m4 <- update(m3,~ . + svi)
add1(m4,scope=~lweight+lcavol+svi+lweight:lcavol+lweight:svi +lcavol:svi,test="F")
## Single term additions
##
## Model:
## lpsa ~ lcavol + lweight + svi
## Df Sum of Sq RSS AIC F value Pr(>F)
## <none> 47.785 -60.676
## lweight:lcavol 1 0.36606 47.419 -59.422 0.7102 0.4016
## lweight:svi 1 1.16445 46.621 -61.069 2.2979 0.1330
## lcavol:svi 1 0.02433 47.761 -58.725 0.0469 0.8291
summary(m4)
##
## Call:
## lm(formula = lpsa ~ lcavol + lweight + svi, data = prostate)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.72966 -0.45767 0.02814 0.46404 1.57012
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.26807 0.54350 -0.493 0.62301
## lcavol 0.55164 0.07467 7.388 6.3e-11 ***
## lweight 0.50854 0.15017 3.386 0.00104 **
## sviinvasion 0.66616 0.20978 3.176 0.00203 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.7168 on 93 degrees of freedom
## Multiple R-squared: 0.6264, Adjusted R-squared: 0.6144
## F-statistic: 51.99 on 3 and 93 DF, p-value: < 2.2e-16
Het geselecteerde model is
\[Y_i = \beta_0 + \beta_v X_{iv} + \beta_w X_{iw} + \beta_s X_{is} + \epsilon_i\]met \(\epsilon_i \text{ i.i.d. } N(0,\sigma^2)\).
Achterwaartse modelselectie is een procedure die ook gekend staat als achterwaartse eliminatie (Engels: backward elimination).
De procedure start van het maximale model en gaat na welke predictoren uit het model kunnen worden verwijderd.
We passen de achterwaartse modelselectie toe op het prostaatkanker voorbeeld. We zoeken naar een model met enkel de belangrijke termen (i.e. significante termen) die geassocieerd zijn met lpsa. We laten interactietermen toe, maar de modelbouw moet zich houden aan de hiërarchie van hoofd- en interactietermen. We stellen \(\alpha_{\text{OUT}}=5\%\).
alphaOut <- 0.05
m<- lm(lpsa~lweight+lcavol+svi+lweight:lcavol+lweight:svi +lcavol:svi,prostate)
dropHlp<-drop1(m,test="F")
dropHlp
## Single term deletions
##
## Model:
## lpsa ~ lweight + lcavol + svi + lweight:lcavol + lweight:svi +
## lcavol:svi
## Df Sum of Sq RSS AIC F value Pr(>F)
## <none> 46.478 -57.365
## lweight:lcavol 1 0.00012 46.479 -59.365 0.0002 0.9878
## lweight:svi 1 0.87404 47.353 -57.558 1.6925 0.1966
## lcavol:svi 1 0.14093 46.619 -59.071 0.2729 0.6027
Merk op dat eerst enkel de interactietermen worden getest. De hoofdeffecten mogen niet uit het model worden weggelaten zolang er interactie termen in het model zijn opgenomen waarin deze hoofdeffecten voorkomen.
while (sum(dropHlp[,6]>=alphaOut,na.rm=TRUE))
{
dropVarName<-rownames(dropHlp)[which.max(dropHlp[,6])]
m <- update(m,as.formula(paste("~.-",dropVarName)))
dropHlp<-drop1(m,test="F")
print(dropHlp)
}
## Single term deletions
##
## Model:
## lpsa ~ lweight + lcavol + svi + lweight:svi + lcavol:svi
## Df Sum of Sq RSS AIC F value Pr(>F)
## <none> 46.479 -59.365
## lweight:svi 1 1.2820 47.761 -58.725 2.5100 0.1166
## lcavol:svi 1 0.1419 46.621 -61.069 0.2778 0.5994
## Single term deletions
##
## Model:
## lpsa ~ lweight + lcavol + svi + lweight:svi
## Df Sum of Sq RSS AIC F value Pr(>F)
## <none> 46.621 -61.069
## lcavol 1 28.1995 74.820 -17.184 55.6484 4.711e-11 ***
## lweight:svi 1 1.1644 47.785 -60.676 2.2979 0.133
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Single term deletions
##
## Model:
## lpsa ~ lweight + lcavol + svi
## Df Sum of Sq RSS AIC F value Pr(>F)
## <none> 47.785 -60.676
## lweight 1 5.8923 53.677 -51.397 11.468 0.001039 **
## lcavol 1 28.0446 75.830 -17.884 54.581 6.304e-11 ***
## svi 1 5.1814 52.966 -52.690 10.084 0.002029 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Merk op dat opnieuw hetzelfde model wordt gekozen. Dat is in het algemeen niet het geval. Vaak heeft achterwaartse modelselectie de eigenschap om te resulteren in een meer complex model dan voorwaartse selectie.
Deze methode is een combinatie van voorwaartse en achterwaartse modelselectie. Het kan starten van het maximale of het minimale model. We implementeren de methode, startende van het minimale model. In elke stap zal eerst worden gekeken of een predictor kan worden toegevoegd, vervolgens zal worden nagegaan of een predictor kan worden verwijderd van het model.
alphaIn <- alphaOut <- 0.05
m <- lm(lpsa ~ 1 ,prostate)
notConverged <- TRUE
while (notConverged)
{
addHlp <- add1(m,scope= ~lweight+lcavol+svi+lweight:lcavol+lweight:svi +lcavol:svi,test="F")
print(addHlp)
addVarName<-rownames(addHlp)[which.min(addHlp[,6])]
if ((sum(addHlp[,6] < alphaIn,na.rm=TRUE))>0) m <- update(m,as.formula(paste("~.+",addVarName)))
dropHlp<-drop1(m,test="F")
print(dropHlp)
if ((sum(dropHlp[,6]>=alphaOut,na.rm=TRUE))>0) m <- update(m,as.formula(paste("~.-",dropVarName)))
if ((sum(addHlp[,6] < alphaIn,na.rm=TRUE) + sum(dropHlp[,6]>=alphaOut,na.rm=TRUE))>0) notConverged <- TRUE else notConverged <- FALSE
}
## Single term additions
##
## Model:
## lpsa ~ 1
## Df Sum of Sq RSS AIC F value Pr(>F)
## <none> 127.918 28.838
## lweight 1 16.041 111.877 17.841 13.621 0.000373 ***
## lcavol 1 69.003 58.915 -44.366 111.267 < 2.2e-16 ***
## svi 1 41.011 86.907 -6.658 44.830 1.499e-09 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Single term deletions
##
## Model:
## lpsa ~ lcavol
## Df Sum of Sq RSS AIC F value Pr(>F)
## <none> 58.915 -44.366
## lcavol 1 69.003 127.918 28.838 111.27 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Single term additions
##
## Model:
## lpsa ~ lcavol
## Df Sum of Sq RSS AIC F value Pr(>F)
## <none> 58.915 -44.366
## lweight 1 5.9484 52.966 -52.690 10.5567 0.001606 **
## svi 1 5.2375 53.677 -51.397 9.1719 0.003172 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Single term deletions
##
## Model:
## lpsa ~ lcavol + lweight
## Df Sum of Sq RSS AIC F value Pr(>F)
## <none> 52.966 -52.690
## lcavol 1 58.910 111.877 17.841 104.549 < 2.2e-16 ***
## lweight 1 5.948 58.915 -44.366 10.557 0.001606 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Single term additions
##
## Model:
## lpsa ~ lcavol + lweight
## Df Sum of Sq RSS AIC F value Pr(>F)
## <none> 52.966 -52.690
## svi 1 5.1814 47.785 -60.676 10.084 0.002029 **
## lweight:lcavol 1 0.1222 52.844 -50.914 0.215 0.643962
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Single term deletions
##
## Model:
## lpsa ~ lcavol + lweight + svi
## Df Sum of Sq RSS AIC F value Pr(>F)
## <none> 47.785 -60.676
## lcavol 1 28.0446 75.830 -17.884 54.581 6.304e-11 ***
## lweight 1 5.8923 53.677 -51.397 11.468 0.001039 **
## svi 1 5.1814 52.966 -52.690 10.084 0.002029 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Single term additions
##
## Model:
## lpsa ~ lcavol + lweight + svi
## Df Sum of Sq RSS AIC F value Pr(>F)
## <none> 47.785 -60.676
## lweight:lcavol 1 0.36606 47.419 -59.422 0.7102 0.4016
## lweight:svi 1 1.16445 46.621 -61.069 2.2979 0.1330
## lcavol:svi 1 0.02433 47.761 -58.725 0.0469 0.8291
## Single term deletions
##
## Model:
## lpsa ~ lcavol + lweight + svi
## Df Sum of Sq RSS AIC F value Pr(>F)
## <none> 47.785 -60.676
## lcavol 1 28.0446 75.830 -17.884 54.581 6.304e-11 ***
## lweight 1 5.8923 53.677 -51.397 11.468 0.001039 **
## svi 1 5.1814 52.966 -52.690 10.084 0.002029 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Merk op dat er voor dit voorbeeld nooit een predictor uit het model werd verwijderd eens die werd opgenomen in het model. Dat is in het algemeen niet het geval.
Eerst een opmerking over de toepassing van de drie modelselectiemethoden op het prostaat voorbeeld. De drie methoden resulteerden in hetzelfde finale geselecteerde model (met enkel hoofdeffecten van lcavol, lweight en svi). In het algemeen leiden de drie methoden niet noodzakelijk tot eenzelfde finale model.
De \(p\)-waarden in het geselecteerde model mogen niet geïnterpreteerd worden. Dit is minder eenvoudig om in te zien. We hebben immers meerdere hypothese testen uitgevoerd om tot dit model te komen. Bovendien zorgt de modelselectie ervoor dat enkel “significante” termen in het finale model staan; de selectieprocedure is dus een doelbewuste aanrijkingsprocedure. Herinner je dat de definitie van de \(p\)-waarde de kans onder \(H_0\) is dat de teststatistiek “door zuiver toeval” minstens zo extreem is dan deze die waargenomen werd. Door de aanrijking via de modelselectieprocedure, is het niet langer “zuiver toeval” dat de teststatistiek groter is dan de geobserveerde.
Er is geen theoretische basis voor de selectieprocedure. Intuïtief lijkt de procedure zinvol omdat we gewend zijn om beslissingen te nemen aan de hand van hypothesetesten, maar hypothesetesten zijn eigenlijk enkel geldig wanneer ze doelgericht toegepast worden om een vooraf (i.e. voor het observeren van de data) duidelijk omschreven onderzoeksvraag te beantwoorden. Bij modelselectie wordt het pad doorheen de modellenruimte bepaald door de geobserveerde data, waardoor de \(p\)-waarden hun betekenis verliezen, i.e. de hypotheses worden niet vooraf door de onderzoekers geformuleerd, maar ze worden door de data bepaald.
De analyse van lpsa in het vorige hoofdstuk zou ook als modelselectie kunnen worden bekeken: we startten met het model met de hoofdeffecten en met interactietermen. Vervolgens werd getest of de interactieterm nul was. Indien de interactieterm niet significant was, dan werd deze verwijderd en werden de hoofdeffecten getest. Dit lijkt op een achterwaartse modelselectie, maar in dat voorbeeld moeten we de procedure interpreteren als een klassieke hypothesetest (voor interactie) waarvan de nulhypothese in de onderzoeksvraag verscholen lag en dus niet door de data gesuggereerd werd.