Le spline sono troppo adatte ai dati?


47

Il mio problema : di recente ho incontrato uno statistico che mi ha informato che le spline sono utili solo per esplorare i dati e sono soggette a un eccesso di adattamento, quindi non utile nella previsione. Preferiva esplorare con semplici polinomi ... Dato che sono un grande fan delle spline, e questo va contro la mia intuizione, sono interessato a scoprire quanto siano validi questi argomenti e se esiste un grande gruppo di anti-spline- attivisti là fuori?

Background : provo a seguire Frank Harrell, Regression Modeling Strategies (1), quando creo i miei modelli. Sostiene che le spline cubiche con restrizioni sono uno strumento valido per esplorare variabili continue. Sostiene inoltre che i polinomi sono scarsi nel modellare determinate relazioni come soglie, logaritmiche (2). Per testare la linearità del modello, suggerisce un test ANOVA per la spline:

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

Ho cercato su Google per eccesso di adattamento con spline ma non ho trovato molto utile (a parte gli avvertimenti generali sul non usare troppi nodi). In questo forum sembra esserci una preferenza per la modellazione di spline, Kolassa , Harrell , gung .

Ho trovato un post sul blog sui polinomi, il diavolo del sovralimentazione che parla della previsione dei polinomi. Il post termina con questi commenti:

In una certa misura gli esempi qui presentati sono imbroglioni: la regressione polinomiale è altamente non robusta. Molto meglio in pratica è usare spline piuttosto che polinomi.

Ora questo mi ha spinto a verificare come si sarebbero comportate le spline con l'esempio:

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"))

Fornisce la seguente immagine: Un confronto tra spline e polinomi

In conclusione, non ho trovato molto che mi convincesse a riconsiderare le spline, cosa mi sto perdendo?

  1. FE Harrell, Strategie di modellazione della regressione: con applicazioni a modelli lineari, regressione logistica e analisi di sopravvivenza, ristampa rilegata in copertina rigida del 1 ° ed. 2001. Springer, 2010.
  2. FE Harrell, KL Lee e BG Pollock, "Modelli di regressione negli studi clinici: determinazione delle relazioni tra predittori e risposta", JNCI J Natl Cancer Inst, vol. 80, n. 15, pagg. 1198–1202, ottobre 1988.

Aggiornare

I commenti mi hanno fatto domandare cosa succede nell'arco di dati ma con curve scomode. Nella maggior parte delle situazioni non esco dal limite dei dati, come indica l'esempio sopra. Non sono sicuro che questo si qualifichi come previsione ...

Comunque ecco un esempio in cui creo una linea più complessa che non può essere tradotta in un polinomio. Dato che la maggior parte delle osservazioni sono al centro dei dati, ho cercato di simulare anche questo:

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)

Questo dà la seguente trama:

Un tracciato di linea non polinomiale più complesso

Aggiornamento 2

Da questo post ho pubblicato un articolo che esamina la non linearità per età in un set di dati di grandi dimensioni. Il supplemento confronta diversi metodi e ho scritto un post sul blog a riguardo .


16
A dire il vero non vedo da dove provenga il tuo amico statistico. Puoi esagerare con i polinomi e le spline allo stesso modo. Il sovradimensionamento viene dalla tua classe di modelli con capacità eccessiva; ciò che distingue le prestazioni di vari modelli è il modo in cui limitano la loro capacità. Per le spline (naturali), è il posizionamento e il numero del nodo, per i polinomi è il grado.
ragazzo

1
@guy: Questa è anche la mia convinzione, puoi sempre sovralimentare i tuoi dati, indipendentemente dal metodo che usi. Durante la mia lezione di regressione il mio professore mi ha detto che i polinomi si piegano dove si verifica la maggior parte dei dati, rendendo gli estremi più inaffidabili. Anche se non ho trovato alcun articolo a supporto di questa affermazione.
Max Gordon,

Tutte le curve nel tuo primo grafico non riescono ad adattare i dati all'estrema destra.
Emil Friedman,

1
La dimensione 'x' nei grafici sopra è correlata al tempo? In tal caso, nessuno di questi metodi è appropriato, poiché entrambi sono "lungimiranti", nel senso che usano i punti vicini (su entrambi i lati) per modellare.
arielf

@arielf: No la x non è intesa come variabile temporale. L'ho pensato come una variabile in cui campioniamo il numero massimo di osservazioni al centro. Nella mia ricerca non guardiamo molto al futuro, immagino sia più nel campo dell'inferenza che della previsione. La variabile è intesa come colesterolo, pressione sanguigna, BMI o qualche altra variabile continua comune.
Max Gordon,

Risposte:


18

Il sovradimensionamento deriva dal consentire una classe di modelli troppo grande. Questo diventa un po 'complicato con modelli con parametri continui (come spline e polinomi), ma se discretizzi i parametri in un numero di valori distinti, vedrai che aumentare il numero di nodi / coefficienti aumenterà il numero di modelli disponibili in modo esponenziale . Per ogni set di dati sono presenti una spline e un polinomio che si adattano perfettamente, purché si consentano coefficienti / nodi sufficienti. Può darsi che una spline con tre nodi si sovrapponga più di un polinomio con tre coefficienti, ma non è certo un confronto equo.

Se si dispone di un numero basso di parametri e di un set di dati di grandi dimensioni, si può essere ragionevolmente sicuri di non essere troppo adatti. Se si desidera provare un numero più elevato di parametri, è possibile provare la convalida incrociata all'interno del set di test per trovare il numero migliore oppure è possibile utilizzare un criterio come Lunghezza minima descrizione .

ϵϵ

nn+1valori dei parametri. Con queste informazioni un destinatario del nostro codice potrebbe ripristinare il polinomio. Quindi aggiungiamo il resto delle informazioni richieste per memorizzare il set di dati. Per ogni punto dati diamo il valore x, quindi quante caselle in alto o in basso il punto dati si trovano al di fuori del polinomio. Entrambi i valori vengono archiviati in una codifica senza prefissi in modo che i valori brevi richiedano pochi bit e non avremo bisogno di delimitatori tra i punti. (È possibile abbreviare il codice per i valori x memorizzando solo gli incrementi tra i valori)

Il punto fondamentale qui è il compromesso. Se scelgo un polinomio di un ordine (come f (x) = 3.4), il modello è molto semplice da memorizzare, ma per i valori y, essenzialmente sto memorizzando la distanza dalla media. Più coefficienti mi danno un polinomio più adatto (e quindi codici più corti per i valori y), ma devo spendere più bit per descrivere il modello. Il modello che ti fornisce il codice più breve per i tuoi dati è la migliore per il criterio MDL.

(Si noti che questo è noto come "greggio MDL" e ci sono alcuni perfezionamenti che è possibile apportare per risolvere vari problemi tecnici).


Grazie Peter per la tua risposta. Ho cercato di avvolgere la testa attorno a MDL, in particolare su come applicarlo. Sarebbe bello averlo spiegato sulla base di uno dei miei esempi. Come non statistico mi piace avere delle cose esemplificate prima di poter comprendere la logistica sottostante. L'esempio della moneta nell'articolo Wiki non mi ha raggiunto ...
Max Gordon,

Ho aggiunto un esempio.
Peter,

Grazie Peter per l'esempio, ora è molto più chiaro per me.
Max Gordon,

20

Gli statistici hanno discusso sull'adattamento polinomiale per secoli e, nella mia esperienza, si riduce a questo:

Le spline sono fondamentalmente una serie di equazioni diverse messe insieme, che tende ad aumentare la precisione dei valori interpolati a scapito della capacità di proiettare al di fuori dell'intervallo di dati. Questo va bene se sai che i tuoi dati sono puri e provengono da una fonte coerente e se stai cercando di descrivere la probabilità della presenza di valori diversi all'interno del tuo intervallo di valori. Tuttavia, di solito non impariamo molto sulle basi teoriche alla base dei nostri dati, poiché una nuova spline inizia quando la vecchia spline smette di descrivere accuratamente i dati. Ciò rende quasi inutile la previsione di valori al di fuori dei nostri dati.

Ora, le spline non sono uniche in questo senso. Le funzioni polinomiali in realtà soffrono dello stesso problema se stiamo semplicemente adattando i dati e non stiamo usando un framework teorico per scegliere le variabili. Coloro che hanno una teoria ben formata alla guida di quali variabili consentire di variare e di quanto saranno più fiduciosi della capacità di una complessa funzione polinomiale di estrapolare previsioni al di fuori dei dati.

Molti statistici, tuttavia, stanno lavorando con i dati senza l'aiuto di un quadro teorico prestabilito, e questo spinge alcune persone verso semplici polinomi. Ritengono che una funzione meno flessibile adatta ai dati abbia maggiori probabilità di prevedere con precisione valori al di fuori dei dati, poiché è meno probabile che la funzione sia influenzata da anomalie all'interno dei dati. Mentre ho avuto conversazioni su questo con persone che preferiscono semplici polinomi, non ho mai avuto la sensazione di un gruppo anti-spline. Sembra più che un semplice polinomio faccia sentire alcuni statistici più a proprio agio nell'evitare il sovradimensionamento.

Clausola di esclusione della responsabilità

Personalmente, non tendo ad usare spline o semplici polinomi con la maggior parte dei miei dati, perché lavoro in un campo con molti framework teorici prestabiliti. Inoltre, di solito ho osservato la raccolta dei dati e posso ottenere una buona comprensione di ciò che stava guidando i risultati. In tal caso, sto costruendo più di un algoritmo logico e testando l'idoneità dell'algoritmo, piuttosto che testare l'idoneità di una funzione polinomiale. Puoi aggiungere questo granello di sale alla mia risposta.


18
I polinomi sono molto più sensibili alle anomalie all'interno dei dati rispetto alle spline. Un valore anomalo in qualsiasi parte del set di dati ha un enorme effetto globale , mentre nelle spline l'effetto è locale.
ragazzo

Vedo il tuo punto, e questo è vero se stai usando un approccio informativo perfetto o non hai abbastanza informazioni sulla natura dei dati. Molti statistici (me compreso) assumono informazioni imperfette e fanno un tentativo di applicare criteri di esclusione basati su informazioni note prima di provare ad adattare i dati. I valori anomali pericolosi dovrebbero quindi teoricamente essere esclusi dal tentativo di adattamento. Se non hai le informazioni conosciute sulla natura dei dati (e questo è abbastanza comune), allora sei bloccato cercando di aggirare gli outlier.
Dinre,

5
Dovrei essere più convinto che le spline di regressione estrapolano più pericolosamente dei polinomi.
Frank Harrell,

1
Questa non è una novità. Piuttosto, è la differenza vista tra le statistiche fatte nelle prime fasi della comprensione rispetto alle fasi successive della comprensione. Più comprendi un sistema, meno ti affidi alle funzioni montate e più fai affidamento su modelli teorici.
Dinre,

1
Che ne dici di usare spline cubiche ristrette, che vincolano le funzioni ad essere lineari all'esterno dei punti dati (sto leggendo il libro di Harrell)? Comunque l'estrapolazione è sempre sospetta. Pensa a un esperimento che ha scoperto la superconduttività o il plasma. La teoria dovrebbe essere dimostrata tramite esperimenti! Penso che le funzioni da adattare siano più rilevanti per il problema di interpolazione. Senza teoria, immagino che non saresti in grado di scegliere un solo modello con predittori in errore (anche distribuzione sconosciuta) e distribuzione sconosciuta di y | x, anche quando ti danno abbastanza dati.
KH Kim,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.