Finds various measures of the phase of the annual cycle, or of some specified month range.
A seasonal time series, or a class zoo
object.
A vector of two numbers specifying the season range to be considered.
The form of the output.
Additional arguments to be passed for changing integration defaults.
A data frame with columns year, time of the maximum, fulcrum,
weighted mean time and -- in the case of zoo
objects -- number of
observations. In the case of seasonal time series, the results are all given
as decimal seasons of the year. In the case of dated observations, the
results can be dates, day of the year, or julian day with an origin of
1970-01-01, depending on the option out
.
phenoPhase
gives three measures of the phasing of a seasonal cycle:
the time of the maximum (Cloern and Jassby 2008), the fulcrum or
center of gravity, and the weighted mean season (Colebrook 1979). The latter
has sometimes been referred to in the literature as “centre of
gravity”, but it is not actually the same. These measures differ in their
sensitivity to changes in the seasonal pattern, and therefore also in their
susceptibility to sampling variability. The time of maximum is the most
sensitive, the weighted mean the least.
These measures can be restricted to a subset of the year by giving the
desired range of seasons. This can be useful for isolating measures of, say,
the spring and autumn phytoplankton blooms in temperate waters. In the case
of a seasonal time series, a non-missing value is required for every season
or the result will be NA
, so using a period shorter than one year can
also help avoid any seasons that are typically not covered by the sampling
program. Similarly, in the case of dated observations, a shorter period can
help avoid times of sparse data. The method for time series allows for other
than monthly frequencies, but season.range
is always interpreted as
months for zoo
objects. The method for time series requires data for
all seasons in season.range
. The method for zoo
objects will
provide a result regardless of number of sampling days, so make sure that
data are sufficient for a meaningful result.
The measures are annum-centric, i.e., they reflect the use of calendar year as the annum, which may not be appropriate for cases in which important features occur in winter and span two calendar years. Such cases can be handled by lagging the time series by an appropriate number of months, or by subtracting an appropriate number of days from the individual dates.
tsMake
can be used to produce ts
and zoo
objects
suitable as arguments to this function.
The default parameters used for the integrate
function in
phenoPhase
may fail for certain datasets. Try increasing the number
of subdivisions above its default of 100 by adding, for example,
subdivisions = 1000
to the arguments of phenoPhase
.
Cloern, J.E. and Jassby, A.D. (2008) Complex seasonal patterns of primary producers at the land-sea interface. Ecology Letters 11, 1294--1303.
Colebrook, J.M. (1979) Continuous plankton records - seasonal cycles of phytoplankton and copepods in the North Atlantic ocean and the North Sea. Marine Biology 51, 23--32.
# ts example
y <- sfbayChla[, "s27"]
p1 <- phenoPhase(y)
p1
#> year max.time fulcrum mean.wt
#> 1 1978 NA NA NA
#> 2 1979 NA NA NA
#> 3 1980 4 4.52 5.54
#> 4 1981 NA NA NA
#> 5 1982 NA NA NA
#> 6 1983 NA NA NA
#> 7 1984 NA NA NA
#> 8 1985 NA NA NA
#> 9 1986 NA NA NA
#> 10 1987 4 4.87 5.54
#> 11 1988 NA NA NA
#> 12 1989 NA NA NA
#> 13 1990 NA NA NA
#> 14 1991 NA NA NA
#> 15 1992 NA NA NA
#> 16 1993 NA NA NA
#> 17 1994 NA NA NA
#> 18 1995 NA NA NA
#> 19 1996 4 4.24 5.43
#> 20 1997 NA NA NA
#> 21 1998 NA NA NA
#> 22 1999 NA NA NA
#> 23 2000 11 10.51 8.66
#> 24 2001 NA NA NA
#> 25 2002 NA NA NA
#> 26 2003 2 3.15 4.29
#> 27 2004 3 5.03 6.06
#> 28 2005 NA NA NA
#> 29 2006 NA NA NA
#> 30 2007 NA NA NA
#> 31 2008 4 4.55 5.39
#> 32 2009 NA NA NA
apply(p1, 2, sd, na.rm = TRUE) # max.time > fulcrum > mean.wt
#> year max.time fulcrum mean.wt
#> 9.380832 2.935821 2.391350 1.351158
phenoPhase(y, c(3, 10))
#> year max.time fulcrum mean.wt
#> 1 1978 NA NA NA
#> 2 1979 6 6.11 6.17
#> 3 1980 4 4.56 5.33
#> 4 1981 NA NA NA
#> 5 1982 NA NA NA
#> 6 1983 5 4.74 4.97
#> 7 1984 4 4.71 5.55
#> 8 1985 NA NA NA
#> 9 1986 NA NA NA
#> 10 1987 4 5.11 5.52
#> 11 1988 4 5.48 5.80
#> 12 1989 4 4.48 5.10
#> 13 1990 NA NA NA
#> 14 1991 NA NA NA
#> 15 1992 NA NA NA
#> 16 1993 NA NA NA
#> 17 1994 3 5.28 5.15
#> 18 1995 3 4.12 4.79
#> 19 1996 4 4.28 4.96
#> 20 1997 4 4.46 5.37
#> 21 1998 NA NA NA
#> 22 1999 NA NA NA
#> 23 2000 4 4.40 5.16
#> 24 2001 NA NA NA
#> 25 2002 NA NA NA
#> 26 2003 3 4.86 5.09
#> 27 2004 3 5.78 5.77
#> 28 2005 NA NA NA
#> 29 2006 NA NA NA
#> 30 2007 NA NA NA
#> 31 2008 4 4.73 5.29
#> 32 2009 NA NA NA
# zoo example
sfb <- wqData(sfbay, c(1, 3, 4), 5:12, site.order = TRUE, type = "wide",
time.format = "%m/%d/%Y")
y <- tsMake(sfb, focus = "chl", layer = c(0, 5), type = "zoo")
phenoPhase(y[, "s27"])
#> year max.time fulcrum mean.wt n
#> 1 1985 1985-03-29 1985-03-31 1985-04-19 17
#> 2 1986 1986-04-29 1986-04-25 1986-04-27 21
#> 3 1987 1987-04-16 1987-05-13 1987-05-18 20
#> 4 1988 1988-04-14 1988-04-27 1988-06-09 16
#> 5 1989 1989-03-01 1989-04-12 1989-04-12 25
#> 6 1990 1990-04-12 1990-04-30 1990-04-21 13
#> 7 1991 1991-04-11 1991-05-14 1991-04-22 18
#> 8 1992 1992-04-14 1992-04-26 1992-04-25 21
#> 9 1993 1993-03-25 1993-04-02 1993-04-04 17
#> 10 1994 1994-03-04 1994-05-06 1994-04-20 20
#> 11 1995 1995-03-30 1995-04-16 1995-04-11 22
#> 12 1996 1996-04-03 1996-04-09 1996-04-21 21
#> 13 1997 1997-02-19 1997-04-20 1997-04-06 20
#> 14 1998 1998-04-09 1998-04-14 1998-04-10 23
#> 15 1999 1999-03-24 1999-06-05 1999-06-04 13
#> 16 2000 2000-11-09 2000-11-06 2000-07-26 16
#> 17 2001 2001-04-16 2001-04-15 2001-04-27 16
#> 18 2002 2002-03-12 2002-03-17 2002-05-21 13
#> 19 2003 2003-02-24 2003-03-21 2003-04-03 21
#> 20 2004 2004-03-24 2004-05-16 2004-05-22 18