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 splines
paquete con la ns
funció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
ns
funció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 libertaddf
que toma un número entero o mediante un argumento de nudosknots
que 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
df
argumento, 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
ns
se usa con mayor frecuencia junto conlm
, lo que incluye una intercepción implícita (a menos que sea forzado a no hacerlo). Si utilizaintercept=TRUE
en su llamada ans
, asegúrese de saber por qué lo está haciendo, ya que si hace esto y luego llamalm
ingenuamente, 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 elknots
argumento, mientras que necesito valores reales de entrada delx
vector de ...