Learn R Programming

phenofit (version 0.3.2)

season: Growing season division

Description

Divide growing seasons according to rough fitting (rFUN) result .

For season, rough fitting is applied for whole. For season_mov rough fitting is applied in every year, during which maxExtendMonth is extended.

Divide growing seasons according to rough fitting (rFUN) result .

For season, rough fitting is applied for whole. For season_mov rough fitting is applied in every year, during which maxExtendMonth is extended.

Usage

season(
  INPUT,
  rFUN,
  wFUN,
  iters = 2,
  wmin = 0.1,
  lambda,
  nf = 3,
  frame = floor(INPUT$nptperyear/5) * 2 + 1,
  minpeakdistance = NULL,
  ypeak_min = 0.1,
  r_max = 0.2,
  r_min = 0.05,
  rtrough_max = 0.6,
  MaxPeaksPerYear = 2,
  MaxTroughsPerYear = 3,
  calendarYear = FALSE,
  adj.param = TRUE,
  rm.closed = TRUE,
  is.continuous = TRUE,
  .check_season = TRUE,
  verbose = FALSE,
  ...
)

rough_fitting( INPUT, options = list(), frame = floor(INPUT$nptperyear/5) * 2 + 1, ... )

stat_season(INPUT, d_fit)

Value

  • fit: A data.table of Rough fitting result, with the columns of (t, y, witer1, ..., witerN, ziter1, ..., ziterN).

  • dt: A data.table of Growing season dividing information, with the columns of (beg, peak, end, y_beg, y_peak, y_end, len, year, season, flag).

  • fit: A data.table of Rough fitting result, with the columns of (t, y, witer1, ..., witerN, ziter1, ..., ziterN).

  • dt: A data.table of Growing season dividing information, with the columns of (beg, peak, end, y_beg, y_peak, y_end, len, year, season, flag).

Arguments

INPUT

A list object with the elements of t, y, w, Tn (optional) and ylu, returned by check_input().

rFUN

Rough curve fitting function, can be one of smooth_wSG(), smooth_wWHIT() and smooth_wHANTS().

wFUN

weights updating function, can be one of wTSM(), wChen(), wBisquare() and wSELF().

iters

How many times curve fitting is implemented.

wmin

Double, minimum weigth (i.e. weight of snow, ice and cloud).

lambda

The smoothing parameter of smooth_wWHIT(). For season_mov(), if lambda is NULL, init_lambda() will be used. Generally, it was set as 10000, 15, and 5 for daily, 8-day and 16-day inputs respectively.

nf

The parameter of smooth_wHANTS(), number of frequencies to be considered above the zero frequency.

frame

The parameter of smooth_wSG(), moving window size. Suggested by TIMESAT, default frame = floor(nptperyear/7)*2 + 1.

minpeakdistance

Numberic, in the unit of points (default as nptperyear/12). The minimum distance of two peaks. If the distance of two maximum extreme value less than minpeakdistance, only the real maximum value will be left.

ypeak_min

y_peak >= ypeak_min

r_max

Similar as r_min, The maximum threshold should be greater than r_max.

r_min

Threshold is defined as the difference of peak value with trough value. There are two threshold (left and right). The minimum threshold should be greater than r_min.

rtrough_max

ytrough <= rtrough_max*A, A is the amplitude of y.

MaxPeaksPerYear

This parameter is used to adjust lambda in iterations. If PeaksPerYear > MaxPeaksPerYear, then lambda = lambda*2.

MaxTroughsPerYear

This parameter is used to adjust lambda in iterations. If TroughsPerYear > MaxTroughsPerYear, then lambda = lambda*2.

calendarYear

If true, only one static calendar growing season will be returned.

adj.param

Adjust rough curve fitting function parameters automatically, if too many or to less peak and trough values.

rm.closed

boolean. Whether check the two closest peaks (or troughs).

is.continuous

boolean. Whether the input is continuous? This parameter is for fluxsite site-year data.

.check_season

not used (only for debug)

verbose

whether to print options_season into console?

...

ignored.

d_fit

A data.frame with the columns of t, y, witer... and ziter....

options

  • rFUN Rough curve fitting function, can be one of smooth_wSG(), smooth_wWHIT() and smooth_wHANTS().

  • wFUN weights updating function, can be one of wTSM(), wChen(), wBisquare() and wSELF().

  • iters How many times curve fitting is implemented.

  • wmin Double, minimum weigth (i.e. weight of snow, ice and cloud).

  • lambda The smoothing parameter of smooth_wWHIT(). For season_mov(), if lambda is NULL, init_lambda() will be used. Generally, it was set as 10000, 15, and 5 for daily, 8-day and 16-day inputs respectively.

  • nf The parameter of smooth_wHANTS(), number of frequencies to be considered above the zero frequency.

  • frame The parameter of smooth_wSG(), moving window size. Suggested by TIMESAT, default frame = floor(nptperyear/7)*2 + 1.

  • minpeakdistance Numberic, in the unit of points (default as nptperyear/12). The minimum distance of two peaks. If the distance of two maximum extreme value less than minpeakdistance, only the real maximum value will be left.

  • ypeak_min y_peak >= ypeak_min

  • r_min Threshold is defined as the difference of peak value with trough value. There are two threshold (left and right). The minimum threshold should be greater than r_min.

  • r_max Similar as r_min, The maximum threshold should be greater than r_max.

  • rtrough_max ytrough <= rtrough_max*A, A is the amplitude of y.

  • MaxPeaksPerYear This parameter is used to adjust lambda in iterations. If PeaksPerYear > MaxPeaksPerYear, then lambda = lambda*2.

  • MaxTroughsPerYear: This parameter is used to adjust lambda in iterations. If TroughsPerYear > MaxTroughsPerYear, then lambda = lambda*2.

  • calendarYear: If true, only one static calendar growing season will be returned.

  • adj.param: Adjust rough curve fitting function parameters automatically, if too many or to less peak and trough values.

  • rm.closed: boolean. Whether check the two closest peaks (or troughs).

  • is.continuous: boolean. Whether the input is continuous? This parameter is for fluxsite site-year data.

  • .check_season: not used (only for debug)

  • verbose: whether to print options_season into console?

Details

Before dividing growing season, INPUT should be added a year in head and tail first by add_HeadTail.

Finally, use findpeaks() to get local maximum and local minimum values. Two local minimum define a growing season. If two local minimum(maximum) are too closed, then only the smaller(biger) is left.

Before dividing growing season, INPUT should be added a year in head and tail first by add_HeadTail.

Finally, use findpeaks() to get local maximum and local minimum values. Two local minimum define a growing season. If two local minimum(maximum) are too closed, then only the smaller(biger) is left.

See Also

findpeaks().

findpeaks().

Examples

Run this code
data("CA_NS6")
d <- CA_NS6

nptperyear <- 23
INPUT <- check_input(d$t, d$y, d$w,
    QC_flag = d$QC_flag,
    nptperyear = nptperyear, south = FALSE,
    maxgap = nptperyear / 4, alpha = 0.02, wmin = 0.2
)
# plot_input(INPUT)

wFUN <- "wTSM"
# all year as a whole
options = list(rFUN = smooth_wWHIT, wFUN = wFUN, lambda = 10)
brks <- season(INPUT, lambda = 10)
plot_season(INPUT, brks, d)

brks2 = opt_season(INPUT, options)
all.equal(brks2, brks)

c(d_fit, info_peak) %<-% rough_fitting(INPUT)
d_season = find_season.peaks(d_fit, info_peak)

c(t, ypred) %<-% d_fit[, .(t, ziter2)]
d_season = find_season.default(ypred, t)
all.equal(brks$dt, d_season)

# opt <- .options$season
# brks$fit - d_fit # function passed test

# curve fitting by year
brks_mov <- season_mov(INPUT,
    options = list(
        rFUN = "smooth_wWHIT", wFUN = wFUN,
        lambda = 10,
        r_min = 0.05, ypeak_min = 0.05,
        verbose = TRUE
    )
)
plot_season(INPUT, brks_mov)
data("CA_NS6")
d <- CA_NS6

nptperyear <- 23
INPUT <- check_input(d$t, d$y, d$w,
    QC_flag = d$QC_flag,
    nptperyear = nptperyear, south = FALSE,
    maxgap = nptperyear / 4, alpha = 0.02, wmin = 0.2
)
# plot_input(INPUT)

wFUN <- "wTSM"
# all year as a whole
options = list(rFUN = smooth_wWHIT, wFUN = wFUN, lambda = 10)
brks <- season(INPUT, lambda = 10)
plot_season(INPUT, brks, d)

brks2 = opt_season(INPUT, options)
all.equal(brks2, brks)

c(d_fit, info_peak) %<-% rough_fitting(INPUT)
d_season = find_season.peaks(d_fit, info_peak)

c(t, ypred) %<-% d_fit[, .(t, ziter2)]
d_season = find_season.default(ypred, t)
all.equal(brks$dt, d_season)

# opt <- .options$season
# brks$fit - d_fit # function passed test

# curve fitting by year
brks_mov <- season_mov(INPUT,
    options = list(
        rFUN = "smooth_wWHIT", wFUN = wFUN,
        lambda = 10,
        r_min = 0.05, ypeak_min = 0.05,
        verbose = TRUE
    )
)
plot_season(INPUT, brks_mov)

Run the code above in your browser using DataLab