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 splines
package avec la ns
fonction. 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
.
Réponses:
Comment spécifier les nœuds dans R
La
ns
fonction 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édf
qui prend un entier ou via un argument de nœudsknots
qui prend un vecteur donnant l'emplacement souhaité des nœuds. Notez que dans le code que vous avez écritvous 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'
df
argument, les nœuds intérieurs seront sélectionnés en fonction des quantiles du vecteurx
. Par exemple, si vous passez l'appelEnsuite, 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 dex
.Voici un exemple pour spécifier les emplacements des nœuds
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
ns
est le plus souvent utilisé en conjonction aveclm
, ce qui inclut une interception implicitement (sauf si forcé de ne pas le faire). Si vous utilisezintercept=TRUE
dans votre appel àns
, assurez-vous de savoir pourquoi vous le faites, car si vous faites cela et appelezlm
naï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.
la source
x <- 0:100
, la façon "correcte" de définir les points d'arrêt est de le faireknots_x <- quantile(x, probs=c(.2, .35, .5))
, qui sera ensuite utiliséens(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'knots
argument, alors que je dois saisir les valeurs réelles dux
vecteur ...