Estoy ajustando algunos modelos aditivos generalizados usando el mgcv
paquete en R, y quiero probar entre dos modelos; si puedo eliminar un término o no. Sin embargo, estoy obteniendo resultados contradictorios (por lo que puedo decir).
Un modelo, m1
con un término suave para x
agregar, parece dar un mejor ajuste en términos de , AIC, la desviación explicada, y al comparar los modelos usando una prueba F. Sin embargo, la importancia del término suave no es significativa (ni lo es cuando agregué al modelo como una covariable lineal, en lugar de una spline).
¿Es correcta mi interpretación de las pruebas de términos suaves? Por mucho que pude entender la página de ayuda, fue que las pruebas son aproximadas, pero aquí hay una gran diferencia.
El modelo sale
m1 <- gam(out ~ s(x) + s(y) + s(z), data=dat)
> summary(m1)
#
# Family: gaussian
# Link function: identity
#
# Formula:
# out ~ s(x) + s(y) + s(z)
#
# Parametric coefficients:
# Estimate Std. Error t value Pr(>|t|)
# (Intercept) -7.502e-16 1.209e-01 0 1
#
# Approximate significance of smooth terms:
# edf Ref.df F p-value
# s(x) 4.005 4.716 1.810 0.136
# s(y) 8.799 8.951 4.032 4.01e-05 ***
# s(z) 7.612 8.526 5.649 4.83e-07 ***
# ---
# Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#
# R-sq.(adj) = 0.213 Deviance explained = 24.8%
# GCV = 6.9741 Scale est. = 6.6459 n = 455
> AIC(m1)
#[1] 2175.898
> m2 <- gam(out ~ s(y) + s(z), data=dat)
> summary(m2)
#
# Family: gaussian
# Link function: identity
#
# Formula:
# out ~ s(y) + s(z)
#
# Parametric coefficients:
# Estimate Std. Error t value Pr(>|t|)
# (Intercept) 1.705e-15 1.228e-01 0 1
#
# Approximate significance of smooth terms:
# edf Ref.df F p-value
# s(y) 8.726 8.968 5.137 6.78e-07 ***
# s(z) 8.110 8.793 5.827 1.55e-07 ***
# ---
# Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#
# R-sq.(adj) = 0.187 Deviance explained = 21.7%
# GCV = 7.144 Scale est. = 6.8639 n = 455
> AIC(m2)
#[1] 2187.168
> anova(m1, m2, test="F")
# Analysis of Deviance Table
#
# Model 1: out ~ s(x) + s(y) + s(z)
# Model 2: out ~ s(y) + s(z)
# Resid. Df Resid. Dev Df Deviance F Pr(>F)
# 1 433.58 2881.6
# 2 437.16 3000.7 -3.5791 -119.1 5.0073 0.0009864 ***
EDITAR : modelo agregado de los comentarios
> summary(m3 <- gam(out ~ s(x) + s(y) + s(z), data=dat, select=TRUE))
#Family: gaussian
#Link function: identity
#Formula:
#out ~ s(x) + s(y) + s(z)
#Parametric coefficients:
# Estimate Std. Error t value Pr(>|t|)
#(Intercept) -1.588e-14 1.209e-01 0 1
#Approximate significance of smooth terms:
# edf Ref.df F p-value
#s(x) 4.424 9 1.750 0.00161 **
#s(y) 8.260 9 3.623 5.56e-06 ***
#s(z) 7.150 9 5.329 4.19e-09 ***
#---
#Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#R-sq.(adj) = 0.212 Deviance explained = 24.7%
#GCV = 6.9694 Scale est. = 6.6502 n = 455
select
, pero estoy aún más inseguro de cómo interpretar esto. El resultado es un modelo con estadísticas de ajuste casi iguales (un poco peor ) en términos de r2, aic, etc., pero el valor p para el término s (x) ahora es mucho más bajo. Entonces, si el parámetro no se está reduciendo, lo que está cambiando.
select = TRUE
?
mgcv::gam
hace regresión penalizada. Establecerselect = TRUE
y luego los términos se pueden eliminar del modelo durante el ajuste. Sin embargo, si su objetivo es la predicción, recomendaría usar conjuntos de datos de prueba y capacitación independientes o al menos una validación cruzada.