Eu tenho dados com muitos recursos correlatos e quero começar reduzindo os recursos com uma função básica, antes de executar um LDA. Estou tentando usar splines cúbicos naturais no splines
pacote com a ns
função Como faço para atribuir os nós?
Aqui está o código R básico:
library(splines)
lda.pred <- lda(y ~ ns(x, knots=5))
Mas não tenho idéia de como escolher os nós ns
.
Respostas:
Como especificar os nós em R
A
ns
função gera uma base de spline de regressão natural , dado um vetor de entrada. Os nós podem ser especificados por meio de um argumento de graus de liberdadedf
que recebe um número inteiro ou por um argumento de nósknots
que aceita um vetor, fornecendo a colocação desejada dos nós. Observe que no código que você escreveuvocê não solicitou cinco nós, mas solicitou um único nó (interior) no local 5.
Se você usar o
df
argumento, os nós internos serão selecionados com base nos quantis do vetorx
. Por exemplo, se você fizer a ligaçãoA base incluirá dois nós de limite e quatro nós internos, colocados nos quantis 20, 40, 60 e 80 de
x
, respectivamente. Os nós de limite, por padrão, são colocados no mínimo e no máximo dex
.Aqui está um exemplo para especificar os locais dos nós
Se você telefonar
ns(x, df=4)
, você terá três nós internos nos locais 25, 50 e 75, respectivamente.Você também pode especificar se deseja um termo de interceptação. Normalmente, isso não é especificado, pois
ns
é usado com mais frequência em conjunto comlm
, o que inclui uma interceptação implicitamente (a menos que seja forçado a não fazê-lo). Se você usarintercept=TRUE
sua chamada parans
, verifique se sabe por que está fazendo isso, pois se você fizer isso e depois ligar de formalm
ingênua, a matriz de design acabará sendo deficiente em classificação.Estratégias para dar nós
Os nós geralmente são colocados em quantis, como o comportamento padrão de
ns
. A intuição é que, se você tiver muitos dados agrupados juntos, poderá querer mais nós para modelar eventuais não linearidades nessa região. Mas isso não significa que essa seja (a) a única opção ou (b) a melhor escolha.Obviamente, outras opções podem ser feitas e são específicas do domínio. Analisar histogramas e estimativas de densidade de seus preditores pode fornecer pistas sobre onde os nós são necessários, a menos que exista alguma opção "canônica" para seus dados.
Em termos de interpretação de regressões, eu observaria que, embora você possa "brincar" com a colocação de nós, você deve perceber que incorre em uma penalidade de seleção de modelo por isso, que deve ter o cuidado de avaliar e ajustar quaisquer inferências. resultado.
fonte
x <- 0:100
, a maneira "correta" de definir os pontos de interrupção é fazerknots_x <- quantile(x, probs=c(.2, .35, .5))
, que será usadons(x, knots=knots_x)
para definir 3 nós internos nos locais 25, 50 e 75, respectivamente. O que me confundido na resposta foi que eu estava esperando para necessidade de especificar os quantis desejados noknots
argumento, ao passo que eu preciso para valores reais de entrada dox
vetor ...