-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathfrequ_function.R
More file actions
58 lines (47 loc) · 1.78 KB
/
frequ_function.R
File metadata and controls
58 lines (47 loc) · 1.78 KB
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#' FrequencyAnalysis Fits a given extreme value distribution to an extreme value series
# @param series A vector representing an extreme value series (e.g., annual maximum flood)
# @param distribution A three-character name of the extreme value distribution (see ?dist.list())
# @param nep A vector of non-exceedance probabilities
# @return A list object containing: (1) distribution information and (2) output
# (quantile estimates at various non-exceedance probabilities)
# @export
# @import lmomco
#' #' # From http://www.headwateranalytics.com/blog/flood-frequency-analysis-in-r
FrequencyAnalysis <- function( series, distribution, nep = nonexceeds() ) {
library(lmomco)
distribution <- tolower(distribution)
transformed <- FALSE
# add log Pearson Type 3 to list of distributions supported
# by lmomco package
base.dist <- c('lp3', dist.list())
if( any(distribution %in% base.dist) ) {
# log transform series
if( distribution == 'lp3' ) {
series <- log10(series)
transformed <- TRUE
distribution <- 'pe3'
}
# compute L-moments
samLmom <- lmom.ub(series)
# estimate distribution parameters
distPar <- lmom2par(samLmom, type = distribution)
# compute quantiles for nonexceedances
quant <- par2qua(f = nep, para = distPar)
if( distribution == 'pe3' & transformed ) {
distribution <- 'lp3'
quant <- 10^quant
}
# return result as list object
return(
list(
distribution = list(
name = distribution,
logTransformed = transformed,
parameters = distPar),
output = data.frame(nep = nep, rp = prob2T(nep), estimate = quant)
) )
} else {
stop(
sprintf('Distribution \'%s\' not recognized!', distribution))
}
}