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
la source
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.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
?Réponses:
tl; dr: AIC est prédictif tandis que les valeurs p sont pour l'inférence. De plus, votre test de signification peut simplement manquer de puissance.
Une explication possible est que l'hypothèse nulle est fausse, mais votre puissance est faible et votre valeur p n'est donc pas très impressionnante. Ce n'est pas parce qu'un effet est présent qu'il est facile à détecter. C'est pourquoi les essais cliniques doivent être conçus avec une certaine taille d'effet à l'esprit (généralement le MCID ).s(x)=0
Une autre façon de résoudre ce problème: différentes mesures devraient donner des résultats différents car elles codent des priorités différentes. L'AIC est un critère prédictif, et il se comporte de manière similaire à la validation croisée. Il peut en résulter des modèles trop complexes qui présentent de bonnes performances prédictives. En revanche,∗
mgcv
les valeurs de p sont utilisées pour déterminer la présence ou l'absence d'un effet donné , et la performance prédictive est une préoccupation secondaire.la source
s(x)
terme, puis le modèle avecx
(plutôt que nonx
. L'importance du terme lisse (ou autre) par défaut consiste à tester si une courbe lisse est nécessaire par rapport à une linéaire (plutôt que de l'omettre complètement)