Description Usage Arguments Details Value Author(s) References Examples
Applies the Hobday et al. (2016) marine heat wave definition to an input time
series of a given value (usually, but not necessarily limited to, temperature)
along with a daily date vector and pre-calculated seasonal and threshold
climatologies, which may either be created with ts2clm
or some
other means.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
data |
A data frame with at least four columns. In the default setting
(i.e. omitting the arguments |
x |
This column is expected to contain a vector of dates as per the
specification of |
y |
This is a column containing the measurement variable. If the column
name differs from the default (i.e. |
seasClim |
The dafault for this argument assumes that the seasonal
climatology column is called |
threshClim |
The threshold climatology column should be called
|
threshClim2 |
If one wishes to provide a second climatology threshold filter for the more rigorous detection of events, a vector or column containing logical values (i.e. TRUE FALSE) should be provided here. By default this argument is ignored. It's primary purpose is to allow for the inclusion of tMin and tMax thresholds. |
minDuration |
The minimum duration for acceptance of detected events.
The default is |
minDuration2 |
The minimum duration for acceptance of events after
filtering by |
joinAcrossGaps |
Boolean switch indicating whether to join events which
occur before/after a short gap as specified by |
maxGap |
The maximum length of gap allowed for the joining of MHWs. The
default is |
maxGap2 |
The maximum gap length after applying both thresholds.
By default |
coldSpells |
Boolean specifying if the code should detect cold events
instead of warm events. The default is |
protoEvents |
Boolean specifying whether the full time series must be
returned as a long table, together with columns indicating whether or not the
threshold criterion ( |
categories |
Rather than using |
roundRes |
This argument allows the user to choose how many decimal places
the MHW metric outputs will be rounded to. Default is 4. To
prevent rounding set |
... |
Other arguments that will be passed internally to |
This function assumes that the input time series consists of continuous
daily values with few missing values. Time ranges which start and end
part-way through the calendar year are supported. The accompanying function
ts2clm
aids in the preparation of a time series that is
suitable for use with detect_event
, although this may also be accomplished
'by hand' as long as the criteria are met as discussed in the documentation
to ts2clm
.
The calculation of onset and decline rates assumes that the events
started a half-day before the start day and ended a half-day after the
end-day. This is consistent with the duration definition as implemented,
which assumes duration = end day - start day + 1. An event that is already
present at the beginning of a time series, or an event that is still present
at the end of a time series, will report the rate of onset or the rate of
decline as NA
, as it is impossible to know what the temperature half a
day before or after the start or end of the event is.
For the purposes of event detection, any missing temperature values not
interpolated over (through optional maxPadLength
in ts2clm
)
will be set equal to the seasonal climatology. This means they will trigger
the end/start of any adjacent temperature values which satisfy the event
definition criteria.
If the code is used to detect cold events (coldSpells = TRUE
),
then it works just as for heat waves except that events are detected as
deviations below the (100 - pctile)th percentile (e.g., the 10th instead of
90th) for at least 5 days. Intensities are reported as negative values and
represent the temperature anomaly below climatology.
The original Python algorithm was written by Eric Oliver, Institute for Marine and Antarctic Studies, University of Tasmania, Feb 2015, and is documented by Hobday et al. (2016). The marine cold spell option was implemented in version 0.13 (21 Nov 2015) of the Python module as a result of our preparation of Schlegel et al. (2017), wherein the cold events receive a brief overview.
The function will return a list of two tibbles (see the tidyverse
),
climatology
and event
, which are, surprisingly, the climatology
and event results, respectively. The climatology contains the full time series of
daily temperatures, as well as the the seasonal climatology, the threshold
and various aspects of the events that were detected. The software was
designed for detecting extreme thermal events, and the units specified below
reflect that intended purpose. However, various other kinds of extreme
events may be detected according to the specifications, and if that is the
case, the appropriate units need to be determined by the user.
The climatology
results will contain the same column produced by
ts2clm
as well as the following:
threshCriterion |
Boolean indicating if |
durationCriterion |
Boolean indicating whether periods of consecutive
|
event |
Boolean indicating if all criteria that define an extreme event are met. |
event_no |
A sequential number indicating the ID and order of occurrence of the events. |
intensity |
The difference between |
category |
The category classification per day. Only added
if |
The event
results are summarised using a range of event metrics:
event_no |
A sequential number indicating the ID and order of the events. |
index_start |
Start index of event. |
index_end |
End index of event. |
duration |
Duration of event [days]. |
date_start |
Start date of event [date]. |
date_end |
End date of event [date]. |
date_peak |
Date of event peak [date]. |
intensity_mean |
Mean intensity [deg. C]. |
intensity_max |
Maximum (peak) intensity [deg. C]. |
intensity_var |
Intensity variability (standard deviation) [deg. C]. |
intensity_cumulative |
Cumulative intensity [deg. C x days]. |
rate_onset |
Onset rate of event [deg. C / day]. |
rate_decline |
Decline rate of event [deg. C / day]. |
event_name |
The name of the event. Generated from the |
category |
The maximum category threshold reached/exceeded by the event.
Only added if |
p_moderate |
The proportion of the total duration (days) spent at or above
the first threshold, but below any further thresholds. Only added if |
p_strong |
The proportion of the total duration (days) spent at or above
the second threshold, but below any further thresholds. Only added if |
p_severe |
The proportion of the total duration (days) spent at or above
the third threshold, but below the fourth threshold. Only added if |
p_extreme |
The proportion of the total duration (days) spent at or above
the fourth and final threshold. Only added if |
season |
The season(s) during which the event occurred. If the event
occurred across two seasons this will be displayed as e.g. "Winter/Spring".
Across three seasons as e.g. "Winter-Summer". Events lasting across four or more
seasons are listed as "Year-round". December (June) is used here as the start of
Austral (Boreal) summer. If "start", "peak", or "end" was given to the |
intensity_max_relThresh
, intensity_mean_relThresh
,
intensity_var_relThresh
, and intensity_cumulative_relThresh
are as above except relative to the threshold (e.g., 90th percentile) rather
than the seasonal climatology.
intensity_max_abs
, intensity_mean_abs
, intensity_var_abs
, and
intensity_cumulative_abs
are as above except as absolute magnitudes
rather than relative to the seasonal climatology or threshold.
Note that rate_onset
and rate_decline
will return NA
when the event begins/ends on the first/last day of the time series. This
may be particularly evident when the function is applied to large gridded
data sets. Although the other metrics do not contain any errors and
provide sensible values, please take this into account in its
interpretation.
Albertus J. Smit, Robert W. Schlegel, Eric C. J. Oliver
Hobday, A.J. et al. (2016). A hierarchical approach to defining marine heatwaves, Progress in Oceanography, 141, pp. 227-238, doi:10.1016/j.pocean.2015.12.014
Schlegel, R. W., Oliver, C. J., Wernberg, T. W., Smit, A. J. (2017). Nearshore and offshore co-occurrences of marine heatwaves and cold-spells. Progress in Oceanography, 151, pp. 189-205, doi:10.1016/j.pocean.2017.01.004
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | res_clim <- ts2clm(sst_WA, climatologyPeriod = c("1983-01-01", "2012-12-31"))
out <- detect_event(res_clim)
# show a portion of the climatology:
out$climatology[1:10, ]
# show some of the heat waves:
out$event[1:5, 1:10]
# Or if one wants to calculate MCSs
res_clim <- ts2clm(sst_WA, climatologyPeriod = c("1983-01-01", "2012-12-31"),
pctile = 10)
out <- detect_event(res_clim, coldSpells = TRUE)
# show a portion of the climatology:
out$climatology[1:10, ]
# show some of the cold-spells:
out$event[1:5, 1:10]
# It is also possible to calculate the categories of events directly
# See the \code{\link{category}} documentation for more functionality
res_clim <- ts2clm(sst_WA, climatologyPeriod = c("1983-01-01", "2012-12-31"))
out_event <- detect_event(res_clim, categories = TRUE)
out_list <- detect_event(res_clim, categories = TRUE, climatology = TRUE)
# It is also possible to give two separate sets of threshold criteria
# To use a second static threshold we first use the exceedance function
thresh_19 <- exceedance(sst_Med, threshold = 19, minDuration = 10, maxGap = 0)$threshold
# Then we use that output when detecting our events
events_19 <- detect_event(ts2clm(sst_Med, climatologyPeriod = c("1982-01-01", "2011-12-31")),
threshClim2 = thresh_19$exceedance, minDuration2 = 10, maxGap2 = 0)
# If we want to use two different percentile thresholds we use detect_event
thresh_95 <- detect_event(ts2clm(sst_Med, pctile = 95,
climatologyPeriod = c("1982-01-01", "2011-12-31")),
minDuration = 2, maxGap = 0)$climatology
# Then we use that output when detecting our events
events_95 <- detect_event(ts2clm(sst_Med, climatologyPeriod = c("1982-01-01", "2011-12-31")),
threshClim2 = thresh_95$event, minDuration2 = 2, maxGap2 = 0)
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.