pffr-constructor for functional principal component-based functional random intercepts.
pffr-constructor for functional principal component-based functional random intercepts.
pcre(id, efunctions, evalues, yind, ...)
id |
grouping variable a factor |
efunctions |
matrix of eigenfunction evaluations on gridpoints |
evalues |
eigenvalues associated with |
yind |
vector of gridpoints on which |
... |
not used |
a list used internally for constructing an appropriate call to mgcv::gam
Fits functional random intercepts B_i(t) for a grouping variable id
using as a basis the functions φ_m(t) in efunctions
with variances λ_m in evalues
:
B_i(t) \approx ∑_m^M φ_m(t)δ_{im} with
independent δ_{im} \sim N(0, σ^2λ_m), where σ^2
is (usually) estimated and controls the overall contribution of the B_i(t) while the relative importance
of the M basisfunctions is controlled by the supplied variances lambda_m
.
Can be used to model smooth residuals if id
is simply an index of observations.
Differing from random effects in mgcv
, these effects are estimated under a "sum-to-zero-for-each-t"-constraint.
efunctions
and evalues
are typically eigenfunctions and eigenvalues of an estimated
covariance operator for the functional process to be modeled, i.e., they are
a functional principal components basis.
Fabian Scheipl
## Not run: residualfunction <- function(t){ #generate quintic polynomial error functions drop(poly(t, 5)%*%rnorm(5, sd=sqrt(2:6))) } # generate data Y(t) = mu(t) + E(t) + white noise set.seed(1122) n <- 50 T <- 30 t <- seq(0,1, l=T) # E(t): smooth residual functions E <- t(replicate(n, residualfunction(t))) int <- matrix(scale(3*dnorm(t, m=.5, sd=.5) - dbeta(t, 5, 2)), byrow=T, n, T) Y <- int + E + matrix(.2*rnorm(n*T), n, T) data <- data.frame(Y=I(Y)) # fit model under independence assumption: summary(m0 <- pffr(Y ~ 1, yind=t, data=data)) # get first 5 eigenfunctions of residual covariance # (i.e. first 5 functional PCs of empirical residual process) Ehat <- resid(m0) fpcE <- fpca.sc(Ehat, npc=5) efunctions <- fpcE$efunctions evalues <- fpcE$evalues data$id <- factor(1:nrow(data)) # refit model with fpc-based residuals m1 <- pffr(Y ~ 1 + pcre(id=id, efunctions=efunctions, evalues=evalues, yind=t), yind=t, data=data) t1 <- predict(m1, type="terms") summary(m1) #compare squared errors mean((int-fitted(m0))^2) mean((int-t1[[1]])^2) mean((E-t1[[2]])^2) # compare fitted & true smooth residuals and fitted intercept functions: layout(t(matrix(1:4,2,2))) matplot(t(E), lty=1, type="l", ylim=range(E, t1[[2]])) matplot(t(t1[[2]]), lty=1, type="l", ylim=range(E, t1[[2]])) plot(m1, select=1, main="m1", ylim=range(Y)) lines(t, int[1,], col=rgb(1,0,0,.5)) plot(m0, select=1, main="m0", ylim=range(Y)) lines(t, int[1,], col=rgb(1,0,0,.5)) ## End(Not run)
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.