b=0 b=0.2 b=0.5
N = 20 0.40 0.39 0.40
N = 40 0.39 0.40 0.39
N = 80 0.36 0.38 0.37
N = 100 0.37 0.36 0.36
N = 200 0.34 0.34 0.34
N = 500 0.29 0.29 0.29
Misure ripetute per soggetto, l’età ha ragionevolmente ruolo non-lineare
library(mgcv)
gamm(score ~ s(Age, by=area), random=list(ID=~1), data=d)
Misure ripetute per soggetto, il tempo potrebbe avere effetto non-lineare
gamm(score ~ s(Age, by=area) + s(Year, by=area), random=list(ID=~1), data=d)
s()
defines smooth terms within gam formula
gam(y ~ s(x), data=df)
te()
and ti()
define tensor product smooth or (only) interaction on in gam formula
gam(y ~ te(x, z), data=df)
gam(y ~ ti(x, z), data=df)
t2()
define alternative (to t2()
) tensor product smooths in gam formula
gam(y ~ t2(x, z), data=df)
Smoother s()
has default argument bs = "tp"
(thin plate regression spline), but there are alternative options:
"cr"
: cubic regression spline
"cs"
: cubic regression spline with shrinkage
"cc"
: periodic/cyclic cubic regression spline
"ts"
: for t.p.r.s. with extra shrinkage
"ad"
: adaptive smooth
"ps"
: penalized splines
fit = gam(y ~ s(x), data=df)
`
fit = gam(y ~ s(x, bs="cs"), data=df)
fit = gam(y ~ s(x, bs="ps"), data=df)
fit = gam(y ~ s(x, bs="ad"), data=df)
Due parametri sono regolarti di default da gam
ma sembrano particolarmente di interesse per regolare underfitting e overfitting:
k
(basis dimension): flessibilità dello smoother; numero di basis function (?) (alto overfitta?)
10
sp
(smoothing parameter \(\lambda\)): parametro di penalizzazione della complessità (basso overfitta)
gcv.ubre
(Generalized Cross-Validation Un-Biased Risk Estimator)gam(y ~ s(x, k=3), data=df)
# basso kgam(y ~ s(x, k=100), data=df)
# alto kk
gam(y ~ s(x, sp=50), data=df)
# alto sp (\(\lambda\))gam(y ~ s(x, sp=0), data=df)
# basso sp (\(\lambda\))sp
(\(\lambda\))sp
(\(\lambda\)) è automaticamente settato per minimizzare il Generalized Cross-Validation Un-Biased Risk Estimatorgam
lo prediligagam(y ~ s(x), data=df)
gam
lo prediligagam
lo prediligaQuanto spesso overfitta? Risultati su 10,000 iterazioni per condizione
Overfitting modesto (\(\lambda < 10\))
b=0 b=0.2 b=0.5
N = 20 0.40 0.39 0.40
N = 40 0.39 0.40 0.39
N = 80 0.36 0.38 0.37
N = 100 0.37 0.36 0.36
N = 200 0.34 0.34 0.34
N = 500 0.29 0.29 0.29
Overfitting spinto (\(\lambda < 1\))
b=0 b=0.2 b=0.5
N = 20 0.25 0.26 0.26
N = 40 0.23 0.24 0.23
N = 80 0.21 0.21 0.21
N = 100 0.20 0.20 0.20
N = 200 0.18 0.17 0.18
N = 500 0.14 0.14 0.14
(L’overfitting è tanto maggiore quanto più piccolo è il campione)
sp
(\(\lambda\)) scelto 🤔L’effetto vero è lineare (N = 40, b = 0.2), dovrebbe essere sp
\((\lambda) → \infty\)
Casi e controlli in un disturbo del neurosviluppo sono popolazioni separate o parte di un unico continuum dimensionale?
Abbiamo casi e controlli che variano sia sul punteggio della sintomatologia clinica che su una rilevante dimensione correlata (GCC). La continuità delle relazioni tra le variabili implicate è segnale che i soggetti si collocano lungo un unico continuum vs siano categorie separate.
Questo “approccio” è alla base della taxometric analysis, che però qui è inapplicabile: il base rate del disturbo è troppo basso (<5%) per avere un campione sufficiente senza artificial admixture (canali di reclutamento separati per casi e controlli, che rendono inapplicabile la taxometric analysis).
L’indagine diretta della continuità delle relazioni, però, resta possibile. A causa delle proprietà psicometriche degli strumenti, anticipiamo già che le relazioni, pur continue, potrebbero NON essere lineari.
Appropriato per i gam?
gam(GCC ~ s(TraitA, by=Gruppo), data=df)
# AIC = 3281.452
gam(GCC ~ s(TraitA), data=df)
# AIC = 3280.403
Scatter plot, caso B
gam(GCC ~ s(TraitB, sp=0.2, by=Gruppo), data=df)
# AIC = 3011.457
gam(GCC ~ s(TraitB, by=Gruppo), data=df)
# AIC = 3003.582
gam(GCC ~ s(TraitB), data=df)
# AIC = 3007.55
gam(GCC ~ te(TraitB, TraitA, by=Gruppo), data=df)
# AIC = 4140.410
gam(GCC ~ te(TraitB, TraitA), data=df)
# AIC = 4136.337