Considere el siguiente ejemplo muy sencillo:
set.seed( 1 )
SimData <- data.frame( X = runif( 1000, 0, 1 ) )
SimData$Y <- rnbinom( nrow( SimData ), mu = 100*sin( SimData$X*2*pi )+100, size = 10 )
plot( gam( Y ~ s( X ), data = SimData, family = nb( link = log ) ) )
Aquí está el resultado:
Los grados de libertad efectivos son muy-muy cercanos a 9, lo que hace sospechar que la dimensión de la base por defecto no es lo suficientemente grande. Aumentémosla:
plot( gam( Y ~ s( X, k = 20 ), data = SimData, family = nb( link = log ) ) )
Hm. La imagen general es esencialmente la misma, pero la FED sugiere que la dimensión de la base todavía no es lo suficientemente grande.
Incluso si aumentamos k
a 30, la FED sigue siendo mayor (24,8), por lo que, esencialmente, la FED parece seguir simplemente la k
límite, lo cual es bastante extraño... (especialmente para una forma funcional tan simple, y sobre todo que ya estaba bien capturado por el modelo por defecto).
EDIT (07 Sep, 2017): Según una respuesta a la pregunta original, la aplicación de splines adaptativos ( bs="ad"
) puede ser la solución a este problema. Sin embargo...
Pongamos otro ejemplo sencillo:
set.seed( 1 )
SimData <- data.frame( X = runif( 1000, 0, 1 ) )
SimData$Y <- rnbinom( nrow( SimData ), mu = 100*sin( SimData$X*2*pi*3 )+1000, size = 10 )
plot( gam( Y ~ s( X ), data = SimData, family = nb( link = log ), method = "REML" ) )
¡Parece perfecto! Ahora vamos a "estropearlo":
SimData$Y[ SimData$X<=0.05|SimData$X>=0.95 ] <- 0
Esto da lugar al problema original: el FED es de 8,92 con el k
18,91 si k=20
, 46,74 si k=50
etc. A modo de ilustración, aquí está el k=50
caso:
Así que, efectivamente, tenemos el problema original. Intentemos por tanto bs="ad"
:
plot( gam( Y ~ s( X, bs = "ad" ), data = SimData, family = nb( link = log ), method = "REML" ) )
Así que, por desgracia, el problema seguía siendo, incluso con bs="ad"
¡! (En realidad es la misma situación: aumentar k
a 50 da un FED de 44,72, k=100
da 78,03. Por eso he decidido editar esta pregunta en lugar de empezar una nueva: parece que se trata en cierto modo de la misma historia...)
1 votos
Como comentario adicional a mi respuesta, se me ocurre que en la escala logarítmica, tus datos recuerdan a los datos del ejemplo de la aceleración de la cabeza (disponible como conjunto de datos
mcycle
en el MASS IIRC) que a menudo se utiliza para motivar las splines adaptativas. No es exactamente lo mismo (allí la respuesta es continua, no entera), pero el modelo verdadero en la escala logarítmica en su ejemplo tiene una forma similar al modelo verdadero en la escala de datos brutos en elmcycle
conjunto de datos.