3 votos

Valor de referencia para un predictor continuo (término suave) en un modelo GAM en mgcv

¿Cuál es el ''valor de referencia'' que utiliza mgcv al trazar un término suave? Es obvio para un término paramétrico, pero no para una variable continua usada como término suave. Por supuesto, no importa a la hora de crear predicciones; sólo me interesa saber cómo funciona el trazado.

Por ejemplo

library( mgcv )

set.seed( 1 )
SimData <- data.frame( x = runif( 100, 0, 1 ) )
SimData$y <- SimData$x^2 + rnorm( 100, 0, 0.1 )

fit <- gam( y ~ s( x ), data = SimData )
plot( fit )

resulta en

enter image description here

y me gustaría saber cómo mgcv determina la escala en el eje vertical, es decir, cómo se determina el lugar de cero.

2voto

David J. Sokol Puntos 1730

0 es el valor del intercepto del modelo en este caso. En términos más generales, el valor en 0 es la suma de las contribuciones de todos los demás términos, de modo que la escala es el efecto aditivo al valor del predictor lineal en ese valor de la covariable.

library("mgcv")

set.seed(1)
SimData <- data.frame(x = runif(100, 0, 1))
SimData <- transform(SimData, y = x^2 + rnorm(100, 0, 0.1))

fit <- gam(y ~ s(x), data = SimData)

newdata <- data.frame(x = seq(0, 1, length = 100))
pred <- predict(fit, newdata = newdata, type = "terms")

head(pred)
attr(pred, "constant")

Considerando el ejemplo de código anterior tenemos

> head(pred)
        s(x)
1 -0.3705257
2 -0.3676520
3 -0.3647786
4 -0.3619106
5 -0.3590587
6 -0.3562354
> attr(pred, "constant")
(Intercept) 
  0.3372932

pred contiene las contribuciones de $s(x)$ a los valores predichos del modelo en los valores dados de $x$ . Los valores predichos del modelo son los valores en pred y el intercepto del modelo

head(data.frame(fit1 = drop(pred + attr(pred, "constant")),
                fit2 = predict(fit, newdata)))

> head(data.frame(fit1 = drop(pred + attr(pred, "constant")),
+                 fit2 = predict(fit, newdata)))
         fit1        fit2
1 -0.03323248 -0.03323248
2 -0.03035874 -0.03035874
3 -0.02748538 -0.02748538
4 -0.02461740 -0.02461740
5 -0.02176549 -0.02176549
6 -0.01894214 -0.01894214

mgcv en realidad no lo hace predict() al trazar. Simplemente evalúa los valores de la función base en los valores de $x$ y multiplica la matriz resultante por el vector de coeficientes de las funciones de base correspondientes.

bs <- PredictMat(fit$smooth[[1]], data = newdata)
head(data.frame(p1 = bs %*% coef(fit)[-1],
                p2 = drop(pred)))

Los valores en p1 aquí son las mismas que antes (contribuciones a los valores predichos), pero sólo hemos trabajado con esta covariable y no con todas las demás covariables de un modelo potencialmente más amplio. Esto es lo que se muestra en el gráfico.

Que el 0 aparezca donde aparece se debe a la restricción de suma a cero impuesta por razones de identificabilidad. Sin esta restricción (o una similar, pero otras tienen propiedades indeseables) se podría añadir un valor constante al intercepto del modelo y restar el mismo valor al efecto del suavizado y seguir obteniendo el mismo modelo. Por lo tanto, habría un número infinito de soluciones para el modelo. La restricción de la suma a cero evita este problema de identificabilidad. Y por lo tanto, si el efecto del suavizado tiene que sumar cero del rango de la covariable, 0 está en la media general de la respuesta en la escala del predictor lineal.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X