Ich passe einige verallgemeinerte additive Modelle mit dem mgcv
Paket in R an und möchte zwischen zwei Modellen testen. ob ich einen Begriff entfernen kann oder nicht. Ich bekomme jedoch widersprüchliche Ergebnisse (soweit ich das beurteilen kann).
Ein Modell m1
mit einem glatten Begriff für x
hinzugefügt scheint eine bessere Anpassung in Bezug auf , AIC, erklärte Abweichung und beim Vergleich der Modelle unter Verwendung eines F-Tests zu ergeben. Die Bedeutung des glatten Terms ist jedoch nicht signifikant (und auch nicht, wenn ich dem Modell eine lineare Kovariate anstelle eines Splines hinzufüge).
Ist meine Interpretation der Tests mit glatten Begriffen korrekt? Soweit ich die Hilfeseite verstehen konnte, waren die Tests ungefähr, aber hier gibt es einen ziemlich großen Unterschied.
Das Modell gibt aus
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 ***
BEARBEITEN : Modell aus Kommentaren hinzugefügt
> 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
, bin mir aber noch unsicherer, wie ich das interpretieren soll. Dies führt zu einem Modell mit fast gleichen (etwas schlechteren ) Anpassungsstatistiken in Bezug auf r2, aic usw., aber der p-Wert für den s (x) -Term ist jetzt viel niedriger. Wenn der Parameter also nicht verkleinert wird, ändert sich was.
select = TRUE
?
mgcv::gam
bestraft die Regression. Festlegenselect = TRUE
und dann Begriffe können während der Anpassung aus dem Modell entfernt werden. Wenn Ihr Ziel jedoch die Vorhersage ist, würde ich empfehlen, unabhängige Trainings- und Testdatensätze oder zumindest eine Kreuzvalidierung zu verwenden.