tidem  R Documentation 
The fit is done in terms of sine and cosine components at the indicated tidal frequencies, with the amplitude and phase being calculated from the resultant coefficients on the sine and cosine terms. The scheme was devised for hourly data; for other sampling schemes, please see ‘Application to nonhourly data’.
tidem(
t,
x,
constituents,
infer = NULL,
latitude = NULL,
rc = 1,
regress = lm,
debug = getOption("oceDebug")
)
t 
A 
x 
an optional numerical vector holding something that varies with
time. This is ignored if 
constituents 
an optional character vector holding the names of tidal constituents to which the fit is done (see “Details” and “Constituent Naming Convention”.) 
infer 
a list of constituents to be inferred from
fitted constituents according to the method outlined
in Section 2.3.4 of Foreman (1978).
If infer=list(name=c("P1","K2"), from=c("K1", "S2"), amp=c(0.33093, 0.27215), phase=c(7.07, 22.4) means that the amplitude of 
latitude 
if provided, the latitude of the observations. If not
provided, 
rc 
the value of the coefficient in the Rayleigh criterion. 
regress 
function to be used for regression, by default

debug 
an integer specifying whether debugging information is
to be printed during the processing. This is a general parameter that
is used by many 
The tidal constituents to be used in the analysis are specified as follows; see “Constituent Naming Convention”.
If constituents
is not provided, then the constituent
list will be made up of the 69 constituents designated by Foreman as "standard".
These include astronomical frequencies and some shallowwater frequencies,
and are as follows: c("Z0", "SA", "SSA", "MSM", "MM", "MSF", "MF", "ALP1", "2Q1", "SIG1", "Q1", "RHO1", "O1", "TAU1", "BET1", "NO1", "CHI1", "PI1", "P1", "S1", "K1", "PSI1", "PHI1", "THE1", "J1", "SO1", "OO1", "UPS1", "OQ2", "EPS2", "2N2", "MU2", "N2", "NU2", "GAM2", "H1", "M2", "H2", "MKS2", "LDA2", "L2", "T2", "S2", "R2", "K2", "MSN2", "ETA2", "MO3", "M3", "SO3", "MK3", "SK3", "MN4", "M4", "SN4", "MS4", "MK4", "S4", "SK4", "2MK5", "2SK5", "2MN6", "M6", "2MS6", "2MK6", "2SM6", "MSK6", "3MK7", "M8")
.
If the first item in constituents
is the string
"standard"
, then a provisional list is set up as in Case 1, and then
the (optional) rest of the elements of constituents
are examined, in
order. Each of these constituents is based on the name of a tidal
constituent in the Foreman (1978) notation. (To get the list, execute
data(tidedata)
and then execute cat(tideData$name)
.) Each
named constituent is added to the existing list, if it is not already there.
But, if the constituent is preceded by a minus sign, then it is removed
from the list (if it is already there). Thus, for example,
constituents=c("standard", "M2", "ST32")
would remove the M2
constituent and add the ST32 constituent.
If the first item is not "standard"
, then the list of
constituents is processed as in Case 2, but without starting with the
standard list. As an example, constituents=c("K1", "M2")
would fit
for just the K1 and M2 components. (It would be strange to use a minus sign
to remove items from the list, but the function allows that.)
In each of the above cases, the list is reordered in frequency prior to the
analysis, so that the results of summary,tidemmethod()
will be in a
familiar form.
Once the constituent list is determined, tidem
prunes the elements of
the list by using the Rayleigh criterion, according to which two
constituents of frequencies f_1
and f_2
cannot be
resolved unless the time series spans a time interval of at least
rc/(f_1f_2)
.
Finally, tidem
looks in the remaining constituent list to check
that the application of the Rayleigh criterion has not removed any of the
constituents specified directly in the constituents
argument. If
any are found to have been removed, then they are added back. This last
step was added on 20171227, to make tidem
behave the same
way as the Foreman (1978) code, as illustrated in his
Appendices 7.2 and 7.3. (As an aside, his Appendix 7.3 has some errors,
e.g. the frequency for the 2SK5 constituent is listed there (p58) as
0.20844743, but it is listed as 0.2084474129 in his Appendix 7.1 (p41).
For this reason, the frequency comparison is relaxed to a tol
value of 1e7
in a portion of the oce test suite
(see tests/testthat/test_tidem.R
in the source).
A specific example may be of help in understanding the removal of unresolvable
constituents. For example, the data(sealevel)
dataset is of length
6718 hours, and this is too short to resolve the full list of constituents,
with the conventional (and, really, necessary) limit of rc=1
.
From Table 1 of Foreman (1978), this timeseries is too short to resolve the
SA
constituent, so that SA
will not be in the resultant.
Similarly, Table 2 of Foreman (1978) dictates the removal of
PI1
, S1
and PSI1
from the list. And, finally,
Table 3 of Foreman (1978) dictates the removal of
H1
, H2
, T2
and R2
, and since that document
suggests that GAM2
be subsumed into H1
,
then if H1
is already being deleted, then
GAM2
will also be deleted.
A summary of constituents may be found with:
data(tidedata) print(tidedata$const)
An object of tidem, consisting of
const 
constituent number, e.g. 1 for 
model 
the regression model 
name 
a vector of constituent
names, in nonsubscript format, e.g. " 
frequency 
a vector of constituent frequencies, in inverse hours. 
amplitude 
a vector of fitted constituent amplitudes, in metres. 
phase 
a vector of fitted constituent phase. NOTE: The definition of phase is likely to change as this function evolves. For now, it is phase with respect to the first data sample. 
p 
a vector containing a sort of p value for each constituent. This is calculated as the average of the p values for the sine() and cosine() portions used in fitting; whether it makes any sense is an open question. 
The framework on which tidem()
rests on the assumption of data
that have been sampled on a 1hour interval (see e.g. Foreman, 1977).
Since regression (as opposed to spectral analysis) is used to infer
the amplitude and phase of tidal constituents, data gaps do not pose
a serious problem. Sampling intervals under an hour are also not a
problem. However, trying to use tidem()
on time series that are
sampled at uniform intervals that exceed 1 hour can lead to results
that are difficult to interpret. For example, some drifter data are
sampled at a 6hour interval. This makes it impossible to fit for the
S4 component (which has exactly 6 cycles per day), because the method
works by constructing sine and cosine series at tidal frequencies and
using these as the basis for regression. Each of these series will have
a constant value through the constructed time, and regression cannot handle
that (in addition to a constantvalue constructed series that is used to fit
for the Z0 constituent). tidem()
tries to handle such problems by examining
the range of the constructed sine and cosine timeseries, omitting any
constituents that yield nearconstant values in either of these. Messages are
issued if this problem is encountered. This prevents failure of the regression,
and the predictions of the regression seem to represent the data reasonably well,
but the inferred constituent amplitudes are not physically reasonable. Cautious
use of tidem()
to infer individual constituents might be warranted, but
users must be aware that the results will be difficult to interpret. The tool
is simply not designed for this use.
This function is not fully developed yet, and both the form of the call and the results of the calculation may change.
The reported p
value may make no sense at all, and it might be
removed in a future version of this function. Perhaps a significance level
should be presented, as in the software developed by both Foreman and
Pawlowicz.
tidem
uses constituent names that follow the convention
set by Foreman (1978). This convention is slightly different
from that used in the TTIDE package of Pawlowicz et al.
(2002), with Foreman's UPS1
and M8
becoming
UPSI
and MS
in TTIDE. To permit the use of either notation,
tidem()
uses tidemConstituentNameFix()
to
convert from TTIDE names to the
Foreman names, issuing warnings when doing so.
T_TIDE
resultsThe tidem
amplitude and phase results, obtained with
tidem(sealevelTuktoyaktuk, constituents=c("standard", "M10"), infer=list(name=c("P1", "K2"), from=c("K1", "S2"), amp=c(0.33093, 0.27215), phase=c(7.07, 22.40))),
are identical the T_TIDE
values listed in
Table 1 of Pawlowicz et al. (2002),
after rounding amplitude and phase to 4 and 2 digits past
the decimal place, to match the format of the table.
Dan Kelley
Foreman, M G., 1977 (revised 1996). Manual for Tidal Heights Analysis and Prediction. Pacific Marine Science Report 7710. British Columbia, Canada: Institute of Ocean Sciences, Patricia Bay.
Foreman, M. G. G., 1978. Manual for Tidal Currents Analysis and Prediction. Pacific Marine Science Report 786. British Columbia, Canada: Institute of Ocean Sciences, Patricia Bay,
Foreman, M. G. G., Neufeld, E. T., 1991. Harmonic tidal analyses of long time series. International Hydrographic Review, 68 (1), 95108.
Leffler, K. E. and D. A. Jay, 2009. Enhancing tidal harmonic analysis: Robust (hybrid) solutions. Continental Shelf Research, 29(1):7888.
Pawlowicz, Rich, Bob Beardsley, and Steve Lentz, 2002. Classical tidal
harmonic analysis including error estimates in MATLAB using T_TIDE
.
Computers and Geosciences, 28, 929937.
Other things related to tides:
[[,tidemmethod
,
[[<,tidemmethod
,
as.tidem()
,
plot,tidemmethod
,
predict.tidem()
,
summary,tidemmethod
,
tidalCurrent
,
tidedata
,
tidemclass
,
tidemAstron()
,
tidemVuf()
,
webtide()
library(oce)
# The demonstration time series from Foreman (1978),
# also used in T_TIDE (Pawlowicz, 2002).
data(sealevelTuktoyaktuk)
tide < tidem(sealevelTuktoyaktuk)
summary(tide)
# AIC analysis
extractAIC(tide[["model"]])
# Fake data at M2
library(oce)
data("tidedata")
M2 < with(tidedata$const, freq[name=="M2"])
t < seq(0, 10*86400, 3600)
eta < sin(M2 * t * 2 * pi / 3600)
sl < as.sealevel(eta)
m < tidem(sl)
summary(m)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.