Estou ajustando alguns modelos aditivos generalizados usando o mgcv
pacote em R e quero testar entre dois modelos; se posso remover um termo ou não. Estou, no entanto, obtendo resultados conflitantes (até onde sei).
Um modelo, m1
, com um termo suave para x
adicionado, parece dar um melhor ajuste em termos de , a AIC, desvio explicado, e quando se compara os modelos utilizando um teste de F. No entanto, a significância do termo suave não é significativa (nem é quando adicionei ao modelo uma covariável linear, em vez de uma spline).
Minha interpretação dos testes de termos suaves está correta? Pelo que pude entender a página de ajuda, os testes são aproximados, mas há uma grande diferença aqui.
O modelo gera
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 : modelo adicionado a partir de comentários
> 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
, mas estou ainda mais insegura de como interpretar isso. Isso resulta em um modelo com estatísticas de ajuste quase o mesmo (um pouco pior ) em termos de r2, aic etc., mas o valor de p para o termo s (x) agora é muito menor. Portanto, se o parâmetro não está diminuindo, o que está mudando.
select = TRUE
?
mgcv::gam
faz regressão penalizada. O conjuntoselect = TRUE
e os termos podem ser removidos do modelo durante o ajuste. No entanto, se seu objetivo for previsão, recomendo o uso de conjuntos de dados de treinamento e teste independentes ou, pelo menos, a validação cruzada.