plrt.model {SCBmeanfd} | R Documentation |
Pseudo-Likelihood Ratio Test for Models of the Mean Function
Description
Implement the Pseudo-Likelihood Ratio Test (PLRT) of Azzalini and Bowman (1993) with functional data. The test is used to assess whether a mean function belongs to a given finite-dimensional function space.
Usage
plrt.model(x, y, model, verbose = FALSE)
Arguments
x |
a numeric vector of x data. |
y |
a matrix or data frame with functional observations (= curves) stored in rows. The number of columns of |
model |
an integer specifying the degree of a polynomial basis, or a data frame/matrix containing the basis functions stored in columns. In the latter case, the basis functions must be evaluated at |
verbose |
logical; if |
Value
the p value of the PLRT.
References
Azzalini, A. and Bowman, A. (1993). On the use of nonparametric regression for checking linear relationships. Journal of the Royal Statistical Society. Series B 55, 549-557.
See Also
Examples
## Example: Gaussian process with mean = linear function + bump
## and Onstein-Uhlenbeck covariance. The bump is high in the y
## direction and narrow in the x direction. The SCB and PLRT
## tests are compared.
# The departure from linearity in the mean function is strong
# in the supremum norm (SCB test) but mild in the euclidean norm
# (PLRT). With either n = 20 or n = 100 curves, the SCB test
# strongly rejects the incorrect linear model for the mean
# function while the PLRT retains it.
p <- 100 # number of observation points
x <- seq(0, 1, len = p)
mu <- -1 + 1.5 * x + 0.2 * dnorm(x, .6, .02)
plot(x, mu, type = "l")
R <- (.25)^2 * exp(20 * log(.9) * abs(outer(x,x,"-"))) # covariance
eigR <- eigen(R, symmetric = TRUE)
simR <- eigR$vectors %*% diag(sqrt(eigR$values))
n <- 20
set.seed(100)
y <- mu + simR %*% matrix(rnorm(n*p), p, n)
y <- t(y)
points(x, colMeans(y))
h <- cv.select(x, y, 1)
scb.model(x, y, 1, bandwidth = h) # p value: <1e-16
plrt.model(x, y, 1, verbose = TRUE) # p value: .442
n <- 100
y <- mu + simR %*% matrix(rnorm(n*p), p, n)
y <- t(y)
h <- cv.select(x, y, 1)
scb.model(x, y, 1, bandwidth = h) # p value: <1e-16
plrt.model(x, y, 1, verbose = TRUE) # p value: .456