set.seed(1122)
n <- 55
S <- 60
T <- 50
s <- seq(0,1, l=S)
t <- seq(0,1, l=T)
df <- 10
B <- bs(s, df=df)
X <- t(B %*% matrix(rt(n*df, df=3), nrow=df))
beta.st <- outer(s,t, test2)
y <- (1/S*X)%*%beta.st
data <- list(y=y, X=X)
# set number of FPCs to true rank of process for this example:
m.pc <- pffr(y ~ c(1) + 0 + ffpc(X, yind=t, decomppars=list(npc=df)),
data=data, yind=t)
summary(m.pc)
m.ff <- pffr(y ~ c(1) + 0 + ff(X, yind=t), data=data, yind=t)
summary(m.ff)
# plot implied coefficient surfaces:
betatilde <- predict.gam(m.pc, newdata=data.frame(t.vec=t, X.PC1=1, X.PC2=1,
X.PC3=1, X.PC4=1, X.PC5=1, X.PC6=1, X.PC7=1, X.PC8=1, X.PC9=1,
X.PC10=1, X.PC10=1), type="terms")
layout(t(1:3))
persp(t, s, t(beta.st), theta=30, phi=40, main="Truth")
plot(m.ff, select=1, pers=TRUE, zlim=range(beta.st), theta=30, phi=40,
main="ff()")
# betatilde_k (t) = \int Phi_k(s) beta(s,t) ds \approx 1/S t(Phi_k) %*% beta(s,t)
# --> beta(s,t) = S * Phi %*% [betatilde_1(t) ... betatilde_K(t)]
persp(t, s, t(S * (m.pc$pffr$ffpc[[1]]$PCMat %*% t(betatilde))), zlim=range(beta.st),
theta=30, phi=40, main="ffpc()")Run the code above in your browser using DataLab