Kronecker Product Bspline Basis

Share:

Description

Generate the B-spline basis matrix for a polynomial spline, applicable for both univariate basis and bivariate basis systems.

Usage

1
2
kpbb(tp, cp = NULL, nknots.tp, nknots.cp = NULL, 
     sub.case = 2, degree.poly = 3)

Arguments

tp

timepoint vector in the time direction; must be sorted

cp

covariate vector in the covariate direction; must be sorted

nknots.tp

number of knots for the time direction; See 'Details'

nknots.cp

number of knots for the covariate direction; See 'Details'

sub.case

indicator for univariate (sub.case = 1) or bivariate (sub.case = 2)

degree.poly

degree of polynomials for B-spline basis system; default is 3, i.e. cubis splines

Details

kpbb is built based on the function bs. For the time direction, the generated basis matrix has the dimension length(tp) by nknots.tp + degree.poly + 1, regardless whehter the number of knots is negative or not. When sub.case = 2, the generated basis matrix is the kronecker product of the two basis matrices.

Value

A basis matrix, with attributes which are for the future use of predict.kpbb.

References

[1]. Meng Li, Ana-Maria Staicu and Howard D. Bondell (2013), Incorporating Covariates in Skewed Functional Data Models. http://www.stat.ncsu.edu/information/library/papers/mimeo2654_Li.pdf.

See Also

bs, predict.kpbb, data.simulation

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
data(data.simulation) # load benchmark data 
y <- DST$obs # matrix of observation
# generate bivariate basis using 3 knots for each direction
basis <- kpbb(DST$tp, DST$cp, nknots.tp = 3, nknots.cp = 3)
# linear regression
lm.fit <- lm(as.vector(y) ~ basis - 1)
y.fit <- matrix(fitted(lm.fit), nrow = 100, ncol = 80)

# visualize the data and fitted surface
par(mfrow = c(1,2))
persp(DST$cp, DST$tp, y, theta=60, phi=15,
      ticktype = "detailed", col="lightblue", 
      xlab = "covariate", ylab = "time",
      zlab="data", main="data surface")
persp(DST$cp, DST$tp, y.fit, theta=60, phi=15,
      ticktype = "detailed", col="lightblue", 
      xlab = "covariate", ylab = "time",
      zlab="data", main="fitted surface via lm")