J'ajuste quelques modèles additifs généralisés en utilisant le mgcv
package en R, et je veux tester entre deux modèles; si je peux supprimer un terme ou non. Cependant, j'obtiens des résultats contradictoires (pour autant que je sache).
Un modèle, m1
avec un terme lisse pour x
ajouté, semble donner un meilleur ajustement en termes de , AIC, explication de la déviance, et lors de la comparaison des modèles à l'aide d'un test F. Cependant, la signification du terme lisse n'est pas significative (ni lorsque j'ai ajouté au modèle une covariable linéaire, au lieu d'une spline).
Mon interprétation des tests de termes lisses est-elle correcte? Autant que j'ai pu comprendre la page d'aide, c'est que les tests sont approximatifs, mais il y a une assez grande différence ici.
Les sorties du modèle
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 ***
EDIT : modèle ajouté à partir des commentaires
> 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
, mais je suis encore plus incertain de la façon d'interpréter cela. Il en résulte un modèle avec des statistiques d'ajustement presque identiques (légèrement pires ) en termes de r2, aic, etc., mais la valeur de p pour le terme s (x) est maintenant beaucoup plus faible. Donc, si le paramètre ne diminue pas, ce qui change.
select = TRUE
?
mgcv::gam
fait une régression pénalisée. Lesselect = TRUE
termes définis et ensuite peuvent être supprimés du modèle lors de l'ajustement. Cependant, si votre objectif est la prédiction, je vous recommande d'utiliser des ensembles de données de formation et de test indépendants ou au moins une validation croisée.