Establecer nudos en splines cúbicos naturales en R

23

Tengo datos con muchas funciones correlacionadas, y quiero comenzar reduciendo las funciones con una función de base suave, antes de ejecutar un LDA. Estoy tratando de usar splines cúbicas naturales en el splinespaquete con la nsfunción. ¿Cómo hago para asignar los nudos?

Aquí está el código R básico:

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

Pero no tengo idea de cómo elegir los nudos ns.

Belmont
fuente
3
¿Está preguntando cómo especificar los nudos en (es decir, a través de argumentos a ns ) o está preguntando sobre estrategias para decidir dónde colocar los nudos? R
cardenal
1
Vea Harrell, Regression Strategies 2015, para una buena discusión sobre dónde colocar los nudos (no importa, por lo que los cuantiles son tan buenos como cualquier otra cosa; las excepciones son si tiene buenas razones para creer que los cambios de comportamiento en algún momento) y número de nudos (3, 4 o 5 dependiendo de N)
statsguy

Respuestas:

40

Cómo especificar los nudos en R

La nsfunción genera una base spline de regresión natural dado un vector de entrada. Los nudos se pueden especificar mediante un argumento de grados de libertad dfque toma un número entero o mediante un argumento de nudos knotsque toma un vector que proporciona la ubicación deseada de los nudos. Tenga en cuenta que en el código que ha escrito

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

no ha solicitado cinco nudos, sino que ha solicitado un solo nudo (interior) en la ubicación 5.

Si utiliza el dfargumento, los nudos interiores se seleccionarán en función de los cuantiles del vector x. Por ejemplo, si haces la llamada

ns(x, df=5)

Luego, la base incluirá dos nudos límite y 4 nudos internos, colocados en los cuantiles 20, 40, 60 y 80 de x, respectivamente. Los nudos de límite, por defecto, se colocan en el mínimo y máximo de x.

Aquí hay un ejemplo para especificar la ubicación de los nudos.

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

Si ns(x, df=4)tuviera que llamar , terminaría con 3 nudos internos en las ubicaciones 25, 50 y 75, respectivamente.

También puede especificar si desea un término de intercepción. Normalmente esto no se especifica ya que nsse usa con mayor frecuencia junto con lm, lo que incluye una intercepción implícita (a menos que sea forzado a no hacerlo). Si utiliza intercept=TRUEen su llamada a ns, asegúrese de saber por qué lo está haciendo, ya que si hace esto y luego llama lmingenuamente, la matriz de diseño terminará siendo deficiente en rango.

Estrategias para colocar nudos

Los nudos se colocan más comúnmente en cuantiles, como el comportamiento predeterminado de ns. La intuición es que si tiene una gran cantidad de datos agrupados juntos, entonces es posible que desee más nudos allí para modelar cualquier no linealidad potencial en esa región. Pero eso no significa que esta sea (a) la única opción o (b) la mejor opción.

Obviamente, se pueden hacer otras elecciones y son específicas del dominio. Mirar los histogramas y las estimaciones de densidad de sus predictores puede proporcionar pistas sobre dónde se necesitan los nudos, a menos que haya alguna opción "canónica" dada sus datos.

En cuanto a la interpretación de las regresiones, me gustaría señalar que, si bien puedes "jugar" con la colocación de nudos, debes darte cuenta de que incurres en una penalización por selección de modelo por lo que debes tener cuidado de evaluar y ajustar cualquier inferencia como un resultado.

cardenal
fuente
Dado x <- 0:100, la forma "adecuada" de definir los puntos de interrupción es hacer knots_x <- quantile(x, probs=c(.2, .35, .5)), que luego se utilizará ns(x, knots=knots_x)para definir 3 nudos internos en las ubicaciones 25, 50 y 75, respectivamente. Lo que me confunde en la respuesta fue que yo estaba esperando a la necesidad de especificar los cuantiles deseados en el knotsargumento, mientras que necesito valores reales de entrada del xvector de ...
landroni
Análisis de encuestas de salud, por Edward L. Korn, Barry I. Graubard p.98 declara que Durrleman y Simon (1989) recomiendan (0.05,0.50,0.95) para splines naturales
Chris