Environmental time-series signal processing: Contribution isolation based on background subtraction, deseasonalisation and/or deweathering.
isolateContribution(
data,
pollutant,
background = NULL,
deseason = TRUE,
deweather = TRUE,
method = 2,
add.term = NULL,
formula = NULL,
use.bam = FALSE,
output = "mean",
...
)isolateContribution returns a vector of
predictions of the pollutant time-series after
the requested signal isolation.
Data source, typically data.frame
(or similar), containing all time-series to be used when
applying signal processing.
The column name of the data
time-series to be signal processed.
(optional) if supplied, the background time-series to use as a background correction. See below.
logical or character vector, if
TRUE (default), the pollutant is
deseasonalised using day.hour and year.day
frequency terms, all calculate from the data
time stamp, assumed to be date in data.
Other options: FALSE to turn off
deseasonalisation; or a character vector of frequency
terms if user-defining. See below.
logical or character vector, if
TRUE (default), the data is deweathered using
wind speed and direction, assumed to be ws
and wd in data). Other options: FALSE
to turn off deweathering; or a character vector of
data column names if user-defining. See below.
numeric, contribution isolation method (default 2). See Note.
extra terms to add to the contribution isolation model; ignore for now (in development).
(optional) Signal isolate model formula;
this allows user to set the signal isolation model formula
directly, but means function arguments background,
deseason and deweather will be ignored.
(logical) If TRUE, the bam is used instead of
standard gam to build the model.
output options; currently, 'mean', 'model',
and 'all'; but please note these are in development and may be
subject to change.
other arguments; ignore for now (in development)
Karl Ropkins
isolateContribution estimates and
subtracts pollutant variance associated with
factors that may hinder break-point/segment analysis:
Background Correction If applied, this fits
the supplied background time-series as a
spline term: s(background).
Seasonality If applied, this fits regular
frequency terms, e.g. day.hour, year.day,
as spline terms, default TRUE is equivalent to
s(day.hour) and s(year.day). All terms are
calculated from date column in data.
Weather If applied, this fits time-series of
identified meteorological measurements, e.g. wind speed
and direction (ws and wd in data).
If both ws and wd are present these are
fitted as a tensor term te(ws, wd). Other
deweathering terms, if included, are fitted
as spline term s(term). The default TRUE
is equivalent to te(ws, wd).
Using the supplied arguments, it builds a signal
(mgcv) GAM model, calculates,
and returns the mean-centred residuals as an
estimate of the isolated local contribution.
Regarding mgcv GAM fitting methods, see
Wood (2017) for general introduction and package
documentation regarding coding (mgcv):
Wood, S.N. (2017) Generalized Additive Models: an introduction with R (2nd edition), Chapman and Hall/CRC.
Regarding isolateContribution, see:
Ropkins, K., Walker, A., Philips, I., Rushton, C., Clark, T. and Tate, J., Change Detection of Air Quality Time-Series Using the R Package AEQval. Available at SSRN 4267722. https://ssrn.com/abstract=4267722 or http://dx.doi.org/10.2139/ssrn.4267722 Also at: https://karlropkins.github.io/AQEval/articles/AQEval_Intro_Preprint.pdf
#fitting a simple deseasonalisation, deweathering
#and background correction (dswb) model to no2:
aq.data$dswb.no2 <- isolateContribution(aq.data,
"no2", background="bg.no2")
#compare at 14 day resolution:
temp <- openair::timeAverage(aq.data, "14 day")
#without dswb
quantBreakPoints(temp, "no2", test=FALSE, h=0.1)
#with dswb
quantBreakPoints(temp, "dswb.no2", test=FALSE, h=0.1)
Run the code above in your browser using DataLab