Réglage des nœuds dans les splines cubiques naturelles en R

23

J'ai des données avec de nombreuses fonctionnalités corrélées, et je veux commencer par réduire les fonctionnalités avec une fonction de base fluide, avant d'exécuter un LDA. J'essaie d'utiliser des splines cubiques naturelles dans le splinespackage avec la nsfonction. Comment dois-je procéder pour attribuer les nœuds?

Voici le code R de base:

library(splines)
lda.pred <- lda(y ~ ns(x, knots=5))

Mais je ne sais pas comment choisir les nœuds ns.

Belmont
la source
3
demandez-vous comment spécifier les nœuds dans (c'est-à-dire via des arguments à ns ) ou demandez-vous des stratégies pour décider où placer les nœuds? R
Cardinal
1
Voir Harrell, Regression Strategies 2015, pour une bonne discussion de l'endroit où placer les nœuds (cela n'a pas d'importance, donc les quantiles sont aussi bons que tout - sauf si vous avez de bonnes raisons de croire que le comportement change à un moment donné) et nombre de nœuds (3, 4 ou 5 selon N)
statsguy

Réponses:

40

Comment spécifier les nœuds dans R

La nsfonction génère une base de spline de régression naturelle à partir d'un vecteur d'entrée. Les nœuds peuvent être spécifiés via un argument de degrés de liberté dfqui prend un entier ou via un argument de nœuds knotsqui prend un vecteur donnant l'emplacement souhaité des nœuds. Notez que dans le code que vous avez écrit

library(splines)
lda.pred <- lda(y ~ ns(x, knots=5))

vous n'avez pas demandé cinq nœuds, mais avez plutôt demandé un seul nœud (intérieur) à l' emplacement 5.

Si vous utilisez l' dfargument, les nœuds intérieurs seront sélectionnés en fonction des quantiles du vecteur x. Par exemple, si vous passez l'appel

ns(x, df=5)

Ensuite, la base comprendra deux nœuds limites et 4 nœuds internes, placés respectivement aux 20e, 40e, 60e et 80e quantiles x. Les nœuds limites, par défaut, sont placés au minimum et au maximum de x.

Voici un exemple pour spécifier les emplacements des nœuds

x <- 0:100
ns(x, knots=c(20,35,50))

Si vous deviez plutôt appeler ns(x, df=4), vous vous retrouveriez avec 3 nœuds internes aux emplacements 25, 50 et 75, respectivement.

Vous pouvez également spécifier si vous souhaitez un terme d'interception. Normalement, cela n'est pas spécifié car nsest le plus souvent utilisé en conjonction avec lm, ce qui inclut une interception implicitement (sauf si forcé de ne pas le faire). Si vous utilisez intercept=TRUEdans votre appel à ns, assurez-vous de savoir pourquoi vous le faites, car si vous faites cela et appelez lmnaïvement, la matrice de conception finira par être déficiente en termes de rang.

Stratégies pour placer des nœuds

Les nœuds sont le plus souvent placés aux quantiles, comme le comportement par défaut de ns. L'intuition est que si vous avez beaucoup de données regroupées les unes à côté des autres, vous voudrez peut-être plus de nœuds pour modéliser les non-linéarités potentielles dans cette région. Mais cela ne signifie pas que ce soit (a) le seul choix ou (b) le meilleur choix.

D'autres choix peuvent évidemment être faits et sont spécifiques au domaine. La consultation d'histogrammes et d'estimations de densité de vos prédicteurs peut fournir des indices quant à l'endroit où les nœuds sont nécessaires, sauf s'il existe un choix "canonique" compte tenu de vos données.

En termes d'interprétation des régressions, je voudrais noter que, bien que vous puissiez certainement "jouer" avec le placement des nœuds, vous devez vous rendre compte que vous encourez une pénalité de sélection de modèle pour cela que vous devez faire attention à évaluer et ajuster toutes les inférences en tant que résultat.

cardinal
la source
Étant donné x <- 0:100, la façon "correcte" de définir les points d'arrêt est de le faire knots_x <- quantile(x, probs=c(.2, .35, .5)), qui sera ensuite utilisée ns(x, knots=knots_x)pour définir 3 nœuds internes aux emplacements 25, 50 et 75, respectivement. Ce qui m'a dérouté dans la réponse, c'est que je m'attendais à devoir spécifier les quantiles souhaités dans l' knotsargument, alors que je dois saisir les valeurs réelles du xvecteur ...
landroni
Analyse des enquêtes sur la santé, par Edward L. Korn, Barry I. Graubard p.98 déclare que Durrleman et Simon (1989) recommandent (0,05,0,50,0,95) pour les cannelures naturelles
Chris