After the decomposition is obtained and a grouping is selected (see the Functional Singular Spectrum Analysis: Functional Time Series Decomposition webpage for more information) the user may choose to perform reconstruction of the FTS. The freconstruct function takes two arguments with the first being of class fssa and the second argument is the selected grouping as expressed in a list. The freconstruct function returns a list object that has the same length as the grouping argument where each entry is an funts object (see the Functional Singular Spectrum Analysis: Functional Time Series Objects and Visualization webpage for more information) built from a specified group. The following code executes the reconstruction process applied to the decomposition of the call center dataset. As a reminder we have a suggested grouping of the first eigentriple by itself, two with three, four with five, and six with seven for the call center dataset.
## Call center data ##
gr_C <- list(1, 2:3, 4:5, 6:7, 1:7)
Q_C <- freconstruct(U_C, gr_C)
The following plots show the individual reconstructed signals of the call center funts as according to the specified groupings as well as the original FTS and overall extracted signal (grouping of one through seven).
## Call center data ##
plotly_funts(Q_C[[1]], main = "Call Center Mean Component",xlab = "Time (6 minutes aggregated)",
ylab = "Sqrt of Call Numbers",type="line",xticklabels = list(c("00:00","06:00","12:00","18:00","24:00")),xticklocs =
list(c(1,60,120,180,240)))
plotly_funts(Q_C[[2]], main = "Call Center First Periodic Component",xlab = "Time (6 minutes aggregated)",
ylab = "Sqrt of Call Numbers",type="line",xticklabels = list(c("00:00","06:00","12:00","18:00","24:00")),xticklocs =
list(c(1,60,120,180,240)))
plotly_funts(Q_C[[3]], main = "Call Center Second Periodic Component",xlab = "Time (6 minutes aggregated)",
ylab = "Sqrt of Call Numbers",type="line",xticklabels = list(c("00:00","06:00","12:00","18:00","24:00")),xticklocs =
list(c(1,60,120,180,240)))
plotly_funts(Q_C[[4]], main = "Call Center Third Periodic Component",xlab = "Time (6 minutes aggregated)",
ylab = "Sqrt of Call Numbers",type="line",xticklabels = list(c("00:00","06:00","12:00","18:00","24:00")),xticklocs =
list(c(1,60,120,180,240)))
plotly_funts(Y_C, main = c("Call Center Data Line Plot"),xlab = "Time (6 minutes aggregated)",
ylab = "Sqrt of Call Numbers",type="line",xticklabels = list(c("00:00","06:00","12:00","18:00","24:00")),xticklocs =
list(c(1,60,120,180,240)))
plotly_funts(Q_C[[5]], main = "Call Center Extracted Signal",xlab = "Time (6 minutes aggregated)",
ylab = "Sqrt of Call Numbers",type="line",xticklabels = list(c("00:00","06:00","12:00","18:00","24:00")),xticklocs =
list(c(1,60,120,180,240)))
In the previous plots, the user can investigate the different modes of variation as well as the differences between the original FTS and the extracted signal. We find that the extracted signal seems to do a good job of capturing the mean and periodic behaviors of the call center data.
Now we run the reconstruction process on the funts formed from the Montana data. The suggested grouping obtained from the exploratory plots was one by itself, two with three, and four with five.
## NDVI images and intraday temperature curves from Saint Mary, Montana, USA ##
gr_M <- list(1, 2:3, 4:5, 1:5)
Q_M <- freconstruct(U_M, gr_M)
Now we compare the original multivariate FTS with the reconstructed signal (the group comprised of eigentriples one through five) in the following plots.
## NDVI images and intraday temperature curves from Saint Mary, Montana, USA ##
plotly_funts(Y_M[1:100],
xlab = c("Time", "Longitude"),
ylab = c("Normalized Temperature (\u00B0C)", "Latitude"),
zlab = c("", "NDVI"),
main = c("Temperature Curves", "NDVI Images"),
color_palette = "RdYlGn",
xticklabels = list(
c("00:00", "06:00", "12:00", "18:00", "24:00"),
c("113.40\u00B0 W", "113.30\u00B0 W")
),
xticklocs = list(c(1, 6, 12, 18, 24), c(1, 33)),
yticklabels = list(NA, c("48.70\u00B0 N", "48.77\u00B0 N")),
yticklocs = list(NA, c(1, 33)))
plotly_funts(Q_M[[4]][1:100],
xlab = c("Time", "Longitude"),
ylab = c("Normalized Temperature (\u00B0C)", "Latitude"),
zlab = c("", "NDVI"),
main = c("Temperature Curves", "NDVI Images"),
color_palette = "RdYlGn",
xticklabels = list(
c("00:00", "06:00", "12:00", "18:00", "24:00"),
c("113.40\u00B0 W", "113.30\u00B0 W")
),
xticklocs = list(c(1, 6, 12, 18, 24), c(1, 33)),
yticklabels = list(NA, c("48.70\u00B0 N", "48.77\u00B0 N")),
yticklocs = list(NA, c(1, 33)))