Les splines surchargent-elles les données?

47

Mon problème : j'ai récemment rencontré un statisticien qui m'a informé que les splines ne sont utiles que pour explorer des données et sont sujettes à un surajustement, ce qui n'est donc pas utile pour la prédiction. Il préférait explorer avec des polynômes simples ... Comme je suis un grand fan des splines et que cela va à l'encontre de mon intuition, je suis curieux de savoir si ces arguments sont valables et s'il existe un grand groupe d' anti-splines ... les activistes là-bas?

Contexte : J'essaie de suivre Frank Harrell, Stratégies de modélisation par régression (1), lors de la création de mes modèles. Il soutient que les splines cubiques restreintes sont un outil valable pour explorer des variables continues. Il soutient également que les polynômes sont médiocres pour la modélisation de certaines relations telles que les seuils, logarithmique (2). Pour tester la linéarité du modèle, il propose un test ANOVA pour la spline:

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

J'ai cherché sur Google pour avoir trop équipé de splines mais je n'ai pas trouvé cela très utile (mis à part les avertissements généraux de ne pas utiliser trop de nœuds). Dans ce forum, il semble y avoir une préférence pour la modélisation spline, Kolassa , Harrell , Gung .

J'ai trouvé un article de blog sur les polynômes, le diable de l'overfitting, qui parle de la prédiction des polynômes. Le post se termine par ces commentaires:

Dans une certaine mesure, les exemples présentés ici sont de la triche - la régression polynomiale est réputée pour être extrêmement robuste. En pratique, il est préférable d’utiliser des splines plutôt que des polynômes.

Maintenant, cela m'a incité à vérifier comment les splines fonctionneraient avec l'exemple:

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

Donne l'image suivante: Une comparaison des splines et des polynômes

En conclusion, je n'ai pas trouvé grand chose qui me convaincrait de reconsidérer les splines. Qu'est-ce qui me manque?

  1. FE Harrell, Stratégies de modélisation par régression: avec applications aux modèles linéaires, régression logistique et analyse de survie, réimpression à couverture souple de la couverture rigide 1st ed. 2001. Springer, 2010.
  2. FE Harrell, KL Lee et BG Pollock, «Modèles de régression dans les études cliniques: détermination des relations entre les prédicteurs et la réponse», JNCI J Natl Cancer Inst, vol. 80, non. 15, pages 1198 à 1202, octobre 1988.

Mise à jour

Les commentaires m'ont fait me demander ce qui se passe dans la plage de données mais avec des courbes inconfortables. Dans la plupart des situations, je ne vais pas hors des limites de données, comme le montre l'exemple ci-dessus. Je ne suis pas sûr que cela soit qualifié de prédiction ...

Quoi qu'il en soit, voici un exemple où je crée une ligne plus complexe qui ne peut pas être traduite en polynôme. Comme la plupart des observations sont au centre des données, j'ai essayé de simuler cela aussi:

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)

Cela donne l'intrigue suivante:

Un tracé en courbes non polynomial plus complexe

Mise à jour 2

Depuis cet article, j'ai publié un article sur la non-linéarité de l'âge sur un grand ensemble de données. Le supplément compare différentes méthodes et j'ai écrit un billet de blog à ce sujet .

Max Gordon
la source
16
Pour être honnête, je ne vois pas vraiment d'où vient votre ami statisticien. Vous pouvez surcharger avec des polynômes et des splines de la même manière. Le surajustement provient de votre classe de modèles ayant une capacité excessive. Ce qui distingue les performances des différents modèles est la manière dont ils limitent leur capacité. Pour les splines (naturelles), il s'agit du placement et du nombre de nœuds, pour les polynômes, du degré.
mec
1
@guy: C'est aussi ma conviction, vous pouvez toujours sur-adapter vos données, quelle que soit la méthode utilisée. Pendant mon cours de régression, mon professeur m'a dit que les polynômes se plient là où se trouvent la majorité des données, ce qui rend les extrêmes plus incertains. Bien que je n'ai trouvé aucun article supportant cette affirmation.
Max Gordon
Toutes les courbes de votre premier graphique ne correspondent pas aux données situées à l'extrême droite.
Emil Friedman
1
La dimension 'x' dans les graphiques ci-dessus est-elle liée au temps? Si c'est le cas, aucune de ces méthodes n'est appropriée, car les deux sont «tournées vers l'avenir» en ce sens qu'elles utilisent des points voisins (des deux côtés) pour modéliser.
arielf
@arielf: Non, le x n'est pas conçu comme une variable de temps. J'y ai pensé comme une variable dans laquelle nous échantillonnons le nombre maximal d'observations au centre. Dans mes recherches, nous ne nous intéressons pas beaucoup à l'avenir, je suppose que c'est davantage dans le domaine de l'inférence que de la prédiction. La variable est censée être un cholestérol, une pression artérielle, un IMC ou une autre variable continue commune.
Max Gordon

Réponses:

18

Le suradaptation vient du fait de permettre une trop grande classe de modèles. Cela devient un peu délicat avec des modèles avec des paramètres continus (comme les splines et les polynômes), mais si vous discrétisez les paramètres en un certain nombre de valeurs distinctes, vous verrez que l'augmentation du nombre de nœuds / coefficients augmentera le nombre de modèles disponibles de manière exponentielle. . Pour chaque jeu de données, il existe une spline et un polynôme qui s'adapte avec précision, à condition de laisser suffisamment de coefficients / nœuds. Il se peut qu'une spline à trois nœuds surpasse plus qu'un polynôme à trois coefficients, mais ce n'est pas une comparaison juste.

Si vous avez un petit nombre de paramètres et un jeu de données volumineux, vous pouvez être raisonnablement sûr de ne pas sur-adapter. Si vous voulez essayer des nombres plus élevés de paramètres, vous pouvez essayer une validation croisée au sein de votre ensemble de tests afin de trouver le meilleur nombre. Vous pouvez également utiliser un critère tel que Longueur description minimale .

ϵϵ

nn+1valeurs de paramètre. Avec cette information, un destinataire de notre code pourrait restaurer le polynôme. Ensuite, nous ajoutons le reste des informations requises pour stocker le jeu de données. Pour chaque point de donnée, nous donnons la valeur x, puis le nombre de cases situées en haut ou en bas du point de données situé hors du polynôme. Les deux valeurs sont stockées dans un codage sans préfixe, de sorte que les valeurs courtes nécessitent peu de bits et que nous n’avons pas besoin de délimiteurs entre les points. (Vous pouvez raccourcir le code pour les valeurs x en ne stockant que les incréments entre les valeurs)

Le point fondamental ici est le compromis. Si je choisis un polynôme d'ordre (comme f (x) = 3,4), le modèle est très simple à stocker, mais pour les valeurs y, je stocke essentiellement la distance à la moyenne. Plus de coefficients me donnent un polynôme mieux ajusté (et donc des codes plus courts pour les valeurs y), mais je dois dépenser plus de bits pour décrire le modèle. Le modèle qui vous donne le code le plus court pour vos données correspond le mieux au critère MDL.

(Notez qu’il s’agit de «MDL brut» et que vous pouvez apporter certaines améliorations pour résoudre divers problèmes techniques).

Peter
la source
Merci Peter pour ta réponse. J'ai essayé de comprendre MDL, en particulier comment l'appliquer. Ce serait bien de l'expliquer à partir de l'un de mes exemples. En tant que non-statisticien, j'aime avoir des exemples avant de comprendre la logistique sous-jacente. L'exemple de la pièce dans l'article de wiki ne m'est pas parvenu ...
Max Gordon
J'ai ajouté un exemple.
Peter
Merci Peter pour l'exemple, c'est beaucoup plus clair pour moi maintenant.
Max Gordon
20

Les statisticiens se disputent depuis longtemps sur l'ajustement polynomial et, selon mon expérience, cela se résume à ceci:

Les splines sont essentiellement une série d'équations différentes assemblées, ce qui tend à augmenter la précision des valeurs interpolées au détriment de la possibilité de projeter en dehors de la plage de données. Cela convient si vous savez que vos données sont pures et proviennent d'une source cohérente et si vous essayez de décrire la probabilité de présence de valeurs différentes dans votre plage de valeurs. Cependant, nous en apprenons généralement moins sur les fondements théoriques à la base de nos données, puisqu’une nouvelle spline commence lorsque l’ancienne spline cesse de décrire avec précision les données. Cela rend la prédiction de valeurs en dehors de nos données presque sans valeur.

Les splines ne sont pas uniques à cet égard. Les fonctions polynomiales souffrent du même problème si nous ajustons simplement les données et n’utilisons pas de cadre théorique pour choisir les variables. Ceux qui ont une théorie bien formée qui détermine quelles variables permettre de varier et de combien seront plus confiants en la capacité d'une fonction polynomiale complexe d'extrapoler des prédictions en dehors des données.

Cependant, de nombreux statisticiens travaillent avec des données sans l'aide d'un cadre théorique préétabli, ce qui pousse certaines personnes à adopter de simples polynômes. Ils pensent qu'une fonction moins flexible qui correspond aux données est plus susceptible de prédire avec précision des valeurs extérieures aux données, car elle est moins susceptible d'être influencée par des anomalies dans les données. Bien que j'aie eu des conversations à ce sujet avec des gens qui préfèrent les polynômes simples, je n'ai jamais eu le sentiment d'un groupe anti-spline. Cela ressemble plutôt à de simples polynômes qui font que certains statisticiens se sentent plus à l'aise pour éviter le surajustement.

Avertissement

Personnellement, je n'ai pas tendance à utiliser des splines ou des polynômes simples avec la plupart de mes données, car je travaille dans un domaine avec de nombreux cadres théoriques pré-établis. En outre, j’ai généralement observé la collecte des données et j’ai une bonne idée de ce qui a motivé les résultats. Dans ce cas, je construis davantage un algorithme logique et je teste l'adéquation de l'algorithme, plutôt que de tester l'adéquation d'une fonction polynomiale. Vous pouvez ajouter ce grain de sel à ma réponse.

Dinre
la source
18
Les polynômes sont beaucoup plus sensibles aux anomalies dans les données que les splines. Une valeur aberrante n'importe où dans le jeu de données a un effet global énorme , tandis que dans les splines, l'effet est local.
mec
Je vois ce que vous dites, et cela est vrai si vous utilisez une approche d’information parfaite ou si vous n’avez pas assez d’informations sur la nature des données. De nombreux statisticiens (moi-même inclus) supposent des informations imparfaites et tentent d'appliquer des critères d'exclusion fondés sur des informations connues avant de tenter d'adapter les données. Les valeurs aberrantes dangereuses devraient alors théoriquement être exclues de la tentative de montage. Si vous ne possédez pas les informations connues sur la nature des données (et que cela est assez courant), alors vous êtes coincé (e) pour essayer de contourner les valeurs aberrantes.
Dinre
5
Je devrais être mieux convaincu que les splines de régression extrapolent plus dangereusement que les polynômes.
Frank Harrell
1
Ce n'est pas quelque chose de nouveau. C'est plutôt la différence constatée entre les statistiques effectuées aux premiers stades de la compréhension et les stades ultérieurs de la compréhension. Plus vous comprenez un système, moins vous vous reposez sur des fonctions intégrées et plus sur des modèles théoriques.
Dinre
1
Pourquoi ne pas utiliser des splines cubiques restreintes, qui contraignent les fonctions à être linéaires à l'extérieur des points de données (je lis le livre de Harrell). Quoi qu'il en soit, l'extrapolation est toujours suspecte. Pensez à une expérience qui a découvert la supraconductivité ou le plasma. La théorie devrait être prouvée par des expériences! Je pense que les fonctions à adapter sont plus pertinentes pour le problème d'interpolation. Sans théorie, je suppose que vous ne seriez pas en mesure de choisir un seul modèle avec des prédicteurs erronés (distribution également inconnue) et une distribution inconnue de y | x, même si vous fournissez suffisamment de données.
KH Kim