Interpretação dos resultados do modelo gam

8

Estou ajustando alguns modelos aditivos generalizados usando o mgcvpacote 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 xadicionado, 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).Radj2

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
user2957945
fonte
mgcv::gamfaz regressão penalizada. O conjunto select = TRUEe 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.
Roland
Obrigado Roland. Eu adicionei 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.
user2957945
@ user2957945 você pode editar sua pergunta para incluir a saída do modelo usado select = TRUE?
Gavin Simpson
Olá @GavinSimpson, eu adicionei a saída do modelo, obrigado #
user2957945

Respostas:

2

tl; dr: AIC é preditivo, enquanto os valores de p são para inferência. Além disso, seu teste de significância pode simplesmente não ter poder.

s(x)=0

mgcv

x

eric_kernfeld
fonte
Obrigado. Na verdade, eu estava enganado no meu entendimento. O que eu deveria testar é o modelo com o s(x)termo e depois o modelo com x(em vez de não x. O significado do termo suave (ou não)) assume como padrão testar se uma curva suave é necessária em comparação com uma linear (em vez de omitir completamente)
Você pode usar o seguinte comando
Oooh, bom saber!
Eric_kernfeld