Goodness-of fit test for the functional linear model using random projections
Tests the composite null hypothesis of a Functional Linear Model with scalar response (FLM),
H_0: Y = <X, β> + ε vs H_1: Y != <X, β> + ε.
If β=β_0 is provided, then the simple hypothesis H_0: Y = <X, β_0> + ε is tested. The way of testing the null hypothesis is via a norm (Cramer-von Mises or Kolmogorov-Smirnov) in the empirical process indexed by the projections.
No NA's are allowed neither in the functional covariate nor in the scalar response.
rp.flm.test( X.fdata, Y, beta0.fdata = NULL, B = 1000, n.proj = 10, est.method = "pc", p = NULL, p.criterion = "SICc", pmax = 20, type.basis = "bspline", projs = 0.95, verbose = TRUE, same.rwild = FALSE, ... )
X.fdata |
functional observations in the class
|
Y |
scalar responses for the FLM. Must be a vector with the same number
of elements as functions are in |
beta0.fdata |
functional parameter for the simple null hypothesis, in
the |
B |
number of bootstrap replicates to calibrate the distribution of the test statistic. |
n.proj |
vector with the number of projections to consider. |
est.method |
estimation method for β, only used in the composite case. There are three methods:
|
p |
number of elements for the basis representation of
|
p.criterion |
for |
pmax |
maximum size of the basis expansion to consider in when using
|
type.basis |
type of basis if |
projs |
a |
verbose |
whether to show or not information about the testing progress. |
same.rwild |
wether to employ the same wild bootstrap residuals for different projections or not. |
... |
further arguments passed to create.basis (not
|
An object with class "htest"
whose underlying structure is a
list containing the following components:
list("p.values.fdr") a matrix of size c(n.proj, 2)
, containing
in each row the FDR p-values of the CvM and KS tests up to that projection.
list("proj.statistics") a matrix of size c(max(n.proj), 2)
with the value of the test statistic on each projection.
list("boot.proj.statistics") an array of size c(max(n.proj), 2,
B)
with the values of the bootstrap test statistics for each projection.
list("proj.p.values") a matrix of size c(max(n.proj), 2)
list("method") information about the test performed and the kind of estimation performed.
list("B") number of bootstrap replicates used.
list("n.proj") number of projections specified
list("projs") random directions employed to project X.fdata
.
list("type.basis") type of basis for est.method = "basis"
.
list("beta.est") estimated functional parameter \hat
β in the composite hypothesis. For the simple hypothesis, beta0.fdata
.
list("p") number of basis elements considered for estimation of β.
list("p.criterion") criterion employed for selecting p
.
list("data.name") the character string "Y = <X, b> + e"
Eduardo Garcia-Portugues (edgarcia@est-econ.uc3m.es) and Manuel Febrero-Bande (manuel.febrero@usc.es).
Cuesta-Albertos, J.A., Garcia-Portugues, E., Febrero-Bande, M. and Gonzalez-Manteiga, W. (2017). Goodness-of-fit tests for the functional linear model based on randomly projected empirical processes. arXiv:1701.08363. https://arxiv.org/abs/1701.08363
Garcia-Portugues, E., Gonzalez-Manteiga, W. and Febrero-Bande, M. (2014). A goodness-of-fit test for the functional linear model with scalar response. Journal of Computational and Graphical Statistics, 23(3), 761–778. http://dx.doi.org/10.1080/10618600.2013.812519
## Not run: # Simulated example set.seed(345678) t <- seq(0, 1, l = 101) n <- 100 X <- r.ou(n = n, t = t, alpha = 2, sigma = 0.5) beta0 <- fdata(mdata = cos(2 * pi * t) - (t - 0.5)^2, argvals = t, rangeval = c(0,1)) Y <- inprod.fdata(X, beta0) + rnorm(n, sd = 0.1) # Test all cases rp.flm.test(X.fdata = X, Y = Y, est.method = "pc") rp.flm.test(X.fdata = X, Y = Y, est.method = "pls") rp.flm.test(X.fdata = X, Y = Y, est.method = "basis", p.criterion = fda.usc::GCV.S) rp.flm.test(X.fdata = X, Y = Y, est.method = "pc", p = 5) rp.flm.test(X.fdata = X, Y = Y, est.method = "pls", p = 5) rp.flm.test(X.fdata = X, Y = Y, est.method = "basis", p = 5) rp.flm.test(X.fdata = X, Y = Y, beta0.fdata = beta0) # Composite hypothesis: do not reject FLM rp.test <- rp.flm.test(X.fdata = X, Y = Y, est.method = "pc") rp.test$p.values.fdr pcvm.test <- flm.test(X.fdata = X, Y = Y, est.method = "pc", B = 1e3, plot.it = FALSE) pcvm.test # Estimation of beta par(mfrow = c(1, 3)) plot(X, main = "X") plot(beta0, main = "beta") lines(rp.test$beta.est, col = 2) lines(pcvm.test$beta.est, col = 3) plot(density(Y), main = "Density of Y", xlab = "Y", ylab = "Density") rug(Y) # Simple hypothesis: do not reject beta = beta0 rp.flm.test(X.fdata = X, Y = Y, beta0.fdata = beta0)$p.values.fdr flm.test(X.fdata = X, Y = Y, beta0.fdata = beta0, B = 1e3, plot.it = FALSE) # Simple hypothesis: reject beta = beta0^2 rp.flm.test(X.fdata = X, Y = Y, beta0.fdata = beta0^2)$p.values.fdr flm.test(X.fdata = X, Y = Y, beta0.fdata = beta0^2, B = 1e3, plot.it = FALSE) # Tecator dataset # Load data data(tecator) absorp <- tecator$absorp.fdata ind <- 1:129 # or ind <- 1:215 x <- absorp[ind, ] y <- tecator$y$Fat[ind] # Composite hypothesis rp.tecat <- rp.flm.test(X.fdata = x, Y = y, est.method = "pc") pcvm.tecat <- flm.test(X.fdata = x, Y = y, est.method = "pc", B = 1e3, plot.it = FALSE) rp.tecat$p.values.fdr[c(5, 10), ] pcvm.tecat # Simple hypothesis zero <- fdata(mdata = rep(0, length(x$argvals)), argvals = x$argvals, rangeval = x$rangeval) rp.flm.test(X.fdata = x, Y = y, beta0.fdata = zero) flm.test(X.fdata = x, Y = y, beta0.fdata = zero, B = 1e3) # With derivatives rp.tecat <- rp.flm.test(X.fdata = fdata.deriv(x, 1), Y = y, est.method = "pc") rp.tecat$p.values.fdr rp.tecat <- rp.flm.test(X.fdata = fdata.deriv(x, 2), Y = y, est.method = "pc") rp.tecat$p.values.fdr # AEMET dataset # Load data data(aemet) wind.speed <- apply(aemet$wind.speed$data, 1, mean) temp <- aemet$temp # Remove the 5% of the curves with less depth (i.e. 4 curves) par(mfrow = c(1, 1)) res.FM <- depth.FM(temp, draw = TRUE) qu <- quantile(res.FM$dep, prob = 0.05) l <- which(res.FM$dep <= qu) lines(aemet$temp[l], col = 3) # Data without outliers wind.speed <- wind.speed[-l] temp <- temp[-l] # Composite hypothesis rp.aemet <- rp.flm.test(X.fdata = temp, Y = wind.speed, est.method = "pc") pcvm.aemet <- flm.test(X.fdata = temp, Y = wind.speed, B = 1e3, est.method = "pc", plot.it = FALSE) rp.aemet$p.values.fdr apply(rp.aemet$p.values.fdr, 2, range) pcvm.aemet # Simple hypothesis zero <- fdata(mdata = rep(0, length(temp$argvals)), argvals = temp$argvals, rangeval = temp$rangeval) flm.test(X.fdata = temp, Y = wind.speed, beta0.fdata = zero, B = 1e3, plot.it = FALSE) rp.flm.test(X.fdata = temp, Y = wind.speed, beta0.fdata = zero) ## End(Not run)
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.