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.

Respuestas:
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 libertaddfque toma un número entero o mediante un argumento de nudosknotsque toma un vector que proporciona la ubicación deseada de los nudos. Tenga en cuenta que en el código que ha escritono 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 vectorx. Por ejemplo, si haces la llamadaLuego, 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 dex.Aquí hay un ejemplo para especificar la ubicación de los nudos.
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 conlm, lo que incluye una intercepción implícita (a menos que sea forzado a no hacerlo). Si utilizaintercept=TRUEen su llamada ans, asegúrese de saber por qué lo está haciendo, ya que si hace esto y luego llamalmingenuamente, 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.
fuente
x <- 0:100, la forma "adecuada" de definir los puntos de interrupción es hacerknots_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 elknotsargumento, mientras que necesito valores reales de entrada delxvector de ...