Bestes Modell finden

Modelle zur Korrelations- und Regressionsanalyse

Moderator: EDi

Antworten
Gwinzy
Beiträge: 8
Registriert: Do Okt 10, 2019 9:29 pm

Bestes Modell finden

Beitrag 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
bigben
Beiträge: 2777
Registriert: Mi Okt 12, 2016 9:09 am

Re: Bestes Modell finden

Beitrag 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
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Bestes Modell finden

Beitrag 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...
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
bigben
Beiträge: 2777
Registriert: Mi Okt 12, 2016 9:09 am

Re: Bestes Modell finden

Beitrag 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
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Antworten