Tengo unos datos del curso del tiempo a los que me gustaría ajustar un gam
y tener una fácil interpretación, y con ello me refiero a obtener coefficient
estimaciones para cada uno de los spline
s.
Estos son mis datos:
df <- data.frame(y = c(0.15,0.17,0.07,0.17,0.01,0.15,0.18,0.04,-0.06,-0.08,0,0.03,-0.27,-0.93,0.04,0.12,0.08,0.15,0.04,0.15,0.03,0.09,0.11,0.13,-0.11,-0.32,-0.7,-0.78,0.07,0.04,0.06,0.12,-0.15,0.05,-0.08,0.14,-0.02,-0.14,-0.24,-0.32,-0.78,-0.81,-0.04,-0.25,-0.09,0.02,-0.13,-0.2,-0.04,0,0.02,-0.05,-0.19,-0.37,-0.57,-0.81),
log2.time = rep(c(-1, 0, 1, 1.58,2, 2.58, 3, 3.32, 3.58, 4.17, 4.58, 5.58, 6.17, 7.39),4))
Pensé en usar el mgcv
R
package
utilizando este modelo:
fit <- mgcv::gam(y ~ s(log2.time), data = df, method = "REML")
Utilizando summary(fit)
me sale:
> summary(fit)
Family: gaussian
Link function: identity
Formula:
y ~ s(log2.time)
Parametric coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -0.10893 0.01681 -6.479 3.65e-08 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Approximate significance of smooth terms:
edf Ref.df F p-value
s(log2.time) 4.101 5.036 46.36 <2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
R-sq.(adj) = 0.809 Deviance explained = 82.3%
-REML = -27.673 Scale est. = 0.015829 n = 56
Así que, en general, el log2.time
El término de suavización es significativamente diferente de cero. Pero como se ha dicho anteriormente, me gustaría obtener un coefficient
para cada uno de los spline
s, junto con sus errores estándar y una medida de si son significativamente diferentes de cero.
¿Debería usar cubic splines
para este fin, con este modelo:
fit <- mgcv::gam(y ~ s(log2.time,bs='cr'), data = df, method = "REML")
¿Y puede el spline
coefficient
se obtienen de la siguiente manera:
spline.coefs <- coef(fit)[-1]
spline.knots <- fit$smooth[[1]]$xp
for(s in 2:length(spline.knots)){
spline.coefs[s-1] <- spline.coefs[s-1]/(spline.knots[s]-spline.knots[s-1])
}
Y entonces el coefficient
los errores estándar sean:
spline.coefs.se <- sqrt(diag(vcov(fit, unconditional = TRUE)))[-1]
Y finalmente, ¿pueden los valores p para el spline coefficient
¿se pueden obtener estimaciones?