Passen Splines die Daten übermäßig an?

47

Mein Problem : Ich habe kürzlich einen Statistiker getroffen, der mir mitteilte, dass Splines nur zum Durchsuchen von Daten nützlich sind und einer Überanpassung unterliegen und daher für die Vorhersage nicht hilfreich sind. Er zog es vor, mit einfachen Polynomen zu erforschen ... Da ich ein großer Fan von Splines bin und dies meiner Intuition zuwiderläuft, möchte ich herausfinden, wie gültig diese Argumente sind und ob es eine große Gruppe von Anti-Spline- Aktivisten da draußen?

Hintergrund : Ich versuche, bei der Erstellung meiner Modelle Frank Harrell, Regressionsmodellierungsstrategien (1), zu folgen. Er argumentiert, dass eingeschränkte kubische Splines ein gültiges Werkzeug für die Untersuchung kontinuierlicher Variablen sind. Er argumentiert auch, dass die Polynome nicht in der Lage sind, bestimmte Beziehungen wie Schwellenwerte und Logarithmen zu modellieren (2). Um die Linearität des Modells zu testen, schlägt er einen ANOVA-Test für den Spline vor:

H0:β2=β3==βk1=0

Ich habe wegen Überanpassung mit Splines gegoogelt, fand aber nicht viel hilfreich (abgesehen von allgemeinen Warnungen, dass nicht zu viele Knoten verwendet werden). In diesem Forum scheint es eine Vorliebe für Spline-Modellierung zu geben, Kolassa , Harrell , Gung .

Ich fand einen Blog-Beitrag über Polynome, den Teufel der Überanpassung , der über die Vorhersage von Polynomen spricht. Der Beitrag endet mit diesen Kommentaren:

In gewissem Maße handelt es sich bei den hier vorgestellten Beispielen um Betrug - die polynomiale Regression ist bekanntermaßen äußerst unrobust. In der Praxis ist es viel besser, Splines anstelle von Polynomen zu verwenden.

Dies veranlasste mich nun zu prüfen, wie sich Splines im folgenden Beispiel verhalten würden:

library(rms)
p4 <- poly(1:100, degree=4)
true4 <- p4 %*% c(1,2,-6,9)
days <- 1:70

set.seed(7987)
noise4 <- true4 + rnorm(100, sd=.5)
reg.n4.4 <- lm(noise4[1:70] ~ poly(days, 4))
reg.n4.4ns <- lm(noise4[1:70] ~ ns(days,4))
dd <- datadist(noise4[1:70], days)
options("datadist" = "dd")
reg.n4.4rcs_ols <- ols(noise4[1:70] ~ rcs(days,5))

plot(1:100, noise4)
nd <- data.frame(days=1:100)
lines(1:100, predict(reg.n4.4, newdata=nd), col="orange", lwd=3)
lines(1:100, predict(reg.n4.4ns, newdata=nd), col="red", lwd=3)
lines(1:100, predict(reg.n4.4rcs_ols, newdata=nd), col="darkblue", lwd=3)

legend("top", fill=c("orange", "red","darkblue"), 
       legend=c("Poly", "Natural splines", "RCS - ols"))

Gibt das folgende Bild: Ein Vergleich von Splines und Polynomen

Abschließend habe ich nicht viel gefunden, was mich davon überzeugen würde, Splines zu überdenken. Was fehle ich?

  1. FE Harrell, Regressionsmodellierungsstrategien: Mit Anwendungen auf lineare Modelle, logistische Regression und Überlebensanalyse, Softcover-Nachdruck von Hardcover 1. Aufl. 2001. Springer, 2010.
  2. FE Harrell, KL Lee und BG Pollock, "Regressionsmodelle in klinischen Studien: Bestimmung der Beziehungen zwischen Prädiktoren und Antwort", JNCI J Natl Cancer Inst, vol. 80, nein. 15, S. 1198–1202, Oktober 1988.

Aktualisieren

Die Kommentare ließen mich fragen, was innerhalb der Datenspanne passiert, aber mit unangenehmen Kurven. In den meisten Situationen überschreite ich nicht die Datengrenze, wie das obige Beispiel zeigt. Ich bin nicht sicher, ob dies als Vorhersage qualifiziert ist ...

Hier ist ein Beispiel, in dem ich eine komplexere Linie erstelle, die nicht in ein Polynom übersetzt werden kann. Da die meisten Beobachtungen im Mittelpunkt der Daten stehen, habe ich auch versucht, dies zu simulieren:

library(rms)
cmplx_line <-  1:200/10
cmplx_line <- cmplx_line + 0.05*(cmplx_line - quantile(cmplx_line, .7))^2
cmplx_line <- cmplx_line - 0.06*(cmplx_line - quantile(cmplx_line, .3))^2
center <- (length(cmplx_line)/4*2):(length(cmplx_line)/4*3)
cmplx_line[center] <- cmplx_line[center] + 
    dnorm(6*(1:length(center)-length(center)/2)/length(center))*10

ds <- data.frame(cmplx_line, x=1:200)

days <- 1:140/2

set.seed(1234)
sample <- round(rnorm(600, mean=100, 60))
sample <- sample[sample <= max(ds$x) & 
                     sample >= min(ds$x)]
sample_ds <- ds[sample, ]

sample_ds$noise4 <- sample_ds$cmplx_line + rnorm(nrow(sample_ds), sd=2)
reg.n4.4 <- lm(noise4 ~ poly(x, 6), data=sample_ds)
dd <- datadist(sample_ds)
options("datadist" = "dd")
reg.n4.4rcs_ols <- ols(noise4 ~ rcs(x, 7), data=sample_ds)
AIC(reg.n4.4)

plot(sample_ds$x, sample_ds$noise4, col="#AAAAAA")
lines(x=ds$x, y=ds$cmplx_line, lwd=3, col="black", lty=4)

nd <- data.frame(x=ds$x)
lines(ds$x, predict(reg.n4.4, newdata=ds), col="orange", lwd=3)
lines(ds$x, predict(reg.n4.4rcs_ols, newdata=ds), col="lightblue", lwd=3)

legend("bottomright", fill=c("black", "orange","lightblue"), 
       legend=c("True line", "Poly", "RCS - ols"), inset=.05)

Dies ergibt das folgende Diagramm:

Ein komplexeres nichtpolynomielles Liniendiagramm

Update 2

Seit diesem Beitrag habe ich einen Artikel veröffentlicht , der sich mit der Nichtlinearität des Alters in einem großen Datensatz befasst. Die Beilage vergleicht verschiedene Methoden und ich habe einen Blog-Beitrag darüber geschrieben .

Max Gordon
quelle
16
Um ehrlich zu sein, sehe ich nicht wirklich, woher Ihr statistischer Freund kommt. Sie können trotzdem mit Polynomen und Splines überanpassen. Überanpassung kommt von Ihrer Klasse von Modellen mit übermäßiger Kapazität; Was die Leistung verschiedener Modelle auszeichnet, ist die Art und Weise, wie sie ihre Kapazität einschränken. Bei (natürlichen) Splines sind dies Knotenplatzierung und -zahl, bei Polynomen der Grad.
Kerl
1
@guy: Das ist auch meine Überzeugung, dass Sie Ihre Daten immer überarbeiten können, egal welche Methode Sie verwenden. Während meines Regressionskurses sagte mir mein Professor, dass sich Polynome dort biegen, wo der Großteil der Daten vorkommt, wodurch die Extreme unzuverlässiger werden. Obwohl ich keinen Artikel gefunden habe, der diese Behauptung stützt.
Max Gordon
Alle Kurven in Ihrem ersten Diagramm passen nicht zu den Daten ganz rechts.
Emil Friedman
1
Steht die 'x'-Dimension in den obigen Diagrammen in Beziehung zur Zeit? Wenn dies der Fall ist, ist keine dieser Methoden geeignet, da beide in dem Sinne „vorausschauend“ sind, dass sie benachbarte Punkte (auf beiden Seiten) zum Modellieren verwenden.
Arielf
@arielf: Nein, das x ist nicht als Zeitvariable gedacht. Ich stellte es mir als eine Variable vor, bei der wir die maximale Anzahl von Beobachtungen in der Mitte abtasten. In meiner Forschung schauen wir nicht so sehr in die Zukunft, ich denke, es geht eher um Inferenz als um Vorhersage. Die Variable soll ein Cholesterin, ein Blutdruck, ein BMI oder eine andere übliche kontinuierliche Variable sein.
Max Gordon

Antworten:

18

Überanpassung entsteht durch das Zulassen einer zu großen Modellklasse. Bei Modellen mit kontinuierlichen Parametern (wie Splines und Polynomen) wird dies etwas schwierig. Wenn Sie jedoch die Parameter in eine Reihe unterschiedlicher Werte zerlegen, wird die Anzahl der verfügbaren Modelle exponentiell erhöht, wenn Sie die Anzahl der Knoten / Koeffizienten erhöhen . Für jeden Datensatz gibt es einen Spline und ein Polynom, die genau passen, solange Sie genügend Koeffizienten / Knoten zulassen. Es kann sein, dass ein Spline mit drei Knoten mehr passt als ein Polynom mit drei Koeffizienten, aber das ist kein fairer Vergleich.

Wenn Sie eine geringe Anzahl von Parametern und einen großen Datenbestand haben, können Sie sich ziemlich sicher sein, dass Sie nicht übermäßig fit sind. Wenn Sie eine höhere Anzahl von Parametern ausprobieren möchten, können Sie versuchen, innerhalb Ihres Testsets eine Kreuzvalidierung durchzuführen, um die beste Anzahl zu finden, oder Sie können ein Kriterium wie die Mindestbeschreibungslänge verwenden .

ϵϵ

nn+1Parameterwerte. Mit diesen Informationen könnte ein Empfänger unseres Codes das Polynom wiederherstellen. Dann fügen wir den Rest der Informationen hinzu, die zum Speichern des Datensatzes erforderlich sind. Für jeden Datenpunkt geben wir den x-Wert an und dann liegt die Anzahl der Kästchen nach oben oder unten vom Polynom entfernt. Beide Werte werden in Präfix-freier Codierung gespeichert, sodass kurze Werte nur wenige Bits benötigen und keine Trennzeichen zwischen Punkten erforderlich sind. (Sie können den Code für die x-Werte verkürzen, indem Sie nur die Inkremente zwischen den Werten speichern.)

Der grundlegende Punkt hier ist der Kompromiss. Wenn ich ein Polynom a-Ordnung wähle (wie f (x) = 3,4), ist das Modell sehr einfach zu speichern, aber für die y-Werte speichere ich im Wesentlichen den Abstand zum Mittelwert. Mehr Koeffizienten ergeben ein besser passendes Polynom (und damit kürzere Codes für die y-Werte), aber ich muss mehr Bits für die Beschreibung des Modells aufwenden. Das Modell, mit dem Sie den kürzesten Code für Ihre Daten erhalten, entspricht dem MDL-Kriterium am besten.

(Beachten Sie, dass dies als "Roh-MDL" bezeichnet wird und Sie einige Verbesserungen vornehmen können, um verschiedene technische Probleme zu lösen.)

Peter
quelle
Danke Peter für deine Antwort. Ich habe versucht, MDL in den Kopf zu schließen, insbesondere, wie man es anwendet. Es wäre schön, wenn ich es anhand eines meiner Beispiele erläutern würde. Als Nicht-Statistiker lasse ich mir gerne Beispiele machen, bevor ich die zugrunde liegende Logistik verstehe. Das Münzbeispiel im Wiki-Artikel hat mich nicht erreicht ...
Max Gordon
Ich habe ein Beispiel hinzugefügt.
Peter
Danke Peter für das Beispiel, es ist mir jetzt viel klarer.
Max Gordon
20

Statistiker haben sich schon seit langem über die Polynomanpassung gestritten, und meiner Erfahrung nach kommt es darauf an:

Splines sind im Grunde genommen eine Reihe verschiedener zusammengesetzter Gleichungen, die dazu neigen, die Genauigkeit interpolierter Werte auf Kosten der Fähigkeit zu erhöhen, außerhalb des Datenbereichs zu projizieren. Dies ist in Ordnung, wenn Sie wissen, dass Ihre Daten rein sind und aus einer konsistenten Quelle stammen, und wenn Sie versuchen, die Wahrscheinlichkeit des Vorhandenseins unterschiedlicher Werte innerhalb Ihres Wertebereichs zu beschreiben. In der Regel lernen wir jedoch nicht so viel über die theoretischen Grundlagen, auf denen unsere Daten basieren, da ein neuer Spline beginnt, wenn der alte Spline aufhört, die Daten genau zu beschreiben. Dies macht die Vorhersage von Werten außerhalb unserer Daten nahezu wertlos.

Splines sind in dieser Hinsicht nicht eindeutig. Polynomfunktionen haben tatsächlich das gleiche Problem, wenn wir nur die Daten anpassen und keinen theoretischen Rahmen für die Auswahl der Variablen verwenden. Diejenigen, die eine wohlgeformte Theorie haben, die bestimmt, welche Variablen variiert werden dürfen und um wie viel mehr Vertrauen in die Fähigkeit einer komplexen Polynomfunktion, Vorhersagen außerhalb der Daten zu extrapolieren.

Viele Statistiker arbeiten jedoch ohne Hilfe eines vorher festgelegten theoretischen Rahmens mit Daten, und dies treibt einige Menschen zu einfachen Polynomen. Sie begründen, dass eine weniger flexible Funktion, die zu den Daten passt, Werte außerhalb der Daten mit größerer Wahrscheinlichkeit genau vorhersagt, da es weniger wahrscheinlich ist, dass die Funktion durch Anomalien innerhalb der Daten beeinflusst wird. Während ich mit Leuten darüber gesprochen habe, die einfache Polynome bevorzugen, habe ich nie das Gefühl einer Anti-Spline-Gruppe bekommen. Es fühlt sich eher so an, als würden einige Statistiker durch einfache Polynome das Gefühl haben, Überanpassung zu vermeiden.

Haftungsausschluss

Persönlich neige ich nicht dazu, Splines oder einfache Polynome mit den meisten meiner Daten zu verwenden, da ich in einem Bereich mit vielen vorher festgelegten theoretischen Rahmenbedingungen arbeite. Außerdem habe ich in der Regel die Erfassung der Daten beobachtet und kann einen guten Überblick darüber bekommen, was die Ergebnisse beeinflusst hat. In diesem Fall baue ich eher einen logischen Algorithmus auf und teste die Eignung des Algorithmus, anstatt die Eignung einer Polynomfunktion zu testen. Sie können dieses Salzkorn zu meiner Antwort hinzufügen.

Dinre
quelle
18
Polynomials sind weit empfindlicher auf Anomalien innerhalb der Daten als Splines sind. Ein Ausreißer irgendwo in der Datenmenge hat einen massiven globalen Effekt, während der Effekt in Splines lokal ist.
Kerl
Ich verstehe Ihren Standpunkt, und das ist richtig, wenn Sie einen perfekten Informationsansatz verwenden oder nicht genügend Informationen über die Art der Daten haben. Viele Statistiker (ich selbst eingeschlossen) gehen von unvollständigen Informationen aus und versuchen, Ausschlusskriterien basierend auf bekannten Informationen anzuwenden, bevor sie versuchen, die Daten anzupassen. Gefährliche Ausreißer sollten dann theoretisch vom Anpassungsversuch ausgeschlossen werden. Wenn Sie nicht über die bekannten Informationen zur Art der Daten verfügen (und dies ist recht häufig der Fall), können Sie die Ausreißer nicht umgehen.
Dinre
5
Ich müsste besser davon überzeugt sein, dass Regressionssplines gefährlicher extrapolieren als Polynome.
Frank Harrell
1
Das ist nichts Neues. Es ist vielmehr der Unterschied zwischen Statistiken, die in frühen Stadien des Verstehens erstellt wurden, und späteren Stadien des Verstehens. Je besser Sie ein System verstehen, desto weniger verlassen Sie sich auf angepasste Funktionen und desto mehr auf theoretische Modelle.
Dinre
1
Wie wäre es mit eingeschränkten kubischen Splines, die die Funktionen so einschränken, dass sie außerhalb der Datenpunkte linear sind (ich lese Harrells Buch)? Auf jeden Fall ist eine Hochrechnung immer verdächtig. Denken Sie an ein Experiment, bei dem die Supraleitung oder das Plasma entdeckt wurde. Theorie sollte durch Experimente bewiesen werden! Ich denke, welche Funktionen passen, ist für das Interpolationsproblem relevanter. Ohne Theorie wäre es wahrscheinlich nicht möglich, nur ein Modell mit fehlerhaften Prädiktoren (auch unbekannte Verteilung) und unbekannter Verteilung von y | x auszuwählen, selbst wenn Sie genügend Daten zur Verfügung haben.
KH Kim