Seite 1 von 1

Bestes Modell finden

Verfasst: Sa Jul 11, 2020 4:13 pm
von Gwinzy
Hallo,
ich kenne zwar stepAIC, aber gibt es eine Möglichkeit, automatisch das beste Modell zu finden, die auch Wechselwirkungen/Quadrierte Parameter und ähnliches beachtet?

Mit freundlichen Grüßen
Gwinzy

Re: Bestes Modell finden

Verfasst: Sa Jul 11, 2020 8:11 pm
von bigben
Wird es irgendwo geben, kenne ich persönlich nicht. Schon die üblichen stepwise Methoden führen zu einem Overfitting an die Details der jeweiligen Stichprobe. Wenn Du nicht sehr viele Beobachtungen hast ist das gefährlich. Wenn Du sehr viele hast, denk auch über Neuronale Netze etc nach.

JMTC,
Bernhard

Re: Bestes Modell finden

Verfasst: Sa Jul 11, 2020 8:56 pm
von EDi
Mit MuMIn::dredge() kann man brute-force mäßig alle Modelle rechnen...

Um den Fehler bei der Selektion (also den Fehler bei der Wahl des "besten") sich mal anzuschauen, könnte man das ganze mit bootstraps /cross-validation mal abschätzen...

Macht zwar keiner, würde aber die Sinnhaftigkeit solcher Prozeduren darstellen...

Re: Bestes Modell finden

Verfasst: Di Jul 14, 2020 12:52 am
von bigben
Athomas hatte irgendwann mal eine Simulation in der folgende Art gemacht:

Wir nehmen eine Matrix mit ganz zufälligen Beobachtungen. Je 1000 Beobachtungen von 100 Variablen:

Code: Alles auswählen

set.seed(4711)
bsp <- as.data.frame(matrix(rnorm(100000), nrow=1000))
Jetzt stellen wir ein lineares Modell auf, das die erste Spalte durch die 99 anderen vorhersagt:

Code: Alles auswählen

model1 <- lm(V1~., data=bsp) 
Davon nehmen wir jetzt die Koeffizienten und sortieren die mit dem niedrigsten p-Wert nach oben. Wir schauen uns die 10 besten an:

Code: Alles auswählen

co <- summary(model1)$coefficients
head(co[order(co[,4]),],10)
Das Ergebnis:

Code: Alles auswählen

> head(co[order(co[,4]),],10)
       Estimate Std. Error   t value     Pr(>|t|)
V87  0.11330660 0.03126428  3.624155 0.0003061565
V73 -0.09956095 0.03050163 -3.264119 0.0011394572
V10 -0.08610537 0.03121777 -2.758216 0.0059295837
V91  0.08026375 0.03214044  2.497282 0.0126925862
V61 -0.07951723 0.03194038 -2.489552 0.0129700056
V89 -0.07187542 0.03212909 -2.237082 0.0255250979
V24  0.06063133 0.03182597  1.905090 0.0570868552
V4   0.05825938 0.03156337  1.845791 0.0652508491
V45 -0.05552266 0.03119715 -1.779735 0.0754566842
V72  0.05515997 0.03135250  1.759348 0.0788581052
Gut, sechs signifikante Prädiktoren sind identifiziert, V87 ist mit p < 0,001 über jeden Zweifel erhaben, V24 verfehlt Signifikanz ganz knapp mit p = 0,057.

AIC des Ausgangswerts und des auf die signifikanten Prädiktoren begrenzten Modells:

Code: Alles auswählen

> model2 <- lm(V1 ~ V87+V73+V10+V91+V61+V89, data = bsp)
> AIC(model1)
[1] 2842.387
> AIC(model2)
[1] 2734.049
Wir konnten also die signifikanten Variablen identifizieren und den AIC damit senken. Das Model zwei war höchst signifikant besser als das Nullmodell mit p-value: 6.718e-08 ! Schade nur, dass wir auch ohne CrossValidation in diesem Fall wissen, dass es überhaupt gar keinen Zusammenhang gibt. Nur zuviele Prädiktoren und eine automatisierte Modellauswahl. Wenn wir da jetzt noch alle quadratischen, kubischen und Interaktionsterme drin hätten würde die Kombinatorik ihr übriges tun.

LG,
Bernhard