Let us show how the
funcharts package works through an example with the dataset
air, which has been included from the R package
FRegSigCom and is used in the paper of Qi and Luo (2019).
NOTE: since the objective of this vignette is only to illustrate how the package works, in the following we will use only 5 basis functions and a fixed smoothing parameter to reduce the computational time.
We provide the
mfd class for multivariate functional data. It inherits from the
fd class but provides some additional features:
coefargument to be an array even when the number of functional observations and/or the number of functional variables are one
[that never drops dimensions, then it always returns a
mfdobject with three-dimensional array argument
coef; moreover it allows extracting observations/variables also by name
The first thing is to get the
mfd object from discrete data. We currently allow two types of input with the two functions:
get_mfd_data.frame: first input must be a data.frame in the long format, with:
argcolumn giving the argument (
idcolumn indicating the functional observation,
get_mfd_list: first input must be a list of matrices for the case all functional data are observed on the same grid, which:
In this example, the dataset
air is in the second format (list of matrices, with data observed on the same grid)
library(funcharts) data("air") <- names(air)[names(air) != "NO2"] fun_covariates <- get_mfd_list(air[fun_covariates], mfdobj_x grid = 1:24, n_basis = 5, lambda = 1e-2)
In order to perform the statistical process monitoring analysis, we divide the dataset into a phase I and a phase II dataset.
<- 1:300 rows1 <- 301:355 rows2 <- mfdobj_x[rows1] mfdobj_x1 <- mfdobj_x[rows2]mfdobj_x2
Now we extract the scalar response variable, i.e. the mean of
NO2 at each observation:
<- rowMeans(air$NO2) y <- y[rows1] y1 <- y[rows2]y2
We also provide plotting functions using ggplot2.
plot_mfd(mfdobj_x1[1:10, c("CO", "C6H6")])
This functions provides a layer
geom_mfd, which is basically a
geom_line that is added to
ggplot() to plot functional data. It also allows to plot the original raw data by adding the argument
type_mfd = "raw".
geom_mfd accepts the argument
data as input, which must be a data frame with two columns,
var, in order to use aesthetic mappings that allow for example to colour different functions according to some columns in this data frame.
<- data.frame(id = unique(mfdobj_x1$raw$id)) %>% dat mutate(id_greater_than_100 = as.numeric(id) > 100) ggplot() + geom_mfd(mapping = aes(col = id_greater_than_100), mfdobj = mfdobj_x1, data = dat, alpha = .2, lwd = .3)
mfd we provide a function
pca_mfd, which is a wrapper to
pca.fd. It returns multivariate functional principal component scores summed over variables (
fda::pca.fd returns an array of scores when providing a multivariate functional data object). Moreover, the eigenfunctions or multivariate functional principal components given in
harmonics argument are converted to the
mfd class. We also provide a plot function for the eigenfunctions (the argument
harm selects which components to plot).
<- pca_mfd(mfdobj_x1) pca plot_pca_mfd(pca, harm = 1:3)