Title: | Exploration and Graphics for RivEr Trends |
---|---|
Description: | Statistics and graphics for streamflow history, water quality trends, and the statistical modeling algorithm: Weighted Regressions on Time, Discharge, and Season (WRTDS). |
Authors: | Robert Hirsch [aut] , Laura DeCicco [aut, cre] , Tim Cohn [ctb], David Watkins [ctb], Lindsay Carr [ctb], Jennifer Murphy [aut] |
Maintainer: | Laura DeCicco <[email protected]> |
License: | CC0 |
Version: | 3.0.10 |
Built: | 2024-11-22 22:21:31 UTC |
Source: | https://code.usgs.gov/water/EGRET |
Create a named list with the INFO, Daily, and Sample dataframes, and surface matrix. If any of these are not available, an NA should be
as.egret(INFO, Daily, Sample = NA, surfaces = NA)
as.egret(INFO, Daily, Sample = NA, surfaces = NA)
INFO |
dataframe containing the INFO dataframe |
Daily |
dataframe containing the daily data |
Sample |
dataframe containing the sample data |
surfaces |
matrix returned from |
eList named list with Daily, Sample, and INFO dataframes, along with the surfaces matrix. Any of these values can be NA, not all EGRET functions will work with missing parts of the named list eList.
eList <- Choptank_eList Daily <- getDaily(eList) INFO <- getInfo(eList) eList_flowHistory <- as.egret(INFO, Daily) plotFlowSingle(eList_flowHistory, 1) Sample <- getSample(eList) surfaces <- getSurfaces(eList) eList_full <- as.egret(INFO, Daily, Sample, surfaces) plotFluxQ(eList_full)
eList <- Choptank_eList Daily <- getDaily(eList) INFO <- getInfo(eList) eList_flowHistory <- as.egret(INFO, Daily) plotFlowSingle(eList_flowHistory, 1) Sample <- getSample(eList) surfaces <- getSurfaces(eList) eList_full <- as.egret(INFO, Daily, Sample, surfaces) plotFluxQ(eList_full)
This function is used when the data analyst believes that a gap in the sample data record is so long that estimates during that period are not reliable. This is only used for periods of several years in duration. For this period, the values of Conc, Flux, FNConc and FNFlux are all converted to NA.
blankTime(eList, startBlank, endBlank)
blankTime(eList, startBlank, endBlank)
eList |
named list with at least the Daily dataframe |
startBlank |
character specifying starting date of blank period, input in quotes in yyyy-mm-dd format |
endBlank |
character specifying the ending date of blank period, input in quotes in yyyy-mm-dd format |
The startBlank and endBlank arguments should generally coincide with the starting and
ending date of the period of analysis that is being used. startBlank should be
placed fairly close to the start of the period of no data and endBlank should
be placed fairly close to the end of the period of no data. They do not eliminate
any water quality data from the set of data being used to estimate the model,
they only eliminate results computed for the specified blank period. If the data
set has more than one large data gap the blankTime()
function can be used
multiple times to blank out multiple sets of results.
eList named list with modified Daily data frame.
startBlank = "2004-10-01" endBlank = "2006-09-30" eList <- Choptank_eList eList <- blankTime(eList, startBlank, endBlank)
startBlank = "2004-10-01" endBlank = "2006-09-30" eList <- Choptank_eList eList <- blankTime(eList, startBlank, endBlank)
Data come from named list, which contains a Sample dataframe with the sample data, and an INFO dataframe with metadata.
Box widths are proportional to the square root of the number of samples in the month.
Although there are a lot of optional arguments to this function, most are set to a logical default.
boxConcMonth(eList, printTitle = TRUE, cex = 0.8, cex.axis = 1.1, cex.main = 1.1, las = 1, logScale = FALSE, tcl = 0.5, tinyPlot = FALSE, customPar = FALSE, showYLabels = TRUE, concLab = 1, showXLabels = TRUE, showXAxis = TRUE, showYAxis = TRUE, monthLab = 1, ...)
boxConcMonth(eList, printTitle = TRUE, cex = 0.8, cex.axis = 1.1, cex.main = 1.1, las = 1, logScale = FALSE, tcl = 0.5, tinyPlot = FALSE, customPar = FALSE, showYLabels = TRUE, concLab = 1, showXLabels = TRUE, showXAxis = TRUE, showYAxis = TRUE, monthLab = 1, ...)
eList |
named list with at least the Sample and INFO dataframes |
printTitle |
logical variable if TRUE title is printed, if FALSE not printed (this is best for a multi-plot figure) |
cex |
numerical value giving the amount by which plotting symbols should be magnified |
cex.axis |
magnification to be used for axis annotation relative to the current setting of cex |
cex.main |
magnification to be used for main titles relative to the current setting of cex |
las |
numeric in c(0,1,2,3); the style of axis labels, see ?par |
logScale |
logical if TRUE y plotted in log axis |
tcl |
number defaults to 0.5, specifies length of tick marks as fraction of height of a line of text |
tinyPlot |
logical variable, if TRUE plot is designed to be plotted small as part of a multi-plot figure, default is FALSE. |
customPar |
logical defaults to FALSE. If TRUE, par() should be set by user before calling this function |
showYLabels |
logical defaults to TRUE. If FALSE, the y axis label is not plotted |
concLab |
object of concUnit class, or numeric represented the short code,
or character representing the descriptive name. By default, this argument sets
concentration labels to use either Concentration or Conc (for tiny plots). Units
are taken from the eList$INFO$param.units. To use any other words than
"Concentration" see |
showXLabels |
logical defaults to TRUE. If FALSE, the x axis label is not plotted |
showXAxis |
logical defaults to TRUE. If FALSE, the x axis is not plotted |
showYAxis |
logical defaults to TRUE. If FALSE, the y axis is not plotted |
monthLab |
object of monthLabel class, or numeric represented the short code, or character representing the descriptive name. |
... |
arbitrary graphical parameters that will be passed to genericEGRETDotPlot function (see ?par for options) |
eList <- Choptank_eList # Water year: boxConcMonth(eList) # Graphs consisting of Jun-Aug eList <- setPA(eList, paStart=6,paLong=3) boxConcMonth(eList) spanish_month <- new("monthLabel", monthAbbrev = c("enero", "feb", "marzo", "abr", "mayo", "jun", "jul", "agosto", "set", "oct", "nov", "dic"), monthFull = c("enero", "febrero", "marzo", "abril", "mayo", "junio", "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre"), monthSingle = c("E", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D")) boxConcMonth(eList, monthLab = spanish_month, showXLabels = FALSE, printTitle = FALSE)
eList <- Choptank_eList # Water year: boxConcMonth(eList) # Graphs consisting of Jun-Aug eList <- setPA(eList, paStart=6,paLong=3) boxConcMonth(eList) spanish_month <- new("monthLabel", monthAbbrev = c("enero", "feb", "marzo", "abr", "mayo", "jun", "jul", "agosto", "set", "oct", "nov", "dic"), monthFull = c("enero", "febrero", "marzo", "abril", "mayo", "junio", "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre"), monthSingle = c("E", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D")) boxConcMonth(eList, monthLab = spanish_month, showXLabels = FALSE, printTitle = FALSE)
This function is used to compare the distribution of concentration in the sample and predicted data set. It shows three boxplots. One for the sample, one for the predictions on days with sample values, and one for all days (whether or not they had sample values). Box widths are proportional to the square root of the number of observations represented by the box.
Data come from named list, which contains a Sample dataframe with the sample data, a Daily dataframe with the daily flow data, and an INFO dataframe with metadata.
Although there are a lot of optional arguments to this function, most are set to a logical default.
boxConcThree(eList, tinyPlot = FALSE, printTitle = TRUE, moreTitle = "WRTDS", customPar = FALSE, font.main = 2, cex = 0.8, cex.main = 1.1, cex.axis = 1.1, concLab = 1, ...)
boxConcThree(eList, tinyPlot = FALSE, printTitle = TRUE, moreTitle = "WRTDS", customPar = FALSE, font.main = 2, cex = 0.8, cex.main = 1.1, cex.axis = 1.1, concLab = 1, ...)
eList |
named list with at least the Daily, Sample, and INFO dataframes |
tinyPlot |
logical variable, if TRUE plot is designed to be plotted small as part of a multi-plot figure, default is FALSE. |
printTitle |
logical variable if TRUE title is printed, if FALSE not printed (this is best for a multi-plot figure) |
moreTitle |
character specifying some additional information to go in figure title, typically some information about the specific estimation method used, default is no additional information |
customPar |
logical defaults to FALSE. If TRUE, par() should be set by user before calling this function |
font.main |
font to be used for plot main titles |
cex |
numerical value giving the amount by which plotting symbols should be magnified |
cex.main |
magnification to be used for main titles relative to the current setting of cex |
cex.axis |
magnification to be used for axis annotation relative to the current setting of cex |
concLab |
object of concUnit class, or numeric represented the short code,
or character representing the descriptive name. By default, this argument sets
concentration labels to use either Concentration or Conc (for tiny plots). Units
are taken from the eList$INFO$param.units. To use any other words than
"Concentration" see |
... |
arbitrary graphical parameters that will be passed to genericEGRETDotPlot function (see ?par for options) |
eList <- Choptank_eList # Water year: boxConcThree(eList) # Graphs consisting of Jun-Aug eList <- setPA(eList, paStart=6,paLong=3) boxConcThree(eList)
eList <- Choptank_eList # Water year: boxConcThree(eList) # Graphs consisting of Jun-Aug eList <- setPA(eList, paStart=6,paLong=3) boxConcThree(eList)
This function is used to compare the distribution of discharges in the sample data set and the discharges in the full daily data set. Note that discharge is plotted on a logarithmic axis. The boxplot is created using the log values but the scale is presented in the original units. An ideal situation would show the two boxes roughly similar to each other or the sample boxplot having median, upper quartile, and higher values being slightly greater than in the boxplot of all days.
Box widths are proportional to the square root of the number of observations (left box based on number of sampled days, right box based on total number of days in the record).
Data come from named list, which contains a Sample dataframe with the sample data, a Daily dataframe with the daily flow data, and an INFO dataframe with metadata.
Although there are a lot of optional arguments to this function, most are set to a logical default.
boxQTwice(eList, printTitle = TRUE, qUnit = 2, cex = 0.8, cex.main = 1.1, logScale = TRUE, cex.axis = 1.1, tcl = 0.5, las = 1, tinyPlot = FALSE, usgsStyle = FALSE, customPar = FALSE, ...)
boxQTwice(eList, printTitle = TRUE, qUnit = 2, cex = 0.8, cex.main = 1.1, logScale = TRUE, cex.axis = 1.1, tcl = 0.5, las = 1, tinyPlot = FALSE, usgsStyle = FALSE, customPar = FALSE, ...)
eList |
named list with at least the Daily, Sample, and INFO dataframes |
printTitle |
logical variable if TRUE title is printed, if FALSE not printed (this is best for a multi-plot figure) |
qUnit |
object of qUnit class |
cex |
numerical value giving the amount by which plotting symbols should be magnified |
cex.main |
magnification to be used for main titles relative to the current setting of cex |
logScale |
logical if TRUE y plotted in log axis. Defaults to TRUE. |
cex.axis |
magnification to be used for axis annotation relative to the current setting of cex |
tcl |
number defaults to 0.5, specifies length of tick marks as fraction of height of a line of text |
las |
numeric in c(0,1,2,3); the style of axis labels, see ?par |
tinyPlot |
logical variable, if TRUE plot is designed to be plotted small as part of a multi-plot figure, default is FALSE. |
usgsStyle |
logical option to use USGS style guidelines. Setting this option to TRUE does NOT guarantee USGS compliance. It will only change automatically generated labels. |
customPar |
logical defaults to FALSE. If TRUE, par() should be set by user before calling this function |
... |
arbitrary graphical parameters that will be passed to genericEGRETDotPlot function (see ?par for options) |
eList <- Choptank_eList # Water year: boxQTwice(eList) boxQTwice(eList, qUnit=1) boxQTwice(eList, qUnit='cfs') # Graphs consisting of Jun-Aug eList <- setPA(eList, paStart=6,paLong=3) boxQTwice(eList)
eList <- Choptank_eList # Water year: boxQTwice(eList) boxQTwice(eList, qUnit=1) boxQTwice(eList, qUnit='cfs') # Graphs consisting of Jun-Aug eList <- setPA(eList, paStart=6,paLong=3) boxQTwice(eList)
This function produces a boxplot of the residuals from WRTDS, expressed in natural log concentration units. It provides an alternative for viewing the standardized residuals, where the each residual is divided by its estimated standard error. The monthly boxplot widths are proportional to the square root of the sample size. The residuals for a censored value are determined as the difference between the natural log of the average of the upper and lower. bounds on the sample value, minus the log space estimate of concentration.
Although there are a lot of optional arguments to this function, most are set to a logical default.
Data come from named list, which contains a Sample dataframe with the sample data, and an INFO dataframe with metadata
boxResidMonth(eList, stdResid = FALSE, las = 1, printTitle = TRUE, cex = 0.8, cex.axis = 1.1, cex.main = 1.1, font.main = 2, tinyPlot = FALSE, customPar = FALSE, monthLab = 1, randomCensored = FALSE, ...)
boxResidMonth(eList, stdResid = FALSE, las = 1, printTitle = TRUE, cex = 0.8, cex.axis = 1.1, cex.main = 1.1, font.main = 2, tinyPlot = FALSE, customPar = FALSE, monthLab = 1, randomCensored = FALSE, ...)
eList |
named list with at least the Sample and INFO dataframes |
stdResid |
logical variable, if TRUE it uses the standardized residual, if FALSE it uses the actual, default is FALSE |
las |
numeric in c(0,1,2,3); the style of axis labels |
printTitle |
logical variable if TRUE title is printed, if FALSE not printed (this is best for a multi-plot figure) |
cex |
numerical value giving the amount by which plotting symbols should be magnified |
cex.axis |
magnification to be used for axis annotation relative to the current setting of cex |
cex.main |
magnification to be used for main titles relative to the current setting of cex |
font.main |
font to be used for plot main titles |
tinyPlot |
logical variable, if TRUE plot is designed to be plotted small, as a part of a multipart figure, default is FALSE |
customPar |
logical defaults to FALSE. If TRUE, par() should be set by user before calling this function |
monthLab |
object of monthLabel class, or numeric represented the short code, or character representing the descriptive name. |
randomCensored |
logical. Show censored residuals as randomized. Default = FALSE. |
... |
arbitrary graphical parameters that will be passed to genericEGRETDotPlot function (see ?par for options) |
eList <- Choptank_eList # Water year: boxResidMonth(eList) # Graphs consisting of Jun-Aug eList <- setPA(eList, paStart = 6, paLong = 3) boxResidMonth(eList)
eList <- Choptank_eList # Water year: boxResidMonth(eList) # Graphs consisting of Jun-Aug eList <- setPA(eList, paStart = 6, paLong = 3) boxResidMonth(eList)
Computes the monthly mean values of discharge, concentration, flux, flow-normalized concentration and flow-normalized flux (Q, Conc, FNConc, Flux, and FNFlux) in SI units If WRTDSKalman has been run the outputs are averages for Q, Conc, GenConc, FNConc, Flux, GenFlux, and FNFlux. Note that the Flux, GenFlux, and FNFlux values are average flux values (not totals). For discharge the units are in m3/s, concentration is mg/L, and flux is kg/day. It returns a data frame containing month, year, decimal year, and mean values of DecYear, Q, Conc, GenConc, FNConc, Flux, GenFlux, and FNFlux.
calculateMonthlyResults(eList)
calculateMonthlyResults(eList)
eList |
named list with at least the Daily dataframes |
MonthlyResults data frame of numeric values describing the monthly average values
eList <- Choptank_eList monthlyResults <- calculateMonthlyResults(eList)
eList <- Choptank_eList monthlyResults <- calculateMonthlyResults(eList)
Basic plotting framework for EGRET dot plots. Graphical parameters default to values that work well with most plots, but all can be re-assigned. See ?par for complete definitions of most optional input variables.
censoredSegments(yBottom, yLow, yHigh, x, Uncen, col = "black", lwd = 1)
censoredSegments(yBottom, yLow, yHigh, x, Uncen, col = "black", lwd = 1)
yBottom |
number specifying minimum flux (required) |
yLow |
vector specifying the x data (required), such as ConcLow |
yHigh |
vector specifying the x data (required), such as ConcHigh |
x |
vector x data (required) |
Uncen |
vector that defines whether the values are censored (0) or not (1) |
col |
color of points on plot, see ?par 'Color Specification' |
lwd |
number line width |
x <- c(1,2,3,4,5,6) y <- c(1,3,4,3.3,4.4,7) xlim <- c(min(x)*.75,max(x)*1.25) ylim <- c(0,1.25*max(y)) xlab <- "Date" ylab <- "Concentration" xTicks <- pretty(xlim) yTicks <- pretty(ylim) genericEGRETDotPlot(x=x, y=y, xlim=xlim, ylim=ylim, xlab=xlab, ylab=ylab, xTicks=xTicks, yTicks=yTicks, plotTitle="Test" ) yBottom <- 0 yLow <- c(NA,3,4,3.3,4,7) yHigh <- c(1,3,4,3.3,5,NA) Uncen <- c(0,1,1,1,0,0) censoredSegments(yBottom=yBottom,yLow=yLow,yHigh=yHigh,x=x,Uncen=Uncen)
x <- c(1,2,3,4,5,6) y <- c(1,3,4,3.3,4.4,7) xlim <- c(min(x)*.75,max(x)*1.25) ylim <- c(0,1.25*max(y)) xlab <- "Date" ylab <- "Concentration" xTicks <- pretty(xlim) yTicks <- pretty(ylim) genericEGRETDotPlot(x=x, y=y, xlim=xlim, ylim=ylim, xlab=xlab, ylab=ylab, xTicks=xTicks, yTicks=yTicks, plotTitle="Test" ) yBottom <- 0 yLow <- c(NA,3,4,3.3,4,7) yHigh <- c(1,3,4,3.3,5,NA) Uncen <- c(0,1,1,1,0,0) censoredSegments(yBottom=yBottom,yLow=yLow,yHigh=yHigh,x=x,Uncen=Uncen)
Checks that the start date is before the end date. If not, it will give the user the opportunity to correct, otherwise will create a warning.
checkStartEndDate(startDate, endDate, interactive = TRUE)
checkStartEndDate(startDate, endDate, interactive = TRUE)
startDate |
character |
endDate |
character |
interactive |
logical Option for interactive mode. If true, there is user interaction for error handling and data checks. |
vector where first value is startDate, second is endDate
startDate <- '1985-01-01' endDate <- '1990-01-01' checkStartEndDate(startDate, endDate)
startDate <- '1985-01-01' endDate <- '1990-01-01' checkStartEndDate(startDate, endDate)
checkSurfaceSpan
checkSurfaceSpan(eList)
checkSurfaceSpan(eList)
eList |
named list with at least the Daily, Sample, and INFO dataframes |
eList <- Choptank_eList checkSurfaceSpan(eList)
eList <- Choptank_eList checkSurfaceSpan(eList)
Example data representing data from the Choptank River at Greensboro, MD, USGS data Data is a named list of the Daily, Sample, INFO dataframes, and the surface matrix.
head(Choptank_eList$Daily) head(Arkansas_eList$Daily)
head(Choptank_eList$Daily) head(Arkansas_eList$Daily)
Takes an eList as the input. If there are duplicated dates in the Sample data frame, will randomly select one value for that date. If there are censored values in the data set they will be replaced by random censored values. If there are no days with duplicate samples and no censored valued then the eList returned by the function will be identical to the eList that is passed to it.
cleanUp(eList, seed = NA)
cleanUp(eList, seed = NA)
eList |
named list with the INFO, Daily, and Sample dataframes and surfaces matrix. |
seed |
integer value. Defaults to NA, which will not change the current seed. Setting the seed to any given value can be used to create repeatable output. |
This function is run before each iteration of generating a random sequence in the
WRTDSKalman
function
eList with duplicated dates in the Sample data frame randomly sampled and censored values are replaced by random values.
eList <- Choptank_eList eList <- cleanUp(eList)
eList <- Choptank_eList eList <- cleanUp(eList)
Using raw data that has at least dateTime, value, code, populates the measured data portion of the Sample dataframe used in EGRET. ConcLow = Lower bound for an observed concentration ConcHigh = Upper bound for an observed concentration Uncen = 1 if uncensored, 0 if censored
compressData(data, verbose = TRUE)
compressData(data, verbose = TRUE)
data |
dataframe contains at least dateTime, code, value, columns in that order. If there are more than the initial date, code, value...it combines the data is combined as using interval censored concepts. |
verbose |
logical specifying whether or not to display progress message |
data frame returnDataFrame data frame containing dateTime, ConcHigh, ConcLow, Uncen
dateTime <- c('1985-01-01', '1985-01-02', '1985-01-03') comment1 <- c("","","") value1 <- c(1,2,3) comment2 <- c("","<","") value2 <- c(2,3,4) comment3 <- c("","","<") value3 <- c(3,4,5) dataInput <- data.frame(dateTime, comment1, value1, comment2, value2, comment3, value3, stringsAsFactors=FALSE) compressData(dataInput)
dateTime <- c('1985-01-01', '1985-01-02', '1985-01-03') comment1 <- c("","","") value1 <- c(1,2,3) comment2 <- c("","<","") value2 <- c(2,3,4) comment3 <- c("","","<") value3 <- c(3,4,5) dataInput <- data.frame(dateTime, comment1, value1, comment2, value2, comment3, value3, stringsAsFactors=FALSE) compressData(dataInput)
Some details about the concUnit class
A character specifying the long name for concentration labels.
A character specifying the short name for concentration labels.
fluxConst | Flux conversion object |
qConst | Flow conversion object |
monthInfo | Month object |
fluxConst fluxConst[['kgDay']] fluxConst[['kgDay']]@unitName qConst qConst[['cfs']] qConst[['cfs']]@qUnitName concConst[['concentration']] concConst[['concentration']]@shortPrefix
fluxConst fluxConst[['kgDay']] fluxConst[['kgDay']]@unitName qConst qConst[['cfs']] qConst[['cfs']]@qUnitName concConst[['concentration']] concConst[['concentration']]@shortPrefix
This function computes the first day of the calendar year at which a specific fraction of the cumulative flow for that year has been exceeded. Typically one looks for the point where half the cumulative flow has happened (fract = 0.5). The portion of the year being considered is set by paStart and paLong. The matrix returned has 2 columns: the first is the year (integer when the period of analysis ends), the second is the day of the year when the fraction has been exceeded. None of the rows will have any NA values.
cumQdate(eList, paStart = 10, paLong = 12, fract = 0.5)
cumQdate(eList, paStart = 10, paLong = 12, fract = 0.5)
eList |
named list with at least the Sample and INFO dataframes |
paStart |
numeric integer specifying the starting month for the period of analysis, 1 <= paStart <= 12, default is 10 |
paLong |
numeric integer specifying the length of the period of analysis, in months, 1 <= paLong <= 12, default is 12 |
fract |
numeric fraction of the flow |
It is common to use this type of analysis on the snowmelt period of the year. If (for example) we assume that snowmelt starts with the month of March and ends in July then we would set paStart = 3 and paLong = 5
annualSeries an integer matrix of two columns. The first column is the calendar year for the end of the period The second column is day of the year when the flow has exceeded the specified fraction of the entire period being considered
eList <- Choptank_eList annualFlow <- cumQdate(eList) head(annualFlow) plot(annualFlow) mod1 <- stats::lm(annualFlow[,2] ~ annualFlow[,1]) summary(mod1)
eList <- Choptank_eList annualFlow <- cumQdate(eList) head(annualFlow) plot(annualFlow) mod1 <- stats::lm(annualFlow[,2] ~ annualFlow[,1]) summary(mod1)
Gives a summary of data to be used for WRTDS analysis
dataOverview(Daily, Sample)
dataOverview(Daily, Sample)
Daily |
dataframe |
Sample |
dataframe |
eList <- Choptank_eList exDaily <- getDaily(eList) exSample <- getSample(eList) dataOverview(Daily = exDaily, Sample = exSample)
eList <- Choptank_eList exDaily <- getDaily(eList) exSample <- getSample(eList) dataOverview(Daily = exDaily, Sample = exSample)
Checks to see if format is YYYY-MM-DD. Also performs a few other date checks.
dateFormatCheck(date)
dateFormatCheck(date)
date |
character |
condition logical TRUE or FALSE if checks passed or failed
date <- '1985-01-01' dateFormatCheck(date) dateWrong <- '1999/1/7' dateFormatCheck(dateWrong)
date <- '1985-01-01' dateFormatCheck(date) dateWrong <- '1999/1/7' dateFormatCheck(dateWrong)
Create a decimal date or date/time from a vector.
decimalDate(rawData)
decimalDate(rawData)
rawData |
vector of dates or dateTimes. |
dateTime <- c('1984-02-28 13:56', '1984-03-01 00:00', '1986-03-01 00:00', '1986-10-15 00:00') decimalDate(dateTime) dateTime <- c('1984-02-28', '1984-03-01', '1986-03-01', '1986-10-15') decimalDate(dateTime)
dateTime <- c('1984-02-28 13:56', '1984-03-01 00:00', '1986-03-01 00:00', '1986-10-15 00:00') decimalDate(dateTime) dateTime <- c('1984-02-28', '1984-03-01', '1986-03-01', '1986-10-15') decimalDate(dateTime)
decimalHighLow figures out the highest and lowest decimal year based on water year. The input is a data frame with columns Month and DecYear.
decimalHighLow(df)
decimalHighLow(df)
df |
data.frame with Month, DecYear, and Month columns |
list with DecHigh and DecLow (water year high/low decimal values)
eList <- Choptank_eList highLow <- decimalHighLow(eList$Sample) DecHigh <- highLow[["DecHigh"]] DecLow <- highLow[["DecLow"]]
eList <- Choptank_eList highLow <- decimalHighLow(eList$Sample) DecHigh <- highLow[["DecHigh"]] DecLow <- highLow[["DecLow"]]
This function takes a fitted WRTDS model and computes error statistics the residuals used here are cross-validation residuals, which will be slightly larger than regular regression residuals in the case of censored data, the residuals are computed from random residuals computed from makeAugmentedSample(), the function returns a list of error statistics and also prints them to the console
errorStats(eList)
errorStats(eList)
eList |
named list with at least the Daily, Sample, and INFO dataframes |
erStats a numeric vector consisting of the following statistics RsqLC the R squared value for predictions of ln(Concentration) RsqLF the R squared value for predictions of ln(Flux) rmse the root mean squared error for ln(Concentration), same value would apply for Flux sepPercent the standard error of prediction for Concentration, expressed in percent same value would apply for Flux
eList <- Choptank_eList errorStats(eList)
eList <- Choptank_eList errorStats(eList)
This function fits the WRTDS model n times (where n is the number of observations). For each fit, the data value being estimated is eliminated from the record. This gives predictions that do not depend on knowing the actual result for that day. Thus it provides for a more "honest" estimate of model performance than a traditional error analysis that uses all the data.
estCrossVal(DecLow, DecHigh, Sample, windowY = 7, windowQ = 2, windowS = 0.5, minNumObs = 100, minNumUncen = 50, edgeAdjust = TRUE, verbose = TRUE)
estCrossVal(DecLow, DecHigh, Sample, windowY = 7, windowQ = 2, windowS = 0.5, minNumObs = 100, minNumUncen = 50, edgeAdjust = TRUE, verbose = TRUE)
DecLow |
number specifying minimum decimal year |
DecHigh |
number specifying maximum decimal year |
Sample |
data frame containing the sample values, default is Sample |
windowY |
numeric specifying the half-window width in the time dimension, in units of years, default is 7 |
windowQ |
numeric specifying the half-window width in the discharge dimension, units are natural log units, default is 2 |
windowS |
numeric specifying the half-window with in the seasonal dimension, in units of years, default is 0.5 |
minNumObs |
numeric specifying the miniumum number of observations required to run the weighted regression, default is 100 |
minNumUncen |
numeric specifying the minimum number of uncensored observations to run the weighted regression, default is 50 |
edgeAdjust |
logical specifying whether to use the modified method for calculating the windows at the edge of the record. The modified method tends to reduce curvature near the start and end of record. Default is TRUE. |
verbose |
logical specifying whether or not to display progress message |
SampleCrossV data frame containing the sample data augmented by the results of the cross-validation exercise
eList <- Choptank_eList Sample <- getSample(eList) Daily <- getDaily(eList) numDays <- length(Daily$DecYear) DecLow <- Daily$DecYear[1] DecHigh <- Daily$DecYear[numDays] SampleCrossV <- estCrossVal(DecLow,DecHigh,Sample)
eList <- Choptank_eList Sample <- getSample(eList) Daily <- getDaily(eList) numDays <- length(Daily$DecYear) DecLow <- Daily$DecYear[1] DecHigh <- Daily$DecYear[numDays] SampleCrossV <- estCrossVal(DecLow,DecHigh,Sample)
Uses the surfaces matrix estimated in estSurfaces to estimate 6 daily time series and appends them to the Daily data frame. The time series are (in order): yHat, the estimated natural log of concentration, dimensionless SE, the standard error of the natural log of concentration ConcDay, the estimated concentration in mg/L FluxDay, the estimated flux in kg/day FNConc, the flow-normalized concentration in mg/L FNFlux, the flow-normalized flux in kg/day
Bin the LogQ values by day-of-year.
estDailyFromSurfaces(eList, localsurfaces = NA, localDaily = NA) getConcFluxFromSurface(eList, allLogQsByDayOfYear, localDaily, localsurfaces = NA) getSurfaceEstimates(eList, localsurfaces = NA, localDaily = NA) bin_Qs(localDaily)
estDailyFromSurfaces(eList, localsurfaces = NA, localDaily = NA) getConcFluxFromSurface(eList, allLogQsByDayOfYear, localDaily, localsurfaces = NA) getSurfaceEstimates(eList, localsurfaces = NA, localDaily = NA) bin_Qs(localDaily)
eList |
named list with at least the Daily and INFO dataframes, and the surface matrix |
localsurfaces |
surface over-riding the one stored in eList. Default is NA. |
localDaily |
data frame to override eList$Daily. Default is NA. |
allLogQsByDayOfYear |
list |
The results are stored in an augmented version of the Daily data frame, which is returned as part of an EGRET object.
egret object with altered Daily dataframe
Daily dataframe with yHat, SE, ConcDay and FluxDay calulated
eList <- Choptank_eList ################################################# # This is usually done in modelEstimation: Daily <- getDaily(eList) surfaceIndexParameters<-surfaceIndex(Daily) INFO <- eList$INFO INFO$bottomLogQ<-surfaceIndexParameters[['bottomLogQ']] INFO$stepLogQ<-surfaceIndexParameters[['stepLogQ']] INFO$nVectorLogQ<-surfaceIndexParameters[['nVectorLogQ']] INFO$bottomYear<-surfaceIndexParameters[['bottomYear']] INFO$stepYear<-surfaceIndexParameters[['stepYear']] INFO$nVectorYear<-surfaceIndexParameters[['nVectorYear']] eList$INFO <- INFO ################################################# Daily <- estDailyFromSurfaces(eList)
eList <- Choptank_eList ################################################# # This is usually done in modelEstimation: Daily <- getDaily(eList) surfaceIndexParameters<-surfaceIndex(Daily) INFO <- eList$INFO INFO$bottomLogQ<-surfaceIndexParameters[['bottomLogQ']] INFO$stepLogQ<-surfaceIndexParameters[['stepLogQ']] INFO$nVectorLogQ<-surfaceIndexParameters[['nVectorLogQ']] INFO$bottomYear<-surfaceIndexParameters[['bottomYear']] INFO$stepYear<-surfaceIndexParameters[['stepYear']] INFO$nVectorYear<-surfaceIndexParameters[['nVectorYear']] eList$INFO <- INFO ################################################# Daily <- estDailyFromSurfaces(eList)
This function uses weighted survival regression to estimate three surfaces that cover the complete range of DecYear and log(Q) values in the Daily data set. These surfaces are: (1) is the estimated log concentration (yHat), (2) is the estimated standard error (SE), (3) is the estimated concentration (ConcHat). They are mapped as an array that covers the complete space of daily discharge and time. The first index is discharge, layed out in 14 equally spaced levels of log(Q). The second index is time, layed out as 16 increments of the calendar year, starting January 1. It returns the 3 dimensional array called surfaces. This array will be used to estimate these 3 quantities for any given day in the daily values record.
estSurfaces(eList, surfaceStart = NA, surfaceEnd = NA, localSample = NA, windowY = 7, windowQ = 2, windowS = 0.5, minNumObs = 100, minNumUncen = 50, edgeAdjust = TRUE, verbose = TRUE, interactive = NULL, run.parallel = FALSE)
estSurfaces(eList, surfaceStart = NA, surfaceEnd = NA, localSample = NA, windowY = 7, windowQ = 2, windowS = 0.5, minNumObs = 100, minNumUncen = 50, edgeAdjust = TRUE, verbose = TRUE, interactive = NULL, run.parallel = FALSE)
eList |
named list with at least the Sample and Daily dataframes |
surfaceStart |
Date object for start of surface slice (or character starting date for data retrieval in the form YYYY-MM-DD). Default is NA . |
surfaceEnd |
Date object for end of surface slice (or character starting date for data retrieval in the form YYYY-MM-DD). Default is NA . |
localSample |
data frame to override eList$Sample. Default is NA . |
windowY |
numeric specifying the half-window width in the time dimension, in units of years, default is 7 |
windowQ |
numeric specifying the half-window width in the discharge dimension, units are natural log units, default is 2 |
windowS |
numeric specifying the half-window with in the seasonal dimension, in units of years, default is 0.5 |
minNumObs |
numeric specifying the miniumum number of observations required to run the weighted regression, default is 100 |
minNumUncen |
numeric specifying the minimum number of uncensored observations to run the weighted regression, default is 50 |
edgeAdjust |
logical specifying whether to use the modified method for calculating the windows at the edge of the record. Default is TRUE. |
verbose |
logical specifying whether or not to display progress message |
interactive |
logical deprecated. Use 'verbose' instead |
run.parallel |
logical to run bootstrapping in parallel or not |
surfaces array containing the three surfaces estimated, array is 3 dimensional
eList <- Choptank_eList surfaces <- estSurfaces(eList) surfaceStart <- "1984-10-01" surfaceEnd <- "1986-09-30" surfaces_1 <- estSurfaces(eList, surfaceStart, surfaceEnd) wall_sample <- head(eList$Sample, n=500) surface_wall <- estSurfaces(eList, localSample = wall_sample)
eList <- Choptank_eList surfaces <- estSurfaces(eList) surfaceStart <- "1984-10-01" surfaceEnd <- "1986-09-30" surfaces_1 <- estSurfaces(eList, surfaceStart, surfaceEnd) wall_sample <- head(eList$Sample, n=500) surface_wall <- estSurfaces(eList, localSample = wall_sample)
Used for updating the Sample dataframe if ConcLow or ConcHigh is manually adjusted. Adjusts ConcAve and Uncen columns.
fixSampleFrame(eList)
fixSampleFrame(eList)
eList |
named list with at least the Sample dataframes |
localSample data frame
eList <- Choptank_eList Sample <- eList$Sample Sample[1,c("ConcLow","ConcHigh")] <- c(NA, 0.01) # Adjusted to left-censored Sample[2,c("ConcLow","ConcHigh")] <- c(1.1, 1.3) # Adjusted to interval-censored Sample[3,c("ConcLow","ConcHigh")] <- c(1.3, 1.3) # Simple adjustment eList$Sample <- Sample eList <- fixSampleFrame(eList) eList$Sample[1:3,]
eList <- Choptank_eList Sample <- eList$Sample Sample[1,c("ConcLow","ConcHigh")] <- c(NA, 0.01) # Adjusted to left-censored Sample[2,c("ConcLow","ConcHigh")] <- c(1.1, 1.3) # Adjusted to interval-censored Sample[3,c("ConcLow","ConcHigh")] <- c(1.3, 1.3) # Simple adjustment eList$Sample <- Sample eList <- fixSampleFrame(eList) eList$Sample[1:3,]
This function implements generalized flow normalization. This means that for determining the flow normalized concentration and flow normalized flux for any given year, there is a specified list of years from which to create the discharge record used in the flow-normalization process. That set of years is defined by the dateInfo object.
flexFN(eList, dateInfo, localsurfaces = NA, oldSurface = FALSE, flowNormStartCol = "flowNormStart", flowNormEndCol = "flowNormEnd", flowStartCol = "flowStart", flowEndCol = "flowEnd")
flexFN(eList, dateInfo, localsurfaces = NA, oldSurface = FALSE, flowNormStartCol = "flowNormStart", flowNormEndCol = "flowNormEnd", flowStartCol = "flowStart", flowEndCol = "flowEnd")
eList |
named list with at least the Daily, Sample, and INFO dataframes |
dateInfo |
data frame with 4 columns. The column names and descriptions are described below. Default is NA. |
localsurfaces |
surface (3-dimensional matrix) over-riding the one stored in eList Default = NA. |
oldSurface |
logical, if TRUE, use the surface object in eList. Default is FALSE. |
flowNormStartCol |
character, name of the column in dateInfo that starts the segment for the flow normalization |
flowNormEndCol |
character, name of the column in dateInfo that ends the segment for the flow normalization |
flowStartCol |
character, name of the column in dateInfo that starts the segment for the portion of the flow to be populated with flow-normalized values. |
flowEndCol |
character, name of the column in dateInfo that ends the segment for the portion of the flow to be populated with flow-normalized values. |
named list, eList, containing INFO, Daily, Sample, and surfaces objects
eList <- Choptank_eList eList <- setUpEstimation(eList) flowNormStart <- c("1979-10-01","1990-01-01","1992-10-10") flowNormEnd <- c("1995-06-06","2004-03-03","2011-09-29") flowStart <- c("1979-10-01","1995-06-07","2004-03-04") flowEnd <- c("1995-06-06","2004-03-03","2011-09-29") dateInfo <- data.frame(flowNormStart, flowNormEnd, flowStart, flowEnd, stringsAsFactors = FALSE) newEList <- flexFN(eList, dateInfo) plotFluxHist(newEList) flexPlotAddOn(newEList) wallSurface <- estSurfaces(eList, localSample = eList$Sample[1:500,]) wallEList <- flexFN(eList, dateInfo, localsurface = wallSurface) plotFluxHist(wallEList)
eList <- Choptank_eList eList <- setUpEstimation(eList) flowNormStart <- c("1979-10-01","1990-01-01","1992-10-10") flowNormEnd <- c("1995-06-06","2004-03-03","2011-09-29") flowStart <- c("1979-10-01","1995-06-07","2004-03-04") flowEnd <- c("1995-06-06","2004-03-03","2011-09-29") dateInfo <- data.frame(flowNormStart, flowNormEnd, flowStart, flowEnd, stringsAsFactors = FALSE) newEList <- flexFN(eList, dateInfo) plotFluxHist(newEList) flexPlotAddOn(newEList) wallSurface <- estSurfaces(eList, localSample = eList$Sample[1:500,]) wallEList <- flexFN(eList, dateInfo, localsurface = wallSurface) plotFluxHist(wallEList)
Flexible Flow Normalization Plot Add On
flexPlotAddOn(eList, showArrows = TRUE, showRect = TRUE, customPalette = NULL)
flexPlotAddOn(eList, showArrows = TRUE, showRect = TRUE, customPalette = NULL)
eList |
named list with at least the Daily, Sample, and INFO dataframes |
showArrows |
logical whether or not to show arrows representing flow segments |
showRect |
logical whether or not to show rectangles representing sample segments |
customPalette |
character vector of colors as a hexadecimal string of the form "#rrggbb". Defaults to NULL, which indicates the use of a default palette (up to 21 segments). |
eList <- Choptank_eList eList <- setUpEstimation(eList) flowNormStart <- c("1979-10-01","1990-01-01","1992-10-10") flowNormEnd <- c("1995-06-06","2004-03-03","2011-09-29") flowStart <- c("1979-10-01","1995-06-07","2004-03-04") flowEnd <- c("1995-06-06","2004-03-03","2011-09-29") dateInfo <- data.frame(flowNormStart, flowNormEnd, flowStart, flowEnd, stringsAsFactors = FALSE) newEList <- flexFN(eList, dateInfo) plotFluxHist(newEList) flexPlotAddOn(newEList) plotFluxHist(newEList) flexPlotAddOn(newEList, customPalette=c("#d5ce48", "#fd300f", "#3e0289"))
eList <- Choptank_eList eList <- setUpEstimation(eList) flowNormStart <- c("1979-10-01","1990-01-01","1992-10-10") flowNormEnd <- c("1995-06-06","2004-03-03","2011-09-29") flowStart <- c("1979-10-01","1995-06-07","2004-03-04") flowEnd <- c("1995-06-06","2004-03-03","2011-09-29") dateInfo <- data.frame(flowNormStart, flowNormEnd, flowStart, flowEnd, stringsAsFactors = FALSE) newEList <- flexFN(eList, dateInfo) plotFluxHist(newEList) flexPlotAddOn(newEList) plotFluxHist(newEList) flexPlotAddOn(newEList, customPalette=c("#d5ce48", "#fd300f", "#3e0289"))
This function is useful for helping the analyst determine the empirical probability distribution of streamflow for a particular part of the year or for the whole year. This is particularly useful in setting up discharge scales for various other plots in this package.
flowDuration(eList, centerDate = "09-30", qUnit = 2, span = 365, monthLab = 1)
flowDuration(eList, centerDate = "09-30", qUnit = 2, span = 365, monthLab = 1)
eList |
named list with at least Daily and INFO dataframes |
centerDate |
character specifying the center date of the part of the year for which the flow duration is to be calculated, it is in the form "mm-dd" (it must be in quotes). Default is "09-30" |
qUnit |
object of qUnit class |
span |
number this is the half-width of the window over which the discharge values are to be used in constructing the flow-duration curve. If the full year is desired any value greater than 182 will. Note that for a window of about 2-months width, a span value should be about 30. Default is 365. |
monthLab |
object of monthLabel class, or numeric represented the short code, or character representing the descriptive name. |
qDuration A named vector with flow duration information.
eList <- Choptank_eList # for a window of 30 days either side of June 25 expressed in units # of cfs: flowDuration(eList, "06-25", qUnit = 1, span = 30) # for a flow-duration curve covering the whole year, # expressed in units of cms, and returning a data frame of results: qDuration <- flowDuration(eList, qUnit = 2)
eList <- Choptank_eList # for a window of 30 days either side of June 25 expressed in units # of cfs: flowDuration(eList, "06-25", qUnit = 1, span = 30) # for a flow-duration curve covering the whole year, # expressed in units of cms, and returning a data frame of results: qDuration <- flowDuration(eList, qUnit = 2)
These plots use the jack-knife estimates from WRTDS to investigate the potential flux bias problem. It can also be used for estimates constructed by other methods (such as LOADEST) if the results are stored in a data frame organized like the Sample data frame. It allows additional label information to indicate what method is used. The use of this plot is described in Hirsch, Robert M., 2014. Large Biases in Regression-Based Constituent Flux Estimates: Causes and Diagnostic Tools. Journal of the American Water Resources Association (JAWRA) 1-24. DOI: 10.1111/jawr.12195
Although there are a lot of optional arguments to this function, most are set to a logical default.
Data come from named list, which contains a Sample dataframe with the sample data, a Daily dataframe with the daily flow data, and an INFO dataframe with metadata.
fluxBiasMulti(eList, qUnit = 2, fluxUnit = 3, moreTitle = "WRTDS", cex = 0.7, cex.axis = 1.1, cex.main = 1.1, randomCensored = FALSE, col = "black", lwd = 1, concLab = 1, monthLab = 1, ...)
fluxBiasMulti(eList, qUnit = 2, fluxUnit = 3, moreTitle = "WRTDS", cex = 0.7, cex.axis = 1.1, cex.main = 1.1, randomCensored = FALSE, col = "black", lwd = 1, concLab = 1, monthLab = 1, ...)
eList |
named list with at least Sample, Daily, and INFO dataframes |
qUnit |
object of qUnit class. |
fluxUnit |
object of fluxUnit class. |
moreTitle |
character specifying some additional information to go in figure title, typically some information about the specific estimation method used, default is no additional information |
cex |
numerical value giving the amount by which plotting symbols should be magnified |
cex.axis |
magnification to be used for axis annotation relative to the current setting of cex |
cex.main |
magnification to be used for main titles relative to the current setting of cex |
randomCensored |
logical, if TRUE plot a random value for censored data. Default is FALSE. |
col |
color of points on plot, see ?par 'Color Specification' |
lwd |
number line width |
concLab |
object of concUnit class, or numeric represented the short code,
or character representing the descriptive name. By default, this argument sets
concentration labels to use either Concentration or Conc (for tiny plots). Units
are taken from the eList$INFO$param.units. To use any other words than
"Concentration" see |
monthLab |
object of monthLabel class, or numeric represented the short code, or character representing the descriptive name. |
... |
arbitrary graphical parameters that will be passed to genericEGRETDotPlot function (see ?par for options) |
eList <- Choptank_eList # Water year: fluxBiasMulti(eList) fluxBiasMulti(eList, fluxUnit = 2) # Graphs consisting of Jun-Aug eList <- setPA(eList,paStart=6,paLong=3) fluxBiasMulti(eList)
eList <- Choptank_eList # Water year: fluxBiasMulti(eList) fluxBiasMulti(eList, fluxUnit = 2) # Graphs consisting of Jun-Aug eList <- setPA(eList,paStart=6,paLong=3) fluxBiasMulti(eList)
Computes three versions of the flux bias: The first where all censored values are set to their miniumum. The second where all censored values are set to their maximum. The third which is the average of the other two. In practice there is rarely a noticable difference among them.
fluxBiasStat(localSample)
fluxBiasStat(localSample)
localSample |
data frame that contains the concentration data, default name is Sample |
fluxBias a vector of three numerical values, a lower bound, upper bound and an average estimate of the ratio of (mean estimated flux - mean observed flux) / mean estimated flux. Typically one should use fluxBias[3]
eList <- Choptank_eList Sample <- getSample(eList) fluxBias <- fluxBiasStat(Sample)
eList <- Choptank_eList Sample <- getSample(eList) fluxBias <- fluxBiasStat(Sample)
Some details about the fluxUnit class
A character specifying the short name.
A numeric representing the conversion factor
A character specifying the full name.
An expression specifying the full name starting with Observed.
An expression specifying the abbreviated name starting with Observed.
An expression specifying the full name starting with Estimated.
An expression specifying the abbreviated name starting with Estimated.
A character specifying flux with full text.
A number for quick lookup
Discharge axis tick generation
generalAxis(x, maxVal, minVal, units = NA, logScale = FALSE, tinyPlot = FALSE, padPercent = 5, concentration = TRUE, concLab = 1, usgsStyle = FALSE, prettyDate = TRUE)
generalAxis(x, maxVal, minVal, units = NA, logScale = FALSE, tinyPlot = FALSE, padPercent = 5, concentration = TRUE, concLab = 1, usgsStyle = FALSE, prettyDate = TRUE)
x |
vector to create scale about |
maxVal |
number maximum value on returned scale |
minVal |
number minimum value on returned scale |
units |
character concentration units. Typically found in INFO$param.units. |
logScale |
logical whether or not to return a log scale |
tinyPlot |
logical |
padPercent |
number used to pad the max and min if not specified |
concentration |
logical if concentration=TRUE, labels returned as concentration units, otherwise flux units. |
concLab |
object of concUnit class, or numeric represented the short code,
or character representing the descriptive name. By default, this argument sets
concentration labels to use either Concentration or Conc (for tiny plots). Units
are taken from the eList$INFO$param.units. To use any other words than
"Concentration" see |
usgsStyle |
logical option to use USGS style guidelines. Setting this option to TRUE does NOT guarantee USGS compliance. It will only change automatically generated labels |
prettyDate |
logical use 'pretty' limits for date axis if TRUE, or force the yearStart/yearEnd as limits if FALSE |
eList <- Choptank_eList Daily <- getDaily(eList) INFO <- getInfo(eList) x <- Daily$Q max <- max(x) min <- 0 units <- INFO$param.units generalAxis(x, max, min, units) min <- min(x) generalAxis(x, max, min, units, log=TRUE) generalAxis(Daily$ConcDay, 100, 0, concLab = "concentration")
eList <- Choptank_eList Daily <- getDaily(eList) INFO <- getInfo(eList) x <- Daily$Q max <- max(x) min <- 0 units <- INFO$param.units generalAxis(x, max, min, units) min <- min(x) generalAxis(x, max, min, units, log=TRUE) generalAxis(Daily$ConcDay, 100, 0, concLab = "concentration")
Basic plotting framework for EGRET dot plots. Graphical parameters default to values that work well with most plots, but all can be re-assigned. See ?par for complete definitions of most optional input variables.
genericEGRETDotPlot(x, y, xlim, ylim, xTicks = pretty(xlim), yTicks = pretty(ylim), printTitle = TRUE, xaxs = "i", xlab = "", yaxs = "i", ylab = "", plotTitle = "", pch = 20, cex = 0.7, cex.main = 1.3, font.main = 2, cex.lab = 1.2, tcl = 0.5, cex.axis = 1, las = 1, xDate = FALSE, tinyPlot = FALSE, hLine = FALSE, oneToOneLine = FALSE, rmSciX = FALSE, rmSciY = FALSE, customPar = FALSE, col = "black", lwd = 1, showXLabels = TRUE, showYLabels = TRUE, showXAxis = TRUE, showYAxis = TRUE, removeFirstX = FALSE, removeLastX = FALSE, removeFirstY = FALSE, removeLastY = FALSE, ...)
genericEGRETDotPlot(x, y, xlim, ylim, xTicks = pretty(xlim), yTicks = pretty(ylim), printTitle = TRUE, xaxs = "i", xlab = "", yaxs = "i", ylab = "", plotTitle = "", pch = 20, cex = 0.7, cex.main = 1.3, font.main = 2, cex.lab = 1.2, tcl = 0.5, cex.axis = 1, las = 1, xDate = FALSE, tinyPlot = FALSE, hLine = FALSE, oneToOneLine = FALSE, rmSciX = FALSE, rmSciY = FALSE, customPar = FALSE, col = "black", lwd = 1, showXLabels = TRUE, showYLabels = TRUE, showXAxis = TRUE, showYAxis = TRUE, removeFirstX = FALSE, removeLastX = FALSE, removeFirstY = FALSE, removeLastY = FALSE, ...)
x |
vector specifying the x data (required) |
y |
vector specifying the y data (required) |
xlim |
vector specifying the x plotting range (required) |
ylim |
vector specifying the y plotting range (required) |
xTicks |
vector specifying x axis tick placement (required) |
yTicks |
vector specifying y axis tick placement (required) |
printTitle |
logical defaults to TRUE, plotting parameter to control whether to have title |
xaxs |
character defaults to "i", defines the style of x-axis interval calculation. Possible values are i, r, e, s, d. |
xlab |
character defaults to "", defines the x label |
yaxs |
character defaults to "i", defines the style of y-axis interval calculation. Possible values are i, r, e, s, d. |
ylab |
character defaults to "", defines the y label |
plotTitle |
character defaults to "", defines the plot title |
pch |
number defaults to 20, specifies plot symbol |
cex |
number defaults to 0.7, specifies plotting text magnification |
cex.main |
number defaults to 1.3, specifies title text magnification |
font.main |
number defaults to 2, specifies which font to use for text |
cex.lab |
number defaults to 1.2 specifies label text magnification |
tcl |
number defaults to 0.5, specifies length of tick marks as fraction of height of a line of text. |
cex.axis |
number defaults to 1, specifies axis text magnification |
las |
number represents style of axis labels |
xDate |
logical defaults to FALSE, changes x label to "year-month" format if set to TRUE and total years less than 4. |
tinyPlot |
logical defaults to FALSE, if TRUE, changes defaults to be appropriate for multi-plot |
hLine |
logical defaults to FALSE, inserts horizontal line at zero |
oneToOneLine |
logical defaults to FALSE, inserts 1:1 line |
rmSciX |
logical defaults to FALSE, changes x label from scientific to fixed |
rmSciY |
logical defaults to FALSE, changes y label from scientific to fixed |
customPar |
logical defaults to FALSE. If TRUE, par() should be set by user before calling this function |
col |
color of points on plot, see ?par 'Color Specification' |
lwd |
number line width |
showXLabels |
logical defaults to TRUE. If FALSE, the x axis label is not plotted |
showYLabels |
logical defaults to TRUE. If FALSE, the y axis label is not plotted |
showXAxis |
logical defaults to TRUE. If FALSE, the x axis is not plotted |
showYAxis |
logical defaults to TRUE. If FALSE, the y axis is not plotted |
removeFirstX |
logical defaults to FALSE. If TRUE, removes the first x axis label. This can be handy for plotting mutliple plots. |
removeLastX |
logical defaults to FALSE. If TRUE, removes the last x axis label. This can be handy for plotting mutliple plots. |
removeFirstY |
logical defaults to FALSE. If TRUE, removes the first y axis label. This can be handy for plotting mutliple plots. |
removeLastY |
logical defaults to FALSE. If TRUE, removes the last y axis label. This can be handy for plotting mutliple plots. |
... |
additional graphical parameters can be adjusted |
eList <- Choptank_eList Daily <- getDaily(eList) x <- Daily$Date y <- Daily$Q xlim <- c(min(x),max(x)) ylim <- c(min(y),1.05*max(y)) xlab <- "Date" ylab <- "Flow" genericEGRETDotPlot(x=x, y=y, xlim=xlim, ylim=ylim, xlab=xlab, ylab=ylab, plotTitle="Test" )
eList <- Choptank_eList Daily <- getDaily(eList) x <- Daily$Date y <- Daily$Q xlim <- c(min(x),max(x)) ylim <- c(min(y),1.05*max(y)) xlab <- "Date" ylab <- "Flow" genericEGRETDotPlot(x=x, y=y, xlim=xlim, ylim=ylim, xlab=xlab, ylab=ylab, plotTitle="Test" )
From a named list or EGRET object, extract the Daily dataframe
getDaily(x, ...) ## S3 method for class 'egret' getDaily(x, ...) ## Default S3 method: getDaily(x, ...)
getDaily(x, ...) ## S3 method for class 'egret' getDaily(x, ...) ## Default S3 method: getDaily(x, ...)
x |
EGRET object or named list |
... |
additional parameters |
Daily dataframe
eList <- Choptank_eList Daily <- getDaily(eList)
eList <- Choptank_eList Daily <- getDaily(eList)
From a named list or EGRET object, extract the INFO dataframe
getInfo(x, ...) ## S3 method for class 'egret' getInfo(x, ...) ## Default S3 method: getInfo(x, ...)
getInfo(x, ...) ## S3 method for class 'egret' getInfo(x, ...) ## Default S3 method: getInfo(x, ...)
x |
EGRET object or named list |
... |
additional parameters |
INFO dataframe
eList <- Choptank_eList INFO <- getInfo(eList)
eList <- Choptank_eList INFO <- getInfo(eList)
From a named list or EGRET object, extract the Sample dataframe
getSample(x, ...) getSample(x, ...) getSample.default(x, ...)
getSample(x, ...) getSample(x, ...) getSample.default(x, ...)
x |
EGRET object or named list |
... |
additional parameters |
Sample dataframe
eList <- Choptank_eList Sample <- getSample(eList)
eList <- Choptank_eList Sample <- getSample(eList)
From a named list or EGRET object, extract the surfaces matrix
getSurfaces(x, ...) ## S3 method for class 'egret' getSurfaces(x, ...) ## Default S3 method: getSurfaces(x, ...)
getSurfaces(x, ...) ## S3 method for class 'egret' getSurfaces(x, ...) ## Default S3 method: getSurfaces(x, ...)
x |
EGRET object or named list |
... |
additional parameters |
Sample dataframe
eList <- Choptank_eList surfaces <- getSurfaces(eList)
eList <- Choptank_eList surfaces <- getSurfaces(eList)
Populates INFO data frame from either NWIS (readNWISInfo
),
Water Quality Portal (readWQPInfo
), or user-supplied files (readUserInfo
).
readNWISInfo(siteNumber, parameterCd, interactive = TRUE) readWQPInfo(siteNumber, parameterCd, interactive = TRUE) readUserInfo(filePath, fileName, hasHeader = TRUE, separator = ",", interactive = TRUE)
readNWISInfo(siteNumber, parameterCd, interactive = TRUE) readWQPInfo(siteNumber, parameterCd, interactive = TRUE) readUserInfo(filePath, fileName, hasHeader = TRUE, separator = ",", interactive = TRUE)
siteNumber |
character site number. For |
parameterCd |
character USGS parameter code (a 5 digit number) or characteristic name (if using |
interactive |
logical Option for interactive mode. If true, there is user interaction for error handling and data checks. |
filePath |
character specifying the path to the file (used in |
fileName |
character name of file to open (used in |
hasHeader |
logical true if the first row of data is the column headers (used in |
separator |
character that separates data cells (used in |
INFO data frame. Any metadata can be stored in INFO. However, there are 8 columns that EGRET uses by name in some functions:
Required column | Used in function | Description |
param.units*** | All concentration plotting functions | The units as listed in this field are used to create the concentration axis labels |
shortName | All plotting functions | Station short name, used to label plots |
paramShortName | All plotting functions | Parameter short name, used to label plots |
drainSqKm | plotFlowSingle , printSeries |
Calculate runoff |
constitAbbrev | saveResults |
Parameter abbrieviation, used to auto-name workspace |
staAbbrev | saveResults |
Station abbrieviation, used to auto-name workspace |
paStart | Most EGRET functions | Starting month of period of analysis. Defaults to 10 |
paLong | Most EGRET functions | Length in number of months of period of analysis. Defaults to 12 |
*** Additionally, EGRET assumes that all concentrations are saved in mg/l. If some variation of 'mg/l' is not found in INFO$param.units, functions that calculate flux will issue a warning. This is because the conversion from mg/l to the user-specified flux unit (e.g., kg/day) uses hard-coded conversion factors.
# These examples require an internet connection to run # Automatically gets information about site 05114000 and temperature INFO <- readNWISInfo('05114000','00010',interactive = FALSE) # These examples require an internet connection to run # Automatically gets information about site 01594440 and temperature, no interaction with user nameToUse <- 'Specific conductance' pcodeToUse <- '00095' # INFO <- readWQPInfo('USGS-04024315',pcodeToUse, interactive = FALSE) # INFO2 <- readWQPInfo('WIDNR_WQX-10032762',nameToUse, interactive = FALSE) # To adjust the label names: # INFO$shortName <- "Little" # INFO$paramShortName <- "SC" filePath <- system.file("extdata", package="EGRET") fileName <- 'infoTest.csv' INFO <- readUserInfo(filePath,fileName, separator=",",interactive=FALSE)
# These examples require an internet connection to run # Automatically gets information about site 05114000 and temperature INFO <- readNWISInfo('05114000','00010',interactive = FALSE) # These examples require an internet connection to run # Automatically gets information about site 01594440 and temperature, no interaction with user nameToUse <- 'Specific conductance' pcodeToUse <- '00095' # INFO <- readWQPInfo('USGS-04024315',pcodeToUse, interactive = FALSE) # INFO2 <- readWQPInfo('WIDNR_WQX-10032762',nameToUse, interactive = FALSE) # To adjust the label names: # INFO$shortName <- "Little" # INFO$paramShortName <- "SC" filePath <- system.file("extdata", package="EGRET") fileName <- 'infoTest.csv' INFO <- readUserInfo(filePath,fileName, separator=",",interactive=FALSE)
Checks object to see if it is an EGRET object
is.egret(x)
is.egret(x)
x |
object to check |
logical
eList <- Choptank_eList is.egret(eList)
eList <- Choptank_eList is.egret(eList)
This function is used in cases where there are numerical problems with the estimation of the WRTDS model. This mostly happens during bootstrap estimation or when the data sets are very large. In order to reduce the collinearity in the explanatory variables, some random noise is added to the time and log discharge variables in the Sample data frame.
jitterSam(Sam, V = 0.2)
jitterSam(Sam, V = 0.2)
Sam |
data frame with at least columns DecYear and LogQ |
V |
a multiplier for the sd of the LogQ jitter. for example V = 0.02, means that the sd of the LnQ jitter is 0.02*sdLQ |
SamR a data frame structured like the Sam data frame but with the time and discharge variables modified by adding random jitter
eList <- Choptank_eList Sample_jitter <- jitterSam(eList$Sample)
eList <- Choptank_eList Sample_jitter <- jitterSam(eList$Sample)
Axis tick marks for a log scale for cases where the data cover many orders of magnitude and the graph is small. These tick marks are designed to progress by factors of 10.
logPretty1(xMin, xMax)
logPretty1(xMin, xMax)
xMin |
A numeric value for the minimum value to be plotted, it must be > 0 |
xMax |
A numeric value for the maximum value to be plotted, it must be > xMax |
xTicks A vector representing the values for each of the tick marks
xMin <- 0.7 xMax <- 990000 logPretty1(xMin, xMax) xMin <- 3 xMax <- 15 logPretty1(xMin, xMax)
xMin <- 0.7 xMax <- 990000 logPretty1(xMin, xMax) xMin <- 3 xMax <- 15 logPretty1(xMin, xMax)
Axis tick marks for a log scale. These tick marks are designed to progress with 3 tick marks for every factor of 10. For example: 2,5,10,20,50,100,200,500.
logPretty3(xMin, xMax)
logPretty3(xMin, xMax)
xMin |
A numeric value for the minimum value to be plotted, it must be >0 |
xMax |
A numeric value for the maximum value to be plotted, it must be >xMax |
xTicks A vector representing the values for each of the tick marks
logPretty3(0.7, 990000) logPretty3(3, 15)
logPretty3(0.7, 990000) logPretty3(3, 15)
Part of the flowHistory system. The data come from Daily and INFO data frames. Note that the function setPA must be run before this to establish the period of analysis (e.g. water year).
makeAnnualSeries(eList, edgeAdjust = TRUE)
makeAnnualSeries(eList, edgeAdjust = TRUE)
eList |
named list with at least Daily and INFO dataframes |
edgeAdjust |
logical specifying whether to use the modified method for calculating the windows at the edge of the record. The modified method tends to reduce curvature near the start and end of record. Default is TRUE, but a logical in INFO$edgeAdjust will override the default. |
istat | Name |
1 | minimum 1-day daily mean discharge |
2 | minimum 7-day mean of the daily mean discharges |
3 | minimum 30-day mean of the daily mean discharges |
4 | median of the daily mean discharges |
5 | mean of the daily mean discharges |
6 | maximum 30-day mean of the daily mean discharges |
7 | maximum 7-day mean of the daily mean discharges |
8 | maximum 1-day daily mean discharge |
The smooth is a loess smooth computed on the log flow values and then transformed back to real space Smoothing window is a fixed number of years, the window width has a default value of 20 years but can be modified by changing its value in INFO data frame (using setPA function)
annualSeries matrix that contains the annual series of streamflow statistics annualSeries is a matrix 3 * 8 * numYears, where numYears is the number of years in the data set in the first dimension 1 is the year, 2 is the actual value, 3 is the smoothed value in the second dimension, the index is the istat value (identifying the flow statistic) the third dimension is year
eList <- Choptank_eList annualSeries <- makeAnnualSeries(eList)
eList <- Choptank_eList annualSeries <- makeAnnualSeries(eList)
This function is used to add two columns to the Sample data frame: rResid and rObserved. rResid is the randomized residual value computed in log concentration units, and rObserved is the randomized 'observed' value of concentration in concentration units. Both of these are computed for all censored samples ("less than values"). They are created for purposes of plotting and are not used in any computations in EGRET.
makeAugmentedSample(eList)
makeAugmentedSample(eList)
eList |
named list with at least the Sample dataframe |
The WRTDS model must be estimated before this function can be run. The random value that is generated lies between the reporting limit and zero and is distributed as a truncated log-normal distribution, with parameters derived from the fitted WRTDS model. These random values are never used in any computations in EGRET but are used for purposes of plotting the data set or residuals. When plotted in other functions they are shown as open circles.
eList named list with modified Sample data frame.
choptankAugmented <- makeAugmentedSample(Choptank_eList)
choptankAugmented <- makeAugmentedSample(Choptank_eList)
Create a data frame that organizes date segmentations for runSeries.
makeDateInfo(windowSide, surfaceStart, surfaceEnd, firstQDate0, lastQDate0)
makeDateInfo(windowSide, surfaceStart, surfaceEnd, firstQDate0, lastQDate0)
windowSide |
integer number of automatically generated span sections, default is 7. If NA, code will use |
surfaceStart |
character (or Date) in YYYY-MM-DD. Date on which we want the analysis to start, it must be at or after the |
surfaceEnd |
character (or Date) in YYYY-MM-DD. Date on which we want the analysis to end, it must be at or before the end of |
firstQDate0 |
character (or Date) in YYYY-MM-DD. The first day used in flow normalizing distributions, default is the start of eList$Daily |
lastQDate0 |
character (or Date) in YYYY-MM-DD. The last day used in flow normalizating distributions, default is the end of eList$Daily |
windowSide <- 7 surfaceStart <- "1984-01-01" surfaceEnd <- "2012-12-31" firstQDate0 <- "1970-01-01" lastQDate0 <- "2014-06-01" dateInfo <- makeDateInfo(windowSide, surfaceStart, surfaceEnd, firstQDate0, lastQDate0)
windowSide <- 7 surfaceStart <- "1984-01-01" surfaceEnd <- "2012-12-31" firstQDate0 <- "1970-01-01" lastQDate0 <- "2014-06-01" dateInfo <- makeDateInfo(windowSide, surfaceStart, surfaceEnd, firstQDate0, lastQDate0)
This function does three things. 1) It transfers the daily discharge value from the Daily data frame to to Sample data frame for those days with samples. 2) It merges the INFO, Daily and Sample data frames to form an eList object, 3) and it prints out a "report" of basic information about the Daily and Sample data frames.
mergeReport(INFO, Daily, Sample = NA, surfaces = NA, verbose = TRUE, interactive = NULL)
mergeReport(INFO, Daily, Sample = NA, surfaces = NA, verbose = TRUE, interactive = NULL)
INFO |
dataframe metadata about the Sample and Daily data frames. |
Daily |
dataframe containing the daily discharge data |
Sample |
dataframe containing the sample data |
surfaces |
matrix returned from |
verbose |
logical specifying whether or not to display summary information on the Daily and Sample dataframes. |
interactive |
logical deprecated. Use 'verbose' instead |
There must be an INFO and a Daily data frame for this function to work. That would be the case for a study of flow only, with no consideration of water quality. If water quality is being considered then INFO, Daily, and Sample all need to be provided in the call to this function.
Note that the Sample dataframe in the global environment does not update with the flow information.
eList named list with at least INFO, and Daily data frames. It can also include a Sample data frame.
siteNumber <- '01491000' pCode <- '00631' Daily <- readNWISDaily(siteNumber,'00060', '1984-10-01', '') Sample <- readNWISSample(siteNumber,pCode, '1984-10-01', '') INFO <- readNWISInfo(siteNumber,pCode,interactive=FALSE) eList <- mergeReport(INFO, Daily, Sample) Sample <- eList$Sample plot(eList) # Create eList with no water quality data: eList <- mergeReport(INFO, Daily, Sample = NA) plotFour(eList)
siteNumber <- '01491000' pCode <- '00631' Daily <- readNWISDaily(siteNumber,'00060', '1984-10-01', '') Sample <- readNWISSample(siteNumber,pCode, '1984-10-01', '') INFO <- readNWISInfo(siteNumber,pCode,interactive=FALSE) eList <- mergeReport(INFO, Daily, Sample) Sample <- eList$Sample plot(eList) # Create eList with no water quality data: eList <- mergeReport(INFO, Daily, Sample = NA) plotFour(eList)
This one function does three things. 1) a jack-knife cross-validation of a WRTDS model in which it augments the Sample data frame in the eList, 2) fits the WRTDS model creating the surfaces matrix and places it in the eList (the surfaces matrix expresses the estimated concentration as a function of discharge and time), and 3) estimates the daily values of concentration and flux, and flow normalized concentration and flux and places these in the Daily data frame in the eList. It returns a named list with the following dataframes: Daily, INFO, Sample, and the matrix: surfaces.
modelEstimation(eList, windowY = 7, windowQ = 2, windowS = 0.5, minNumObs = 100, minNumUncen = 50, edgeAdjust = TRUE, verbose = TRUE, run.parallel = FALSE)
modelEstimation(eList, windowY = 7, windowQ = 2, windowS = 0.5, minNumObs = 100, minNumUncen = 50, edgeAdjust = TRUE, verbose = TRUE, run.parallel = FALSE)
eList |
named list with at least the INFO, Daily, and Sample dataframes |
windowY |
numeric specifying the half-window width in the time dimension, in units of years, default is 7 |
windowQ |
numeric specifying the half-window width in the discharge dimension, units are natural log units, default is 2 |
windowS |
numeric specifying the half-window with in the seasonal dimension, in units of years, default is 0.5 |
minNumObs |
numeric specifying the minimum number of observations required to run the weighted regression, default is 100 |
minNumUncen |
numeric specifying the minimum number of uncensored observations to run the weighted regression, default is 50 |
edgeAdjust |
logical specifying whether to use the modified method for calculating the windows at the edge of the record. The edgeAdjust method tends to reduce curvature near the start and end of record. Default is TRUE. |
verbose |
logical specifying whether or not to display progress message |
run.parallel |
logical to run WRTDS in parallel or not |
eList named list with INFO, Daily, and Sample dataframes, along with the surfaces matrix.
eList <- Choptank_eList eList <- modelEstimation(eList)
eList <- Choptank_eList eList <- modelEstimation(eList)
Some details about the monthLabel class
A character specifying the abbreviated month name.
A character specifying the full month name
A character specifying the single letter of the month.
This function produces the 4 plots based only on the data stored in the eList. The four plots are 1) log concentration versus log discharge, 2) log concentration versus time 3) a boxplot of log concentration by month, and 4) a side-by-side boxplot of the sampled discharges and all daily discharges. To save space, the graphic is labeled only at the top of the 4 graph display.
Although there are a lot of optional arguments to this function, most are set to a logical default.
multiPlotDataOverview(eList, qUnit = 2, cex.main = 1.2, randomCensored = FALSE, logScaleConc = TRUE, logScaleQ = TRUE, concLab = 1)
multiPlotDataOverview(eList, qUnit = 2, cex.main = 1.2, randomCensored = FALSE, logScaleConc = TRUE, logScaleQ = TRUE, concLab = 1)
eList |
named list with at least Daily, Sample, and INFO dataframes |
qUnit |
object of qUnit class |
cex.main |
magnification to be used for main titles relative to the current setting of cex |
randomCensored |
logical. Show censored values as randomized. Default is FALSE. If TRUE, makeAugmentedSample must be run first. |
logScaleConc |
logical if TRUE y in concentration graphs plotted in log axis. Default is TRUE. |
logScaleQ |
logical if TRUE y in streamflow graphs plotted in log axis. Default is TRUE. |
concLab |
object of concUnit class, or numeric represented the short code,
or character representing the descriptive name. By default, this argument sets
concentration labels to use either Concentration or Conc (for tiny plots). Units
are taken from the eList$INFO$param.units. To use any other words than
"Concentration" see |
plotConcQ
, boxConcMonth
,
plotConcTime
, boxQTwice
eList <- Choptank_eList # Water year: multiPlotDataOverview(eList, qUnit=1) # Graphs consisting of Jun-Aug eList <- setPA(eList, paStart=6,paLong=3) multiPlotDataOverview(eList, qUnit=1) # Custom axes: eList$INFO$param.units <- "ng" qConst_precip <- new("qUnit", qShortName = " mm ", qUnitFactor = 1, qUnitName = "Millimeter", qUnitExpress = expression(paste("Precipitation in ",mm)), qUnitTiny = expression(paste("Precipitation ", "(", mm, ")")), shortCode = 1, unitUSGS = "Precipitation, in mm", prefix = "Precipitation") deposition <- new("concUnit", longPrefix = "Deposition", shortPrefix = "Dep") multiPlotDataOverview(eList, qUnit = qConst_precip, concLab = deposition)
eList <- Choptank_eList # Water year: multiPlotDataOverview(eList, qUnit=1) # Graphs consisting of Jun-Aug eList <- setPA(eList, paStart=6,paLong=3) multiPlotDataOverview(eList, qUnit=1) # Custom axes: eList$INFO$param.units <- "ng" qConst_precip <- new("qUnit", qShortName = " mm ", qUnitFactor = 1, qUnitName = "Millimeter", qUnitExpress = expression(paste("Precipitation in ",mm)), qUnitTiny = expression(paste("Precipitation ", "(", mm, ")")), shortCode = 1, unitUSGS = "Precipitation, in mm", prefix = "Precipitation") deposition <- new("concUnit", longPrefix = "Deposition", shortPrefix = "Dep") multiPlotDataOverview(eList, qUnit = qConst_precip, concLab = deposition)
Part of flowHistory system. All results are expressed as runoff (mm/day). The individual plots are constructed by the same method as used in plotFlowSingle
. The annual results are based on the Water Year. The seasons are defined as the following groups of months: SON, DJF, MAM, JJA.
plot15(eList, yearStart, yearEnd)
plot15(eList, yearStart, yearEnd)
eList |
named list with at least the Daily and INFO dataframes |
yearStart |
A numeric value for year in which the graph should start, default is NA, which indicates that the graph should start with first annual value |
yearEnd |
A numeric value for year in which the graph should end, default is NA, which indicates that the graph should end with last annual value |
For formatting purposes it is best to use the following commands before calling the plot15 function (savePath is the pathname for directory to store the output) # plotName <- paste(savePath, "plot15.", eList$INFO$shortName, ".ps", sep = "") # postscript(file = plotName, width = 8, height = 10, horizontal = FALSE, family = "Helvetica") Then after running plot15, the user needs to give the command dev.off()
eList <- Choptank_eList plot15(eList, yearStart = 1980, yearEnd = 2010) dev.off()
eList <- Choptank_eList plot15(eList, yearStart = 1980, yearEnd = 2010) dev.off()
Part of the flowHistory system. It is designed to create each of the component graphs for the function plot15
. The 15 graphs include annual and four seasonal graphs
for each of 3 flow statistics: 1-day maximum, mean, and 7-day minimum.
The computations involved are the same as the ones used in plotFlowSingle
or in makeAnnualSeries
plot1of15(eList, yearStart, yearEnd, qf, istat, isBottom = FALSE)
plot1of15(eList, yearStart, yearEnd, qf, istat, isBottom = FALSE)
eList |
named list with at least the Daily and INFO dataframes |
yearStart |
A numeric value for the year in which the graph should start |
yearEnd |
A numeric value for the year in which the graph should end |
qf |
a scale factor to convert discharge in cubic feet per second to mm/day, it is 86 / (drainage area in square kilometers) |
istat |
A numeric value selecting the flow statistic to be plotted, must be an integer from 1 to 8 |
isBottom |
logical, if TRUE the graph is from the bottom row and thus needs x axis labels, if FALSE it does not need labels |
eList <- Choptank_eList plot1of15(eList, 1980, 2010, 0.2938476, 5)
eList <- Choptank_eList plot1of15(eList, 1980, 2010, 0.2938476, 5)
Data come from named list (eList), which contains a Daily dataframe with the daily flow data, and an INFO dataframe with metadata.
The annual concentrations are "time-weighted" mean concentrations (as opposed to "flow-weighted").
The annual results reported are for a specified "period of analysis" which can be
an entire water year, a calendar, a season or even an individual month.
User specifies this period of analysis in the call to setupYears
.
User can specify plotting of three possible series. All are in units of mg/L. Annual mean concentration WRTDS_K version of annual mean concentration (requires that WRTDSKalman has been run) Flow normalized mean concentration
Although there are a lot of optional arguments to this function, most are set to a logical default.
plotConcHist(eList, yearStart = NA, yearEnd = NA, concMax = NA, printTitle = TRUE, tinyPlot = FALSE, usgsStyle = FALSE, plotFlowNorm = TRUE, plotAnnual = TRUE, plotGenConc = FALSE, cex = 0.8, cex.axis = 1.1, cex.main = 1.1, lwd = 2, col = "black", col.pred = "green", concLab = 1, col.gen = "red", customPar = FALSE, ...)
plotConcHist(eList, yearStart = NA, yearEnd = NA, concMax = NA, printTitle = TRUE, tinyPlot = FALSE, usgsStyle = FALSE, plotFlowNorm = TRUE, plotAnnual = TRUE, plotGenConc = FALSE, cex = 0.8, cex.axis = 1.1, cex.main = 1.1, lwd = 2, col = "black", col.pred = "green", concLab = 1, col.gen = "red", customPar = FALSE, ...)
eList |
named list with at least the Daily and INFO dataframes |
yearStart |
numeric is the calendar year containing the first estimated annual value to be plotted, default is NA (which allows it to be set automatically by the data) |
yearEnd |
numeric is the calendar year just after the last estimated annual value to be plotted, default is NA (which allows it to be set automatically by the data) |
concMax |
numeric. Maximum value of concentration to be plotted. |
printTitle |
logical variable if TRUE title is printed, if FALSE title is not printed (this is best for a multi-plot figure) |
tinyPlot |
logical variable, if TRUE plot is designed to be plotted small, as a part of a multipart figure, default is FALSE |
usgsStyle |
logical option to use USGS style guidelines. Setting this option to TRUE does NOT guarantee USGS compliance. It will only change automatically generated labels |
plotFlowNorm |
logical variable if TRUE flow normalized line is plotted, if FALSE not plotted |
plotAnnual |
logical variable if |
plotGenConc |
logical variable. If |
cex |
numerical value giving the amount by which plotting symbols should be magnified |
cex.axis |
magnification to be used for axis annotation relative to the current setting of cex |
cex.main |
magnification to be used for main titles relative to the current setting of cex |
lwd |
number magnification of line width. |
col |
color of points on plot, see ?par 'Color Specification' |
col.pred |
color of flow normalized line on plot, see ?par 'Color Specification' |
concLab |
object of concUnit class, or numeric represented the short code,
or character representing the descriptive name. By default, this argument sets
concentration labels to use either Concentration or Conc (for tiny plots). Units
are taken from the eList$INFO$param.units. To use any other words than
"Concentration" see |
col.gen |
color of points for WRTDS_K output on plot, see ?par 'Color Specification' |
customPar |
logical defaults to FALSE. If TRUE, par() should be set by user before calling this function (for example, adjusting margins with par(mar=c(5,5,5,5))). If customPar FALSE, EGRET chooses the best margins depending on tinyPlot. |
... |
arbitrary graphical parameters that will be passed to genericEGRETDotPlot function (see ?par for options) |
setupYears
, genericEGRETDotPlot
yearStart <- 2001 yearEnd <- 2010 eList <- Choptank_eList plotConcHist(eList, yearStart, yearEnd)
yearStart <- 2001 yearEnd <- 2010 eList <- Choptank_eList plotConcHist(eList, yearStart, yearEnd)
Data come from named list, which contains a Sample dataframe with the sample data, and an INFO dataframe with metadata.
Although there are a lot of optional arguments to this function, most are set to a logical default.
plotConcPred(eList, concMax = NA, logScale = FALSE, printTitle = TRUE, tinyPlot = FALSE, cex = 0.8, cex.axis = 1.1, cex.main = 1.1, customPar = FALSE, col = "black", lwd = 1, randomCensored = FALSE, concLab = 1, usgsStyle = FALSE, ...)
plotConcPred(eList, concMax = NA, logScale = FALSE, printTitle = TRUE, tinyPlot = FALSE, cex = 0.8, cex.axis = 1.1, cex.main = 1.1, customPar = FALSE, col = "black", lwd = 1, randomCensored = FALSE, concLab = 1, usgsStyle = FALSE, ...)
eList |
named list with at least the Sample and INFO dataframes |
concMax |
number specifying the maximum value to be used on the vertical axis, default is NA (which allows it to be set automatically by the data) |
logScale |
logical, default TRUE, TRUE indicates x and y axes are on a log scale. FALSE indicates both x and y are on an arithmetic scale. |
printTitle |
logical variable if TRUE title is printed, if FALSE not printed (this is best for a multi-plot figure) |
tinyPlot |
logical variable, if TRUE plot is designed to be plotted small, as a part of a multipart figure, default is FALSE |
cex |
numerical value giving the amount by which plotting symbols should be magnified |
cex.axis |
magnification to be used for axis annotation relative to the current setting of cex |
cex.main |
magnification to be used for main titles relative to the current setting of cex |
customPar |
logical defaults to FALSE. If TRUE, par() should be set by user before calling this function (for example, adjusting margins with par(mar=c(5,5,5,5))). If customPar FALSE, EGRET chooses the best margins depending on tinyPlot. |
col |
color of points on plot, see ?par 'Color Specification' |
lwd |
number line width |
randomCensored |
logical. Show censored values as randomized. |
concLab |
object of concUnit class, or numeric represented the short code,
or character representing the descriptive name. By default, this argument sets
concentration labels to use either Concentration or Conc (for tiny plots). Units
are taken from the eList$INFO$param.units. To use any other words than
"Concentration" see |
usgsStyle |
logical option to use USGS style guidelines. Setting this option to TRUE does NOT guarantee USGS compliance. It will only change automatically generated labels |
... |
arbitrary graphical parameters that will be passed to genericEGRETDotPlot function (see ?par for options) |
selectDays
, genericEGRETDotPlot
eList <- Choptank_eList # Water year: plotConcPred(eList) # Graphs consisting of Jun-Aug eList <- setPA(eList, paStart=6,paLong=3) plotConcPred(eList)
eList <- Choptank_eList # Water year: plotConcPred(eList) # Graphs consisting of Jun-Aug eList <- setPA(eList, paStart=6,paLong=3) plotConcPred(eList)
Data come from named list, which contains a Sample dataframe with the sample data, and an INFO dataframe with metadata. Discharge is plotted on a log scale.
Although there are a lot of optional arguments to this function, most are set to a logical default.
plotConcQ(eList, qUnit = 2, tinyPlot = FALSE, logScale = FALSE, randomCensored = FALSE, concMax = NA, concMin = NA, printTitle = TRUE, cex = 0.8, cex.axis = 1.1, cex.main = 1.1, usgsStyle = FALSE, rmSciX = FALSE, rmSciY = FALSE, customPar = FALSE, col = "black", lwd = 1, concLab = 1, ...)
plotConcQ(eList, qUnit = 2, tinyPlot = FALSE, logScale = FALSE, randomCensored = FALSE, concMax = NA, concMin = NA, printTitle = TRUE, cex = 0.8, cex.axis = 1.1, cex.main = 1.1, usgsStyle = FALSE, rmSciX = FALSE, rmSciY = FALSE, customPar = FALSE, col = "black", lwd = 1, concLab = 1, ...)
eList |
named list with at least the Sample and INFO dataframes |
qUnit |
object of qUnit class |
tinyPlot |
logical variable, if TRUE plot is designed to be plotted small as part of a multipart figure, default is FALSE. |
logScale |
logical if TRUE x and y plotted in log axis |
randomCensored |
logical. Show censored values as randomized. |
concMax |
number specifying the maximum value to be used on the vertical axis, default is NA (which allows it to be set automatically by the data) |
concMin |
numeric value for lower limit on concentration shown on the vertical log graph, default is NA (which causes the lower limit to be set automatically, based on the data). This value is ignored for linear scales, using 0 as the minimum value for the concentration axis. |
printTitle |
logical variable if TRUE title is printed, if FALSE title is not printed (this is best for a multi-plot figure) |
cex |
numerical value giving the amount by which plotting symbols should be magnified |
cex.axis |
magnification to be used for axis annotation relative to the current setting of cex |
cex.main |
magnification to be used for main titles relative to the current setting of cex |
usgsStyle |
logical option to use USGS style guidelines. Setting this option to TRUE does NOT guarantee USGS compliance. It will only change automatically generated labels. |
rmSciX |
logical defaults to FALSE, changes x label from scientific to fixed |
rmSciY |
logical defaults to FALSE, changes y label from scientific to fixed |
customPar |
logical defaults to FALSE. If TRUE, par() should be set by user before calling this function (for example, adjusting margins with par(mar=c(5,5,5,5))). If customPar FALSE, EGRET chooses the best margins depending on tinyPlot. |
col |
color of points on plot, see ?par 'Color Specification' |
lwd |
number line width |
concLab |
object of concUnit class, or numeric represented the short code,
or character representing the descriptive name. By default, this argument sets
concentration labels to use either Concentration or Conc (for tiny plots). Units
are taken from the eList$INFO$param.units. To use any other words than
"Concentration" see |
... |
arbitrary graphical parameters that will be passed to genericEGRETDotPlot function (see ?par for options) |
The function has two possible ways to plot censored values (e.g. "less-than values").
The default is to plot them as a vertical line that goes from the reporting limit down to the bottom of the graph.
The alternative is to set randomCensored = TRUE. In this case a random value is used for plotting the individual sample value. This random value lies between the reporting limit and zero and it is distributed as a truncated log normal based on the fitted WRTDS model.
The function makeAugmentedSample must be run first if randomCensored = TRUE. Running makeAugmentedSample requires that modelEstimation has already been run.
These random censored values are used to create more readable plots and are not used in any computations about the data set. The random censored values are shown as open circles and the non-censored data are shown as filled dots.
selectDays
, genericEGRETDotPlot
eList <- Choptank_eList # Water year: plotConcQ(eList) plotConcQ(eList, logScale=TRUE) # Graphs consisting of Jun-Aug eList <- setPA(eList, paStart=6,paLong=3) plotConcQ(eList)
eList <- Choptank_eList # Water year: plotConcQ(eList) plotConcQ(eList, logScale=TRUE) # Graphs consisting of Jun-Aug eList <- setPA(eList, paStart=6,paLong=3) plotConcQ(eList)
These plots are like a vertical slice of the estimated concentration surface that is seen in the plotContours function. These plots show how the concentration-discharge relationship is changing over time. Typically the time points selected would be in three years at the same time of year spaced out over the period of record. But that is not necessary. Another possibility is to use this to explore seasonal differences. In this case the three dates would be in the same year but different times during the year.
This plot can also help identify situations where the windowQ may be too small. If there are substantial oscillations of some of the curves, then the windowQ should be increased. Alternatively, windowQ may be too large. This can be seen when the windowQ is reduced (say to 1.0). A good choice of windowQ would be a value just great enough to damp out oscillations in the curves.
Although there are a lot of optional arguments to this function, most are set to a logical default.
Data come from named list, which contains a Sample dataframe with the sample data, and an INFO dataframe with metadata.
plotConcQSmooth(eList, date1, date2, date3, qLow, qHigh, qUnit = 2, legendLeft = 0, legendTop = 0, concMax = NA, concMin = NA, bw = FALSE, printTitle = TRUE, printValues = FALSE, minNumObs = 100, minNumUncen = 50, colors = c("black", "red", "green"), printLegend = TRUE, windowY = 7, windowQ = 2, windowS = 0.5, tinyPlot = FALSE, customPar = FALSE, lwd = 2, cex = 0.8, cex.axis = 1.1, cex.main = 1.1, cex.legend = 1.2, lineVal = c(1, 1, 1), logScale = FALSE, edgeAdjust = TRUE, concLab = 1, usgsStyle = FALSE, ...)
plotConcQSmooth(eList, date1, date2, date3, qLow, qHigh, qUnit = 2, legendLeft = 0, legendTop = 0, concMax = NA, concMin = NA, bw = FALSE, printTitle = TRUE, printValues = FALSE, minNumObs = 100, minNumUncen = 50, colors = c("black", "red", "green"), printLegend = TRUE, windowY = 7, windowQ = 2, windowS = 0.5, tinyPlot = FALSE, customPar = FALSE, lwd = 2, cex = 0.8, cex.axis = 1.1, cex.main = 1.1, cex.legend = 1.2, lineVal = c(1, 1, 1), logScale = FALSE, edgeAdjust = TRUE, concLab = 1, usgsStyle = FALSE, ...)
eList |
named list with at least the Sample and INFO dataframes |
date1 |
character specifying the date for the first curve on the graph, it is in the form "yyyy-mm-dd" (must be in quotes) |
date2 |
character specifying the date for the second curve on the graph, it is in the form "yyyy-mm-dd" (must be in quotes). If only one curve is wanted this should be NA |
date3 |
character specifying the date for the third curve on the graph, it is in the form "yyyy-mm-dd" (must be in quotes). If a third curve is not wanted this should be NA |
qLow |
numeric value for the lowest discharge to be considered, expressed in the units of discharge that are being used (as specified in qUnit) |
qHigh |
numeric value for the highest discharge to be considered, expressed in the units of discharge that are being used (as specified in qUnit) |
qUnit |
object of qUnit class. |
legendLeft |
numeric which represents the left edge of the legend in the units of the plot. |
legendTop |
numeric which represents the top edge of the legend in the units of the plot. |
concMax |
numeric value for upper limit on concentration shown on the graph, default = NA (which causes the upper limit to be set automatically, based on the data) |
concMin |
numeric value for lower limit on concentration shown on the vertical log graph, default is NA (which causes the lower limit to be set automatically, based on the data). This value is ignored for linear scales, using 0 as the minimum value for the concentration axis. |
bw |
logical if TRUE graph is produced in black and white, default is FALSE (which means it will use color) |
printTitle |
logical variable if TRUE title is printed, if FALSE not printed |
printValues |
logical variable if TRUE the results shown on the graph are also printed to the console and returned in a dataframe (this can be useful for quantifying the changes seen visually in the graph), default is FALSE (not printed) |
minNumObs |
numeric specifying the miniumum number of observations required to run the weighted regression, default is 100 |
minNumUncen |
numeric specifying the minimum number of uncensored observations to run the weighted regression, default is 50 |
colors |
color vector of lines on plot, see ?par 'Color Specification'. Defaults to c("black","red","green") |
printLegend |
logical if TRUE, legend is included |
windowY |
numeric specifying the half-window width in the time dimension, in units of years, default is 7 |
windowQ |
numeric specifying the half-window width in the discharge dimension, units are natural log units, default is 2 |
windowS |
numeric specifying the half-window with in the seasonal dimension, in units of years, default is 0.5 |
tinyPlot |
logical variable, if TRUE plot is designed to be plotted small as part of a multipart figure, default is FALSE. |
customPar |
logical defaults to FALSE. If TRUE, par() should be set by user before calling this function (for example, adjusting margins with par(mar=c(5,5,5,5))). If customPar FALSE, EGRET chooses the best margins depending on tinyPlot. |
lwd |
number line width, default is 2 |
cex |
numerical value giving the amount by which plotting symbols should be magnified |
cex.axis |
magnification to be used for axis annotation relative to the current setting of cex |
cex.main |
magnification to be used for main titles relative to the current setting of cex |
cex.legend |
magnification to be used for legend annotation relative to the current setting of cex |
lineVal |
vector of line types. Defaults to c(1,1,1) which is a solid line for each line. Options: 0=blank, 1=solid (default), 2=dashed, 3=dotted, 4=dotdash, 5=longdash, 6=twodash |
logScale |
logical whether or not to use a log scale in the y axis. Default is FALSE |
edgeAdjust |
logical specifying whether to use the modified method for calculating the windows at the edge of the record. The modified method tends to reduce curvature near the start and end of record. Default is TRUE. |
concLab |
object of concUnit class, or numeric represented the short code,
or character representing the descriptive name. By default, this argument sets
concentration labels to use either Concentration or Conc (for tiny plots). Units
are taken from the eList$INFO$param.units. To use any other words than
"Concentration" see |
usgsStyle |
logical option to use USGS style guidelines. Setting this option to TRUE does NOT guarantee USGS compliance. It will only change automatically generated labels |
... |
arbitrary graphical parameters that will be passed to genericEGRETDotPlot function (see ?par for options) |
genericEGRETDotPlot
, runSurvReg
date1 <- "1982-06-01" date2 <- "1994-06-01" date3 <- "2010-06-01" qLow <- 0.5 qHigh <- 50 eList <- Choptank_eList plotConcQSmooth(eList, date1, date2, date3, qLow, qHigh, legendLeft = 0.6, legendTop = 0.7) plotConcQSmooth(eList, date1, date2, date3, qLow, qHigh, logScale=TRUE, legendLeft = 0.6, legendTop = 0.7)
date1 <- "1982-06-01" date2 <- "1994-06-01" date3 <- "2010-06-01" qLow <- 0.5 qHigh <- 50 eList <- Choptank_eList plotConcQSmooth(eList, date1, date2, date3, qLow, qHigh, legendLeft = 0.6, legendTop = 0.7) plotConcQSmooth(eList, date1, date2, date3, qLow, qHigh, logScale=TRUE, legendLeft = 0.6, legendTop = 0.7)
This function allows the user to plot all of the data, but also to limit it in two ways. The data can be limited to only those observed concentrations collected in a specified discharge range. The data can also be limited to only those observed in certain months of the year. These two selection criteria can be combined. For example, we may only want to plot data for discharges between 100 and 500 cubic feet per second in the months of March, April and May.
Although there are a lot of optional arguments to this function, most are set to a logical default.
Data come from named list, which contains a Sample dataframe with the sample data, and an INFO dataframe with metadata.
plotConcTime(eList, qUnit = 2, yearStart = NA, yearEnd = NA, qLower = NA, qUpper = NA, randomCensored = FALSE, tinyPlot = FALSE, concMax = NA, concMin = NA, printTitle = TRUE, logScale = FALSE, cex = 0.8, cex.axis = 1.1, cex.main = 1.1, customPar = FALSE, col = "black", lwd = 1, concLab = 1, usgsStyle = FALSE, ...)
plotConcTime(eList, qUnit = 2, yearStart = NA, yearEnd = NA, qLower = NA, qUpper = NA, randomCensored = FALSE, tinyPlot = FALSE, concMax = NA, concMin = NA, printTitle = TRUE, logScale = FALSE, cex = 0.8, cex.axis = 1.1, cex.main = 1.1, customPar = FALSE, col = "black", lwd = 1, concLab = 1, usgsStyle = FALSE, ...)
eList |
named list with at least the Sample and INFO dataframes |
qUnit |
object of qUnit class |
yearStart |
numeric is the calendar year containing the first estimated annual value to be plotted, default is NA (which allows it to be set automatically by the data) |
yearEnd |
numeric is the calendar year just after the last estimated annual value to be plotted, default is NA (which allows it to be set automatically by the data) |
qLower |
numeric the lower bound on values of discharge used to select the data points to be plotted, units are those specified by qUnit, default = NA which is equivalent to a lower bound of zero but if the desired lower bound is zero use qLower = NA |
qUpper |
numeric the upper bound on values of discharge for selection of data points to be plotted, units are those specified by qUnit, default = NA which is equivalent to an upper bound of infinity |
randomCensored |
logical. Show censored values as randomized. |
tinyPlot |
logical variable, if TRUE plot is designed to be plotted small as part of a multipart figure, default is FALSE. |
concMax |
numeric value for the maximum value to be used on the vertical axis, default is NA (which allows it to be set automatically by the data) |
concMin |
numeric value for lower limit on concentration shown on the vertical log graph, default is NA (which causes the lower limit to be set automatically, based on the data). This value is ignored for linear scales, using 0 as the minimum value for the concentration axis. |
printTitle |
logical variable if TRUE title is printed, if FALSE title is not printed (this is best for a multi-plot figure). |
logScale |
logical. If TRUE concentration is plotted on a log axis, default FALSE. |
cex |
numerical value giving the amount by which plotting symbols should be magnified. |
cex.axis |
magnification to be used for axis annotation relative to the current setting of cex. |
cex.main |
magnification to be used for main titles relative to the current setting of cex. |
customPar |
logical defaults to FALSE. If TRUE, par() should be set by user before calling this function. (for example, adjusting margins with par(mar=c(5,5,5,5))). If customPar FALSE, EGRET chooses the best margins depending on tinyPlot. |
col |
color of points on plot, see ?par 'Color Specification' |
lwd |
number line width. |
concLab |
object of concUnit class, or numeric represented the short code,
or character representing the descriptive name. By default, this argument sets
concentration labels to use either Concentration or Conc (for tiny plots). Units
are taken from the eList$INFO$param.units. To use any other words than
"Concentration" see |
usgsStyle |
logical option to use USGS style guidelines. Setting this option to TRUE does NOT guarantee USGS compliance. It will only change automatically generated labels |
... |
arbitrary functions sent to the generic plotting function. See ?par for details on possible parameters. |
The function has two possible ways to plot censored values (e.g. "less-than values").
The default is to plot them as a vertical line that goes from the reporting limit down to the bottom of the graph.
The alternative is to set randomCensored = TRUE. In this case a random value is used for plotting the individual sample value. This random value lies between the reporting limit and zero and it is distributed as a truncated log normal based on the fitted WRTDS model.
The function makeAugmentedSample must be run first if randomCensored = TRUE. Running makeAugmentedSample requires that modelEstimation has already been run.
These random censored values are used to create more readable plots and are not used in any computations about the data set. The random censored values are shown as open circles and the non-censored data are shown as filled dots.
selectDays
, genericEGRETDotPlot
eList <- Choptank_eList # Water year: plotConcTime(eList) # Graphs consisting of Jun-Aug eList <- setPA(eList, paStart=6,paLong=3) plotConcTime(eList, qUnit = 1, qLower = 100, qUpper = 10000) plotConcTime(eList, logScale=TRUE) plotConcTime(eList, qUnit = 1, qLower = 100, qUpper = 10000, randomCensored = TRUE)
eList <- Choptank_eList # Water year: plotConcTime(eList) # Graphs consisting of Jun-Aug eList <- setPA(eList, paStart=6,paLong=3) plotConcTime(eList, qUnit = 1, qLower = 100, qUpper = 10000) plotConcTime(eList, logScale=TRUE) plotConcTime(eList, qUnit = 1, qLower = 100, qUpper = 10000, randomCensored = TRUE)
This plot is useful for visual examination of the ability of the WRTDS, or other model, to fit the data, seen in a time-series perspective. The graph is most useful when it covers a period of just a few years and not the complete record but a complete record can be done by repeated use over a series of segments.
Although there are a lot of optional arguments to this function, most are set to a logical default.
Data come from named list, which contains a Sample dataframe with the sample data, a Daily dataframe with the daily flow data, and an INFO dataframe with metadata.
plotConcTimeDaily(eList, yearStart = NA, yearEnd = NA, tinyPlot = FALSE, concMax = NA, printTitle = TRUE, plotGenConc = TRUE, cex = 0.8, cex.axis = 1.1, randomCensored = FALSE, cex.main = 1.1, customPar = FALSE, col = "black", lwd = 1, prettyDate = TRUE, usgsStyle = FALSE, ...)
plotConcTimeDaily(eList, yearStart = NA, yearEnd = NA, tinyPlot = FALSE, concMax = NA, printTitle = TRUE, plotGenConc = TRUE, cex = 0.8, cex.axis = 1.1, randomCensored = FALSE, cex.main = 1.1, customPar = FALSE, col = "black", lwd = 1, prettyDate = TRUE, usgsStyle = FALSE, ...)
eList |
named list with at least the Daily, Sample, and INFO dataframes |
yearStart |
numeric specifying the starting date (expressed as decimal years, for example 1989.0) for the plot |
yearEnd |
numeric specifying the ending date for the plot |
tinyPlot |
logical variable, if TRUE plot is designed to be short and wide, default is FALSE. |
concMax |
number specifying the maximum value to be used on the vertical axis, default is NA (which allows it to be set automatically by the data) |
printTitle |
logical variable if TRUE title is printed, if FALSE title is not printed (this is best for a multi-plot figure) |
plotGenConc |
logical variable. If |
cex |
numerical value giving the amount by which plotting symbols should be magnified |
cex.axis |
magnification to be used for axis annotation relative to the current setting of cex |
randomCensored |
if TRUE plot a random value for censored data. Default is FALSE. |
cex.main |
magnification to be used for main titles relative to the current setting of cex |
customPar |
logical defaults to FALSE. If TRUE, par() should be set by user before calling this function (for example, adjusting margins with par(mar=c(5,5,5,5))). If customPar FALSE, EGRET chooses the best margins depending on tinyPlot. |
col |
color of points on plot, see ?par 'Color Specification' |
lwd |
number line width |
prettyDate |
logical use 'pretty' limits for date axis if TRUE, or force the yearStart/yearEnd as limits if FALSE |
usgsStyle |
logical option to use USGS style guidelines. Setting this option to TRUE does NOT guarantee USGS compliance. It will only change automatically generated labels |
... |
arbitrary functions sent to the generic plotting function. See ?par for details on possible parameters |
selectDays
, genericEGRETDotPlot
eList <- Choptank_eList # Water year: plotConcTimeDaily(eList) plotConcTimeDaily(eList, yearStart = 1998, yearEnd = 2001, plotGenConc = FALSE)
eList <- Choptank_eList # Water year: plotConcTimeDaily(eList) plotConcTimeDaily(eList, yearStart = 1998, yearEnd = 2001, plotGenConc = FALSE)
These plots show how the concentration-time relationship is changing over flow.
This plot can also help identify situations where the windowY may be too small. If there are substantial oscillations of some of the curves, then the windowY should be increased. Alternatively, windowY may be too large. This can be seen when the windowY is reduced (say to 4.0). A good choice of windowY would be a value just great enough to damp out oscillations in the curves.
Although there are a lot of optional arguments to this function, most are set to a logical default.
Data come from named list, which contains a Sample dataframe with the sample data and an INFO dataframe with metadata.
plotConcTimeSmooth(eList, q1, q2, q3, centerDate, yearStart, yearEnd, qUnit = 2, legendLeft = 0, legendTop = 0, concMax = NA, concMin = NA, bw = FALSE, printTitle = TRUE, colors = c("black", "red", "green"), printValues = FALSE, tinyPlot = FALSE, concLab = 1, monthLab = 1, minNumObs = 100, minNumUncen = 50, windowY = 10, windowQ = 2, windowS = 0.5, cex.main = 1.1, lwd = 2, printLegend = TRUE, cex.legend = 1.2, cex = 0.8, cex.axis = 1.1, customPar = FALSE, lineVal = c(1, 1, 1), logScale = FALSE, edgeAdjust = TRUE, usgsStyle = FALSE, ...)
plotConcTimeSmooth(eList, q1, q2, q3, centerDate, yearStart, yearEnd, qUnit = 2, legendLeft = 0, legendTop = 0, concMax = NA, concMin = NA, bw = FALSE, printTitle = TRUE, colors = c("black", "red", "green"), printValues = FALSE, tinyPlot = FALSE, concLab = 1, monthLab = 1, minNumObs = 100, minNumUncen = 50, windowY = 10, windowQ = 2, windowS = 0.5, cex.main = 1.1, lwd = 2, printLegend = TRUE, cex.legend = 1.2, cex = 0.8, cex.axis = 1.1, customPar = FALSE, lineVal = c(1, 1, 1), logScale = FALSE, edgeAdjust = TRUE, usgsStyle = FALSE, ...)
eList |
named list with at least the Sample and INFO dataframes |
q1 |
numeric This is the discharge value for the first curve to be shown on the plot. It is expressed in units specified by qUnit. |
q2 |
numeric This is the discharge value for the second curve to be shown on the plot. It is expressed in units specified by qUnit. If you don't want a second curve then the argument must be q2=NA |
q3 |
numeric This is the discharge value for the third curve to be shown on the plot. It is expressed in units specified by qUnit. If you don't want a third curve then the argument must be q3=NA |
centerDate |
character This is the time of year to be used as the center date for the smoothing. It is expressed as a month and day and must be in the form "mm-dd" |
yearStart |
numeric This is the starting year for the graph. The first value plotted for each curve will be at the first instance of centerDate in the year designated by yearStart. |
yearEnd |
numeric This is the end of the sequence of values plotted on the graph.The last value will be the last instance of centerDate prior to the start of yearEnd. (Note, the number of values plotted on each curve will be yearEnd-yearStart.) |
qUnit |
object of qUnit class. |
legendLeft |
numeric which represents the left edge of the legend in the units of the plot. |
legendTop |
numeric which represents the top edge of the legend in the units of the plot. |
concMax |
numeric value for upper limit on concentration shown on the graph, default = NA (which causes the upper limit to be set automatically, based on the data) |
concMin |
numeric value for lower limit on concentration shown on the vertical log graph, default is NA (which causes the lower limit to be set automatically, based on the data). This value is ignored for linear scales, using 0 as the minimum value for the concentration axis. |
bw |
logical if TRUE graph is produced in black and white, default is FALSE (which means it will use color) |
printTitle |
logical variable if TRUE title is printed, if FALSE not printed |
colors |
color vector of lines on plot, see ?par 'Color Specification'. Defaults to c("black","red","green") |
printValues |
logical variable if TRUE the results shown on the graph are printed to the console and returned in a dataframe (this can be useful for quantifying the changes seen visually in the graph), default is FALSE (not printed) |
tinyPlot |
logical variable, if TRUE plot is designed to be plotted small, as a part of a multipart figure, default is FALSE |
concLab |
object of concUnit class, or numeric represented the short code,
or character representing the descriptive name. By default, this argument sets
concentration labels to use either Concentration or Conc (for tiny plots). Units
are taken from the eList$INFO$param.units. To use any other words than
"Concentration" see |
monthLab |
object of monthLabel class, or numeric represented the short code, or character representing the descriptive name. |
minNumObs |
numeric specifying the miniumum number of observations required to run the weighted regression, default is 100 |
minNumUncen |
numeric specifying the minimum number of uncensored observations to run the weighted regression, default is 50 |
windowY |
numeric specifying the half-window width in the time dimension, in units of years, default is 10 |
windowQ |
numeric specifying the half-window width in the discharge dimension, units are natural log units, default is 2 |
windowS |
numeric specifying the half-window with in the seasonal dimension, in units of years, default is 0.5 |
cex.main |
magnification to be used for main titles relative to the current setting of cex |
lwd |
line width, a positive number, defaulting to 2 |
printLegend |
logical if TRUE, legend is included |
cex.legend |
number magnification of legend |
cex |
numerical value giving the amount by which plotting symbols should be magnified |
cex.axis |
magnification to be used for axis annotation relative to the current setting of cex |
customPar |
logical defaults to FALSE. If TRUE, par() should be set by user before calling this function (for example, adjusting margins with par(mar=c(5,5,5,5))). If customPar FALSE, EGRET chooses the best margins depending on tinyPlot. |
lineVal |
vector of line types. Defaults to c(1,1,1) which is a solid line for each line. Options: 0=blank, 1=solid (default), 2=dashed, 3=dotted, 4=dotdash, 5=longdash, 6=twodash |
logScale |
logical whether or not to use a log scale in the y axis. |
edgeAdjust |
logical specifying whether to use the modified method for calculating the windows at the edge of the record. The modified method tends to reduce curvature near the start and end of record. Default is TRUE. |
usgsStyle |
logical option to use USGS style guidelines. Setting this option to TRUE does NOT guarantee USGS compliance. It will only change automatically generated labels |
... |
arbitrary functions sent to the generic plotting function. See ?par for details on possible parameters |
genericEGRETDotPlot
, runSurvReg
q1 <- 1 q2 <- 10 q3 <- 100 centerDate <- "07-01" yearStart <- 1990 yearEnd <- 2010 eList <- Choptank_eList plotConcTimeSmooth(eList, q1, q2,q3, centerDate, yearStart, yearEnd, legendLeft = 1997, legendTop = 0.44, cex.legend = 0.9) plotConcTimeSmooth(eList, q1, q2,q3, centerDate, yearStart, yearEnd, logScale = TRUE, legendLeft = 1994, legendTop = 0.4, cex.legend = 0.9)
q1 <- 1 q2 <- 10 q3 <- 100 centerDate <- "07-01" yearStart <- 1990 yearEnd <- 2010 eList <- Choptank_eList plotConcTimeSmooth(eList, q1, q2,q3, centerDate, yearStart, yearEnd, legendLeft = 1997, legendTop = 0.44, cex.legend = 0.9) plotConcTimeSmooth(eList, q1, q2,q3, centerDate, yearStart, yearEnd, logScale = TRUE, legendLeft = 1994, legendTop = 0.4, cex.legend = 0.9)
These plots are normally used for plotting the estimated concentration surface (whatSurface = 3) but can be used to explore the
estimated surfaces for the log of concentration or for the standard error (in log space) which is what determines the bias correction.
The plots are often more interpretable when the time limits for the plot are less than a decade.
To explore changes over a long time period it is best to do this multiple times, for various time slices of 2 years (for example) or to use the function plotDiffContours
.
Although there are a lot of optional arguments to this function, most are set to a logical default.
Obtaining a plot that provides good insight it is useful to experiment with several of the arguments such as yearStart, yearEnd, qBottom, qTop, and contourLevels.
Data come from named list, which contains a Sample dataframe with the sample data, a Daily dataframe with the daily flow data, and an INFO dataframe with metadata.
plotContours(eList, yearStart, yearEnd, qBottom = NA, qTop = NA, whatSurface = 3, qUnit = 2, contourLevels = NA, span = 60, pval = 0.05, printTitle = TRUE, vert1 = NA, vert2 = NA, horiz = NA, tcl = 0.03, flowDuration = TRUE, customPar = FALSE, yTicks = NA, tick.lwd = 1, usgsStyle = FALSE, lwd = 2, cex.main = 1, cex.axis = 1, concLab = 1, color.palette = grDevices::colorRampPalette(c("white", "gray", "blue", "red")), ...)
plotContours(eList, yearStart, yearEnd, qBottom = NA, qTop = NA, whatSurface = 3, qUnit = 2, contourLevels = NA, span = 60, pval = 0.05, printTitle = TRUE, vert1 = NA, vert2 = NA, horiz = NA, tcl = 0.03, flowDuration = TRUE, customPar = FALSE, yTicks = NA, tick.lwd = 1, usgsStyle = FALSE, lwd = 2, cex.main = 1, cex.axis = 1, concLab = 1, color.palette = grDevices::colorRampPalette(c("white", "gray", "blue", "red")), ...)
eList |
named list with at least the Daily and INFO dataframes, and surfaces matrix |
yearStart |
numeric value for the starting date for the graph, expressed as decimal year (typically whole number such as 1989.0) |
yearEnd |
numeric value for the ending date for the graph, expressed as decimal year, (for example 1993.0) |
qBottom |
numeric value for the bottom edge of the graph, expressed in the units of discharge that are being used (as specified in qUnit). NA will choose a "pretty" lower limit nearest to the 5% of discharge. If yTicks are specified, then the first value of yTicks becomes the lowest discharge shown on the figure. |
qTop |
numeric value for the top edge of the graph, expressed in the units of discharge that are being used (as specified in qUnit). NA will choose a "pretty" upper limit nearest to the 95% of discharge. If yTicks are specified, then the last value of yTicks becomes the highest discharge shown on the figure. |
whatSurface |
numeric value, can only accept 1, 2, or 3; whatSurface=1 is yHat (log concentration), whatSurface=2 is SE (standard error of log concentration), and whatSurface=3 is ConcHat (unbiased estimate of concentration), default = 3. |
qUnit |
object of qUnit class. |
contourLevels |
numeric vector containing the contour levels for the contour plot, arranged in ascending order, default is NA (which causes the contour levels to be set automatically, based on the data) |
span |
numeric, it is the half-width (in days) of the smoothing window for computing the flow duration information, default = 60 |
pval |
numeric, the probability value for the lower flow frequency line on the graph |
printTitle |
logical variable if TRUE title is printed, if FALSE not printed |
vert1 |
numeric, the location in time for a black vertical line on the figure, yearStart<vert1<yearEnd, default is NA (vertical line is not drawn) |
vert2 |
numeric, the location in time for a black vertical line on the figure, yearStart<vert2<yearEnd, default is NA (vertical line is not drawn) |
horiz |
numeric, the location in discharge for a black horizontal line on the figure, qBottom<vert1<qTop, default is NA (no horizontal line is drawn) |
tcl |
numeric, length of tick marks in inches, default is 0.03 |
flowDuration |
logical variable if TRUE plot the flow duration lines (5 and 95 flow percentiles), if FALSE do not plot them, default = TRUE |
customPar |
logical defaults to FALSE. If TRUE, par() should be set by user before calling this function (for example, adjusting margins with par(mar=c(5,5,5,5))). If customPar FALSE, EGRET chooses the best margins. |
yTicks |
vector of yTick labels and marks that will be plotted in log space. (for example yTicks = c(3, 5, 10, 20, 50, 100, 200, 400). The first and last values determine the range of the y axis. If NA, the tick marks will be automatically generated. |
tick.lwd |
line width for axis ticks, default is 1 |
usgsStyle |
logical option to use USGS style guidelines. Setting this option to TRUE does NOT guarantee USGS compliance. It will only change automatically generated labels. |
lwd |
numeric, line width of flowDuration curve, default is 2 |
cex.main |
magnification to be used for main titles relative to the current setting of cex |
cex.axis |
magnification to be used for axis annotation relative to the current setting of cex |
concLab |
object of concUnit class, or numeric represented the short code,
or character representing the descriptive name. By default, this argument sets
concentration labels to use either Concentration or Conc (for tiny plots). Units
are taken from the eList$INFO$param.units. To use any other words than
"Concentration" see |
color.palette |
a function that creates a color palette for the contour plot. Default goes from white to gray to blue to red
using the function |
... |
arbitrary functions sent to the generic plotting function. See ?par for details on possible parameters |
yearStart <- 2002 yearEnd <- 2010 qBottom <- 0.5 qTop<- 20 clevel <- seq(0,2,0.25) eList <- Choptank_eList plotContours(eList, yearStart, yearEnd, qBottom, qTop, contourLevels = clevel) plotContours(eList, yearStart, yearEnd, qBottom, qTop = 50, contourLevels = clevel, flowDuration = FALSE) colors <- grDevices::colorRampPalette(c("white","black")) plotContours(eList, yearStart, yearEnd, qBottom, qTop = 50, contourLevels = clevel, color.palette = colors, flowDuration = FALSE)
yearStart <- 2002 yearEnd <- 2010 qBottom <- 0.5 qTop<- 20 clevel <- seq(0,2,0.25) eList <- Choptank_eList plotContours(eList, yearStart, yearEnd, qBottom, qTop, contourLevels = clevel) plotContours(eList, yearStart, yearEnd, qBottom, qTop = 50, contourLevels = clevel, flowDuration = FALSE) colors <- grDevices::colorRampPalette(c("white","black")) plotContours(eList, yearStart, yearEnd, qBottom, qTop = 50, contourLevels = clevel, color.palette = colors, flowDuration = FALSE)
These plots are normally used for plotting changes in the estimated concentration surface (whatSurface=3) but can be used to explore the changes in estimated surfaces for the log of concentration or for the standard error (in log space) which is what determines the bias correction.
The difference can be shown either as an arithmetic difference or as a percentage difference.
Although there are a lot of optional arguments to this function, most are set to a logical default.
Data come from named list, which contains a Sample dataframe with the sample data, a Daily dataframe with the daily flow data, and an INFO dataframe with metadata.
plotDiffContours(eList, year0, year1, qBottom = NA, qTop = NA, maxDiff = NA, whatSurface = 3, tcl = 0.03, qUnit = 2, span = 60, pval = 0.05, printTitle = TRUE, plotPercent = FALSE, vert1 = NA, vert2 = NA, horiz = NA, flowDuration = TRUE, yTicks = NA, tick.lwd = 1, lwd = 2, cex.main = 0.95, cex.axis = 1, customPar = FALSE, usgsStyle = FALSE, color.palette = grDevices::colorRampPalette(c("blue", "white", "red")), concLab = 1, monthLab = 1, ...)
plotDiffContours(eList, year0, year1, qBottom = NA, qTop = NA, maxDiff = NA, whatSurface = 3, tcl = 0.03, qUnit = 2, span = 60, pval = 0.05, printTitle = TRUE, plotPercent = FALSE, vert1 = NA, vert2 = NA, horiz = NA, flowDuration = TRUE, yTicks = NA, tick.lwd = 1, lwd = 2, cex.main = 0.95, cex.axis = 1, customPar = FALSE, usgsStyle = FALSE, color.palette = grDevices::colorRampPalette(c("blue", "white", "red")), concLab = 1, monthLab = 1, ...)
eList |
named list with at least the Daily and INFO dataframes, and surfaces matrix |
year0 |
numeric value for the calendar year that is the first year of the pair of years for the analysis, should be a whole number |
year1 |
numeric value for the calendar year that is the second year of the pair of years for the analysis, should be a whole number |
qBottom |
numeric value for the bottom edge of the graph, expressed in the units of discharge that are being used (as specified in qUnit). NA will choose a "pretty" lower limit nearest to the 5% of discharge. If yTicks are specified, then the first value of yTicks becomes the lowest discharge shown on the figure. |
qTop |
numeric value for the top edge of the graph, expressed in the units of discharge that are being used (as specified in qUnit). NA will choose a "pretty" upper limit nearest to the 95% of discharge. If yTicks are specified, then the last value of yTicks becomes the highest discharge shown on the figure. |
maxDiff |
numeric value which is the absolute value of the largest change in concentration that will be shown on the figure. If NA, the scale will be set from 5% to 95% of the concentration difference. If plotPercent = TRUE then maxDiff will be the maximum percentage difference. |
whatSurface |
numeric value, can only accept 1, 2, or 3; whatSurface = 1 is yHat (log concentration), whatSurface = 2 is SE (standard error of log concentration), and whatSurface = 3 is ConcHat (unbiased estimate of concentration), default = 3 |
tcl |
numeric, length of tick marks in inches, default is 0.1 |
qUnit |
object of qUnit class. |
span |
numeric, it is the half-width (in days) of the smoothing window for computing the flow duration information, default = 60 |
pval |
numeric, the probability value for the lower flow frequency line on the graph |
printTitle |
logical variable if TRUE title is printed, if FALSE not printed |
plotPercent |
logical. If TRUE, plots percent difference, if FALSE, plots arithmetic differences. Defaults to FALSE. |
vert1 |
numeric, the location in time for a black vertical line on the figure, yearStart < vert1 < yearEnd, default is NA (vertical line is not drawn) |
vert2 |
numeric, the location in time for a black vertical line on the figure, yearStart < vert2 < yearEnd, default is NA (vertical line is not drawn) |
horiz |
numeric, the location in discharge for a black horizontal line on the figure, qBottom<vert1<qTop, default is NA (no horizontal line is drawn) |
flowDuration |
logical variable if TRUE plot the flow duration lines (5 and 95 flow percentiles), if FALSE do not plot them, default = TRUE |
yTicks |
vector of yTick labels and marks that will be plotted in log space. (for example yTicks = c(3, 5, 10, 20, 50, 100, 200, 400). The first and last values determine the range of the y axis. If NA, the tick marks will be automatically generated. |
tick.lwd |
line width for axis ticks, default is 2 |
lwd |
numeric, line width of flowDuration curve, default is 1 |
cex.main |
magnification to be used for main titles relative to the current setting of cex |
cex.axis |
magnification to be used for axis annotation relative to the current setting of cex |
customPar |
logical defaults to FALSE. If TRUE, par() should be set by user before calling this function (for example, adjusting margins with par(mar=c(5,5,5,5))). If customPar FALSE, EGRET chooses the best margins. |
usgsStyle |
logical option to use USGS style guidelines. Setting this option to TRUE does NOT guarantee USGS compliance. It will only change automatically generated labels. |
color.palette |
a function that creates a color palette for the contour plot. Default goes from blue to white to red
using the function |
concLab |
object of concUnit class, or numeric represented the short code,
or character representing the descriptive name. By default, this argument sets
concentration labels to use either Concentration or Conc (for tiny plots). Units
are taken from the eList$INFO$param.units. To use any other words than
"Concentration" see |
monthLab |
object of monthLabel class, or numeric represented the short code, or character representing the descriptive name. |
... |
arbitrary functions sent to the generic plotting function. See ?par for details on possible parameters |
year0 <- 1990 year1 <- 2009 qBottom <- 0.5 qTop <- 20 maxDiff<-0.5 eList <- Choptank_eList plotDiffContours(eList, year0, year1, qBottom, qTop, maxDiff = 0.5) plotDiffContours(eList, year0, year1, qBottom, qTop, maxDiff = 50, plotPercent = TRUE)
year0 <- 1990 year1 <- 2009 qBottom <- 0.5 qTop <- 20 maxDiff<-0.5 eList <- Choptank_eList plotDiffContours(eList, year0, year1, qBottom, qTop, maxDiff = 0.5) plotDiffContours(eList, year0, year1, qBottom, qTop, maxDiff = 50, plotPercent = TRUE)
A part of the flowHistory system. The index of the flow statistics is istat. These statistics are: (1) 1-day minimum, (2) 7-day minimum, (3) 30-day minimum, (4) median (5) mean, (6) 30-day maximum, (7) 7-day maximum, and (8) 1-day maximum
Although there are a lot of optional arguments to this function, most are set to a logical default.
Data come from named list, which contains a Daily dataframe with the daily flow data, and an INFO dataframe with metadata.
plotFlowSingle(eList, istat, yearStart = NA, yearEnd = NA, qMax = NA, printTitle = TRUE, tinyPlot = FALSE, customPar = FALSE, runoff = FALSE, qUnit = 1, printStaName = TRUE, printPA = TRUE, usgsStyle = FALSE, printIstat = TRUE, cex = 0.8, cex.axis = 1.1, cex.main = 1.1, lwd = 2, col = "black", ...)
plotFlowSingle(eList, istat, yearStart = NA, yearEnd = NA, qMax = NA, printTitle = TRUE, tinyPlot = FALSE, customPar = FALSE, runoff = FALSE, qUnit = 1, printStaName = TRUE, printPA = TRUE, usgsStyle = FALSE, printIstat = TRUE, cex = 0.8, cex.axis = 1.1, cex.main = 1.1, lwd = 2, col = "black", ...)
eList |
named list with at least the Daily and INFO dataframes |
istat |
A numeric value for the flow statistic to be graphed (possible values are 1 through 8) |
yearStart |
A numeric value for year in which the graph should start, default is NA, which indicates that the graph should start with first annual value |
yearEnd |
A numeric value for year in which the graph should end, default is NA, which indicates that the graph should end with last annual value |
qMax |
A numeric value for the maximum value to be used for y-axis of graph, default is NA means that graph is self-scaling |
printTitle |
logical variable, if TRUE title is printed, if FALSE title is not printed, default is TRUE |
tinyPlot |
logical variable, if TRUE plot is designed to be plotted small, as a part of a multipart figure, default is FALSE |
customPar |
logical defaults to FALSE. If TRUE, par() should be set by user before calling this function (for example, adjusting margins with par(mar=c(5,5,5,5))). If customPar FALSE, EGRET chooses the best margins depending on tinyPlot. |
runoff |
logical variable, if TRUE the streamflow data are converted to runoff values in mm/day |
qUnit |
object of qUnit class |
printStaName |
logical variable, if TRUE station name is printed in title, if FALSE not printed, default is TRUE |
printPA |
logical variable, if TRUE Period of Analysis information is printed in title, if FALSE not printed, default is TRUE |
usgsStyle |
logical option to use USGS style guidelines. Setting this option to TRUE does NOT guarantee USGS compliance. It will only change automatically generated labels. |
printIstat |
logical variable, if TRUE print the statistic name is printed in title, if FALSE not printed, default is TRUE |
cex |
numerical value giving the amount by which plotting symbols should be magnified |
cex.axis |
magnification to be used for axis annotation relative to the current setting of cex |
cex.main |
magnification to be used for main titles relative to the current setting of cex |
lwd |
number line width |
col |
color of points on plot, see ?par 'Color Specification' |
... |
arbitrary graphical parameters that will be passed to genericEGRETDotPlot function (see ?par for options) |
The curve plotted on the graph is a loess smooth of the data. This smooth is computed on the logs of the data and then transformed back to plot. The width of the smoothing window is 20 years on either side of the year being plotted However, the window width can be adjusted using setPA function.
makeAnnualSeries
, genericEGRETDotPlot
eList <- Choptank_eList # Water year: plotFlowSingle(eList, 1) # Graphs consisting of Jun-Aug eList <- setPA(eList, paStart=6,paLong=3) plotFlowSingle(eList, 1)
eList <- Choptank_eList # Water year: plotFlowSingle(eList, 1) # Graphs consisting of Jun-Aug eList <- setPA(eList, paStart=6,paLong=3) plotFlowSingle(eList, 1)
The annual results reported are for a specified "period of analysis" which can be an entire water year, a calendar, a season or even an individual month. The user specifies this period of analysis in the call to setupYears. Values plotted express a flux rate, such as thousand kg per year For a period of analysis that is less than a year, this does not equal the mass transported over the period of analysis
Although there are a lot of optional arguments to this function, most are set to a logical default.
Data come from named list (eList), which contains a Daily dataframe with the daily flow data, and an INFO dataframe with metadata.
plotFluxHist(eList, yearStart = NA, yearEnd = NA, fluxUnit = 9, fluxMax = NA, printTitle = TRUE, usgsStyle = FALSE, plotFlowNorm = TRUE, plotAnnual = TRUE, plotGenFlux = FALSE, tinyPlot = FALSE, col = "black", col.pred = "green", col.gen = "red", cex = 0.8, cex.axis = 1.1, cex.main = 1.1, lwd = 2, customPar = FALSE, ...)
plotFluxHist(eList, yearStart = NA, yearEnd = NA, fluxUnit = 9, fluxMax = NA, printTitle = TRUE, usgsStyle = FALSE, plotFlowNorm = TRUE, plotAnnual = TRUE, plotGenFlux = FALSE, tinyPlot = FALSE, col = "black", col.pred = "green", col.gen = "red", cex = 0.8, cex.axis = 1.1, cex.main = 1.1, lwd = 2, customPar = FALSE, ...)
eList |
named list with at least the Daily and INFO dataframes |
yearStart |
numeric is the calendar year containing the first estimated annual value to be plotted, default is NA (which allows it to be set automatically by the data) |
yearEnd |
numeric is the calendar year just after the last estimated annual value to be plotted, default is NA (which allows it to be set automatically by the data) |
fluxUnit |
number representing entry in pre-defined fluxUnit class array. |
fluxMax |
number specifying the maximum value to be used on the vertical axis, default is NA (which allows it to be set automatically by the data) |
printTitle |
logical variable if TRUE title is printed, if FALSE title is not printed (this is best for a multi-plot figure) |
usgsStyle |
logical option to use USGS style guidelines. Setting this option to TRUE does NOT guarantee USGS compliance. It will only change automatically generated labels. |
plotFlowNorm |
logical variable if TRUE the flow normalized line is plotted, if FALSE not plotted |
plotAnnual |
logical variable if TRUE annual flux points are plotted, if FALSE not plotted |
plotGenFlux |
logical variable. If |
tinyPlot |
logical variable, if TRUE plot is designed to be plotted small, as a part of a multipart figure, default is FALSE |
col |
color of points on plot, see ?par 'Color Specification' |
col.pred |
color of flow normalized line on plot, see ?par 'Color Specification' |
col.gen |
color of points for WRTDS_K output on plot, see ?par 'Color Specification' |
cex |
numerical value giving the amount by which plotting symbols should be magnified |
cex.axis |
magnification to be used for axis annotation relative to the current setting of cex |
cex.main |
magnification to be used for main titles relative to the current setting of cex |
lwd |
number line width |
customPar |
logical defaults to FALSE. If TRUE, par() should be set by user before calling this function (for example, adjusting margins with par(mar=c(5,5,5,5))). If customPar FALSE, EGRET chooses the best margins depending on tinyPlot. |
... |
arbitrary graphical parameters that will be passed to genericEGRETDotPlot function (see ?par for options) |
yearStart <- 2001 yearEnd <- 2010 eList <- Choptank_eList # Water year: plotFluxHist(eList) plotFluxHist(eList, yearStart, yearEnd, fluxUnit = 1) plotFluxHist(eList, yearStart, yearEnd, fluxUnit = 'kgDay')
yearStart <- 2001 yearEnd <- 2010 eList <- Choptank_eList # Water year: plotFluxHist(eList) plotFluxHist(eList, yearStart, yearEnd, fluxUnit = 1) plotFluxHist(eList, yearStart, yearEnd, fluxUnit = 'kgDay')
Data come from named list, which contains a Sample dataframe with the sample data, and an INFO dataframe with metadata.
Although there are a lot of optional arguments to this function, most are set to a logical default.
plotFluxPred(eList, fluxUnit = 3, fluxMax = NA, printTitle = TRUE, oneToOneLine = TRUE, customPar = FALSE, col = "black", lwd = 1, cex = 0.8, cex.axis = 1.1, cex.main = 1.1, tinyPlot = FALSE, usgsStyle = FALSE, logScale = FALSE, randomCensored = FALSE, ...)
plotFluxPred(eList, fluxUnit = 3, fluxMax = NA, printTitle = TRUE, oneToOneLine = TRUE, customPar = FALSE, col = "black", lwd = 1, cex = 0.8, cex.axis = 1.1, cex.main = 1.1, tinyPlot = FALSE, usgsStyle = FALSE, logScale = FALSE, randomCensored = FALSE, ...)
eList |
named list with at least the Sample and INFO dataframes |
fluxUnit |
number representing entry in pre-defined fluxUnit class array. |
fluxMax |
number specifying the maximum value to be used on the vertical axis, default is NA (which allows it to be set automatically by the data) |
printTitle |
logical variable if TRUE title is printed, if FALSE not printed (this is best for a multi-plot figure) |
oneToOneLine |
inserts 1:1 line |
customPar |
logical defaults to FALSE. If TRUE, par() should be set by user before calling this function (for example, adjusting margins with par(mar=c(5,5,5,5))). If customPar FALSE, EGRET chooses the best margins depending on tinyPlot. |
col |
color of points on plot, see ?par 'Color Specification' |
lwd |
number line width |
cex |
numerical value giving the amount by which plotting symbols should be magnified |
cex.axis |
magnification to be used for axis annotation relative to the current setting of cex |
cex.main |
magnification to be used for main titles relative to the current setting of cex |
tinyPlot |
logical variable if TRUE plot is designed to be small, if FALSE it is designed for page size, default is FALSE (not fully implemented yet) |
usgsStyle |
logical option to use USGS style guidelines. Setting this option to TRUE does NOT guarantee USGS compliance. It will only change automatically generated labels. |
logScale |
logical if TRUE x and y plotted in log axis |
randomCensored |
logical. Show censored values as randomized. |
... |
arbitrary graphical parameters that will be passed to genericEGRETDotPlot function (see ?par for options) |
selectDays
, genericEGRETDotPlot
eList <- Choptank_eList # Water year: plotFluxPred(eList) plotFluxPred(eList, fluxUnit = 'poundsDay') plotFluxPred(eList, logScale=TRUE) # Graphs consisting of Jun-Aug eList <- setPA(eList, paStart=6,paLong=3) plotFluxPred(eList)
eList <- Choptank_eList # Water year: plotFluxPred(eList) plotFluxPred(eList, fluxUnit = 'poundsDay') plotFluxPred(eList, logScale=TRUE) # Graphs consisting of Jun-Aug eList <- setPA(eList, paStart=6,paLong=3) plotFluxPred(eList)
Concentration and discharge data used to compute flux come from a data frame named Sample which contains the sample data. The metadata come from a data frame named INFO.
Although there are a lot of optional arguments to this function, most are set to a logical default.
Data come from named list, which contains a Sample dataframe with the sample data, and an INFO dataframe with metadata.
plotFluxQ(eList, qUnit = 2, logScale = TRUE, fluxUnit = 3, tinyPlot = FALSE, fluxMax = NA, fluxMin = NA, col = "black", lwd = 1, printTitle = TRUE, usgsStyle = FALSE, cex = 0.8, cex.axis = 1.1, cex.main = 1.1, customPar = FALSE, ...)
plotFluxQ(eList, qUnit = 2, logScale = TRUE, fluxUnit = 3, tinyPlot = FALSE, fluxMax = NA, fluxMin = NA, col = "black", lwd = 1, printTitle = TRUE, usgsStyle = FALSE, cex = 0.8, cex.axis = 1.1, cex.main = 1.1, customPar = FALSE, ...)
eList |
named list with at least the Sample and INFO dataframes |
qUnit |
object of qUnit class. |
logScale |
logical, default TRUE, TRUE creates a log-log scale, FALSE creates an arithmatic scale. |
fluxUnit |
object of fluxUnit class. |
tinyPlot |
logical variable if TRUE plot is designed to fit into a multi-plot array, default is FALSE |
fluxMax |
numeric specifying the maximum value to be used on the vertical axis, default is NA (which allows it to be set automatically by the data) |
fluxMin |
numeric specifying the minimum value to be used on the vertical axis, default is NA (which allows it to be set automatically by the data) |
col |
color of points on plot, see ?par 'Color Specification' |
lwd |
number line width |
printTitle |
logical variable if TRUE title is printed, if FALSE not printed (this is best for a multi-plot figure) |
usgsStyle |
logical option to use USGS style guidelines. Setting this option to TRUE does NOT guarantee USGS compliance. It will only change automatically generated labels. |
cex |
numerical value giving the amount by which plotting symbols should be magnified |
cex.axis |
magnification to be used for axis annotation relative to the current setting of cex |
cex.main |
magnification to be used for main titles relative to the current setting of cex |
customPar |
logical defaults to FALSE. If TRUE, par() should be set by user before calling this function (for example, adjusting margins with par(mar=c(5,5,5,5))). If customPar FALSE, EGRET chooses the best margins depending on tinyPlot. |
... |
arbitrary graphical parameters that will be passed to genericEGRETDotPlot function (see ?par for options) |
selectDays
, genericEGRETDotPlot
eList <- Choptank_eList # Water year: plotFluxQ(eList, qUnit = 1, fluxUnit = 1) plotFluxQ(eList, fluxUnit = 'kgDay') plotFluxQ(eList) # Graphs consisting of Jun-Aug eList <- setPA(eList, paStart=6,paLong=3) plotFluxQ(eList)
eList <- Choptank_eList # Water year: plotFluxQ(eList, qUnit = 1, fluxUnit = 1) plotFluxQ(eList, fluxUnit = 'kgDay') plotFluxQ(eList) # Graphs consisting of Jun-Aug eList <- setPA(eList, paStart=6,paLong=3) plotFluxQ(eList)
This plot is useful for visual examination of the ability of the WRTDS, or other model, to fit the data, as seen in a time-series perspective.
Although there are a lot of optional arguments to this function, most are set to a logical default.
Data come from named list, which contains a Sample dataframe with the sample data, a Daily dataframe with the daily flow data, and an INFO dataframe with metadata.
plotFluxTimeDaily(eList, yearStart = NA, yearEnd = NA, tinyPlot = FALSE, fluxUnit = 3, fluxMax = NA, randomCensored = FALSE, printTitle = TRUE, plotGenFlux = TRUE, usgsStyle = FALSE, cex = 0.8, cex.axis = 1.1, cex.main = 1.1, customPar = FALSE, col = "black", lwd = 1, prettyDate = TRUE, ...)
plotFluxTimeDaily(eList, yearStart = NA, yearEnd = NA, tinyPlot = FALSE, fluxUnit = 3, fluxMax = NA, randomCensored = FALSE, printTitle = TRUE, plotGenFlux = TRUE, usgsStyle = FALSE, cex = 0.8, cex.axis = 1.1, cex.main = 1.1, customPar = FALSE, col = "black", lwd = 1, prettyDate = TRUE, ...)
eList |
named list with at least the Daily, Sample, and INFO dataframes |
yearStart |
numeric specifying the starting date (expressed as decimal years, for example 1989.0) for the plot |
yearEnd |
numeric specifying the ending date for the plot |
tinyPlot |
logical variable, if TRUE plot is designed to be short and wide, default is FALSE. |
fluxUnit |
number representing in pre-defined fluxUnit class array. |
fluxMax |
number specifying the maximum value to be used on the vertical axis, default is NA (which allows it to be set automatically by the data) |
randomCensored |
logical, if TRUE plot a random value for censored data. Default is FALSE. |
printTitle |
logical variable if TRUE title is printed, if FALSE title is not printed (this is best for a multi-plot figure) |
plotGenFlux |
logical variable. If |
usgsStyle |
logical option to use USGS style guidelines. Setting this option to TRUE does NOT guarantee USGS compliance. It will only change automatically generated labels. |
cex |
numerical value giving the amount by which plotting symbols should be magnified |
cex.axis |
magnification to be used for axis annotation relative to the current setting of cex |
cex.main |
magnification to be used for main titles relative to the current setting of cex |
customPar |
logical defaults to FALSE. If TRUE, par() should be set by user before calling this function (for example, adjusting margins with par(mar=c(5,5,5,5))). If customPar FALSE, EGRET chooses the best margins depending on tinyPlot. |
col |
color of points on plot, see ?par 'Color Specification' |
lwd |
number line width |
prettyDate |
logical use 'pretty' limits for date axis if TRUE, or force the yearStart/yearEnd as limits if FALSE |
... |
arbitrary graphical parameters that will be passed to genericEGRETDotPlot function (see ?par for options) |
selectDays
, genericEGRETDotPlot
eList <- Choptank_eList # Water year: plotFluxTimeDaily(eList) plotFluxTimeDaily(eList, 2001,2009)
eList <- Choptank_eList # Water year: plotFluxTimeDaily(eList) plotFluxTimeDaily(eList, 2001,2009)
Part of the flowHistory system. The four statistics are 1-day maximum, annual mean, annual 7-day minimum, and the running standard deviation of the log daily discharge values.
Although there are a lot of optional arguments to this function, most are set to a logical default.
Data come from named list, which contains a Daily dataframe with the daily flow data, and an INFO dataframe with metadata. Each graph shows a loess smooth of the data that are plotted.
plotFour(eList, yearStart = NA, yearEnd = NA, printTitle = TRUE, runoff = FALSE, qUnit = 1, window = 15, cex = 0.8, cex.axis = 1.2, cex.main = 1.2, col = "black", lwd = 1, ...)
plotFour(eList, yearStart = NA, yearEnd = NA, printTitle = TRUE, runoff = FALSE, qUnit = 1, window = 15, cex = 0.8, cex.axis = 1.2, cex.main = 1.2, col = "black", lwd = 1, ...)
eList |
named list with at least Daily and INFO dataframes |
yearStart |
A numeric value for year in which the graph should start, default is NA, which indicates that the graph should start with first annual value |
yearEnd |
A numeric value for year in which the graph should end, default is NA, which indicates that the graph should end with last annual value |
printTitle |
logical variable, if TRUE title is printed, if FALSE title is not printed, default is TRUE |
runoff |
logical variable, if TRUE the streamflow data are converted to runoff values in mm/day |
qUnit |
object of qUnit class |
window |
numeric which is the full width, in years, of the time window over which the standard deviation is computed, default = 15 |
cex |
numerical value giving the amount by which plotting symbols should be magnified |
cex.axis |
magnification to be used for axis annotation relative to the current setting of cex |
cex.main |
magnification to be used for main titles relative to the current setting of cex |
col |
color of points on plot, see ?par 'Color Specification' |
lwd |
number line width. Default is 1. |
... |
arbitrary graphical parameters that will be passed to genericEGRETDotPlot function (see ?par for options) |
eList <- Choptank_eList #Water year: plotFour(eList) # Graphs consisting of Jun-Aug eList <- setPA(eList,paStart=6,paLong=3) plotFour(eList)
eList <- Choptank_eList #Water year: plotFour(eList) # Graphs consisting of Jun-Aug eList <- setPA(eList,paStart=6,paLong=3) plotFour(eList)
Part of the flowHistory system. The four statistics are 1-day maximum, annual mean, annual median, and annual 7-day minimum. Although there are a lot of optional arguments to this function, most are set to a logical default.
Data come from named list, which contains a Sample dataframe with the sample data, a Daily dataframe with the daily flow data, and an INFO dataframe with metadata. Each graph shows a loess smooth of the data that are plotted.
plotFourStats(eList, yearStart = NA, yearEnd = NA, printTitle = TRUE, runoff = FALSE, cex.main = 1.2, qUnit = 1, cex.axis = 1.2, cex = 0.8, col = "black", lwd = 1, ...)
plotFourStats(eList, yearStart = NA, yearEnd = NA, printTitle = TRUE, runoff = FALSE, cex.main = 1.2, qUnit = 1, cex.axis = 1.2, cex = 0.8, col = "black", lwd = 1, ...)
eList |
named list with at least Daily and INFO dataframes |
yearStart |
A numeric value for year in which the graph should start, default is NA, which indicates that the graph should start with first annual value |
yearEnd |
A numeric value for year in which the graph should end, default is NA, which indicates that the graph should end with last annual value |
printTitle |
logical variable, if TRUE title is printed, if FALSE title is not printed, default is TRUE |
runoff |
logical variable, if TRUE the streamflow data are converted to runoff values in mm/day |
cex.main |
magnification to be used for main titles relative to the current setting of cex |
qUnit |
object of qUnit class |
cex.axis |
magnification to be used for axis annotation relative to the current setting of cex |
cex |
numerical value giving the amount by which plotting symbols should be magnified |
col |
color of points on plot, see ?par 'Color Specification' |
lwd |
number line width. Default is 1. |
... |
arbitrary graphical parameters that will be passed to genericEGRETDotPlot function (see ?par for options) |
eList <- Choptank_eList # Water year: plotFourStats(eList) # Graphs consisting of Jun-Aug eList <- setPA(eList,paStart=6,paLong=3) plotFourStats(eList)
eList <- Choptank_eList # Water year: plotFourStats(eList) # Graphs consisting of Jun-Aug eList <- setPA(eList,paStart=6,paLong=3) plotFourStats(eList)
Plot monthly trend result from runPairs. The change in concentration
or flux is calculated from the runPairs
function. This plotting
function shows an arrow for each month. If the trend from year1 to year2
was increasing, the arrow is red and pointing up. If the trend was decreasing,
the arrow is black and pointing down.
plotMonthTrend(pairResults, yMax = NA, arrowFactor = 0.75, flux = TRUE, printTitle = TRUE, concLab = 1, monthLab = 1)
plotMonthTrend(pairResults, yMax = NA, arrowFactor = 0.75, flux = TRUE, printTitle = TRUE, concLab = 1, monthLab = 1)
pairResults |
results from |
yMax |
numeric. Upper limit for plot. Default is |
arrowFactor |
numeric. Scaling factor for the size of the arrows. The arrows are automatically scaled to the overall trend. This scaling factor helps adjust how big/small they are. |
flux |
logical. |
printTitle |
logical variable if TRUE title is printed, if FALSE title is not printed (this is best for a multi-plot figure) |
concLab |
object of concUnit class, or numeric represented the short code,
or character representing the descriptive name. By default, this argument sets
concentration labels to use either Concentration or Conc (for tiny plots). Units
are taken from the eList$INFO$param.units. To use any other words than
"Concentration" see |
monthLab |
object of monthLabel class, or numeric represented the short code, or character representing the descriptive name. |
The flux values for each month are flow normalized monthly watershed yields expressed as kg/month/km^2. The concentrations are the mean flow normalized concentration, expressed in whatever concentration units the raw data are expressed as (typically mg/L).
Base R plot of monthly trends
eList <- Choptank_eList year1 <- 1985 year2 <- 2010 pairOut_1 <- runPairs(eList, year1, year2, windowSide = 0) plotMonthTrend(pairOut_1) plotMonthTrend(pairOut_1, flux = FALSE) eList <- setPA(eList, paStart = 12, paLong = 3) pairOut_2 <- runPairs(eList, year1, year2, windowSide = 0) plotMonthTrend(pairOut_2) eList <- setPA(eList, paStart = 1, paLong = 12) pairOut_3 <- runPairs(eList, year1, year2, windowSide = 0) plotMonthTrend(pairOut_3)
eList <- Choptank_eList year1 <- 1985 year2 <- 2010 pairOut_1 <- runPairs(eList, year1, year2, windowSide = 0) plotMonthTrend(pairOut_1) plotMonthTrend(pairOut_1, flux = FALSE) eList <- setPA(eList, paStart = 12, paLong = 3) pairOut_2 <- runPairs(eList, year1, year2, windowSide = 0) plotMonthTrend(pairOut_2) eList <- setPA(eList, paStart = 1, paLong = 12) pairOut_3 <- runPairs(eList, year1, year2, windowSide = 0) plotMonthTrend(pairOut_3)
Part of flowHistory component. Allows discharge record to only show those discharges above a given threshold
Although there are a lot of optional arguments to this function, most are set to a logical default.
Data come from named list, which contains a Daily dataframe with the daily flow data, and an INFO dataframe with metadata.
plotQTimeDaily(eList, yearStart = NA, yearEnd = NA, qLower = NA, qUnit = 1, logScale = FALSE, tinyPlot = FALSE, printTitle = TRUE, usgsStyle = FALSE, lwd = 3, col = "red", cex.main = 1.2, cex.lab = 1.2, customPar = FALSE, prettyDate = TRUE, ...)
plotQTimeDaily(eList, yearStart = NA, yearEnd = NA, qLower = NA, qUnit = 1, logScale = FALSE, tinyPlot = FALSE, printTitle = TRUE, usgsStyle = FALSE, lwd = 3, col = "red", cex.main = 1.2, cex.lab = 1.2, customPar = FALSE, prettyDate = TRUE, ...)
eList |
named list with at least the Daily and INFO dataframes |
yearStart |
numeric indicating the starting year for the graph |
yearEnd |
numeric indicating the ending year for the graph (should be a time in decimal years that is after the last observations to be plotted) |
qLower |
numeric specifying the lower bound on discharges that are to be plotted, must be in the units specified by qUnit, default is NA (lower bound is zero) |
qUnit |
object of qUnit class. |
logScale |
logical whether or not to use a log scale in the y axis. Default is FALSE. |
tinyPlot |
logical variable, if TRUE plot is designed to be short and wide, default is FALSE. |
printTitle |
logical variable if TRUE title is printed, if FALSE title is not printed (this is best for a multi-plot figure) |
usgsStyle |
logical option to use USGS style guidelines. Setting this option to TRUE does NOT guarantee USGS compliance. It will only change automatically generated labels. |
lwd |
line width, a positive number, defaulting to 3 |
col |
specification for the default plotting color |
cex.main |
magnification to be used for main titles relative to the current setting of cex |
cex.lab |
magnification to be used for x and y labels relative to the current setting of cex |
customPar |
logical defaults to FALSE. If TRUE, par() should be set by user before calling this function (for example, adjusting margins with par(mar=c(5,5,5,5))). If customPar FALSE, EGRET chooses the best margins depending on tinyPlot. |
prettyDate |
logical use 'pretty' limits for date axis if TRUE, or force the yearStart/yearEnd as limits if FALSE |
... |
arbitrary graphical parameters that will be passed to genericEGRETDotPlot function (see ?par for options) |
selectDays
, genericEGRETDotPlot
eList <- Choptank_eList # Water year: plotQTimeDaily(eList) plotQTimeDaily(eList, yearStart=1990, yearEnd=2000,qLower=1500) plotQTimeDaily(eList, prettyDate=FALSE)
eList <- Choptank_eList # Water year: plotQTimeDaily(eList) plotQTimeDaily(eList, yearStart=1990, yearEnd=2000,qLower=1500) plotQTimeDaily(eList, prettyDate=FALSE)
This function produces a plot of the residuals from WRTDS, expressed in natural log concentration units versus the estimated values, also in natural log concentration units. These estimates are the log-space estimates prior to bias-correction. The function provides an alternative for viewing the standardized residuals, where the each residual is divided by its estimated standard error.
Although there are a lot of optional arguments to this function, most are set to a logical default.
Data come from named list, which contains a Sample dataframe with the sample data, and an INFO dataframe with metadata.
plotResidPred(eList, stdResid = FALSE, tinyPlot = FALSE, printTitle = TRUE, col = "black", lwd = 1, cex = 0.8, cex.axis = 1.1, cex.main = 1.1, customPar = FALSE, randomCensored = FALSE, concLab = 1, ...)
plotResidPred(eList, stdResid = FALSE, tinyPlot = FALSE, printTitle = TRUE, col = "black", lwd = 1, cex = 0.8, cex.axis = 1.1, cex.main = 1.1, customPar = FALSE, randomCensored = FALSE, concLab = 1, ...)
eList |
named list with at least the Sample and INFO dataframes |
stdResid |
logical variable, if TRUE it uses the standardized residual, if FALSE it uses the actual, default is FALSE |
tinyPlot |
logical variable, if TRUE plot is designed to be plotted small as part of a multipart figure, default is FALSE. |
printTitle |
logical variable if TRUE title is printed, if FALSE not printed (this is best for a multi-plot figure) |
col |
color of points on plot, see ?par 'Color Specification' |
lwd |
number line width |
cex |
numerical value giving the amount by which plotting symbols should be magnified |
cex.axis |
magnification to be used for x and y labels relative to the current setting of cex |
cex.main |
magnification to be used for main titles relative to the current setting of cex |
customPar |
logical defaults to FALSE. If TRUE, par() should be set by user before calling this function (for example, adjusting margins with par(mar=c(5,5,5,5))). If customPar FALSE, EGRET chooses the best margins depending on tinyPlot. |
randomCensored |
logical. Show censored residuals as randomized. |
concLab |
object of concUnit class, or numeric represented the short code,
or character representing the descriptive name. By default, this argument sets
concentration labels to use either Concentration or Conc (for tiny plots). Units
are taken from the eList$INFO$param.units. To use any other words than
"Concentration" see |
... |
arbitrary graphical parameters that will be passed to genericEGRETDotPlot function (see ?par for options) |
selectDays
, genericEGRETDotPlot
eList <- Choptank_eList # Water year: plotResidPred(eList) # Graphs consisting of Jun-Aug eList <- setPA(eList, paStart=6,paLong=3) plotResidPred(eList)
eList <- Choptank_eList # Water year: plotResidPred(eList) # Graphs consisting of Jun-Aug eList <- setPA(eList, paStart=6,paLong=3) plotResidPred(eList)
This function produces a plot of the residuals from WRTDS, expressed in natural log concentration units versus the discharge shown on a log scale. The function also provides an alternative for viewing the standardized residuals, where the each residual is divided by its estimated standard error
Although there are a lot of optional arguments to this function, most are set to a logical default.
Data come from named list, which contains a Sample dataframe with the sample data, and an INFO dataframe with metadata.
plotResidQ(eList, qUnit = 2, tinyPlot = FALSE, stdResid = FALSE, printTitle = TRUE, col = "black", lwd = 1, cex = 0.8, cex.axis = 1.1, cex.main = 1.1, rmSciX = FALSE, customPar = FALSE, randomCensored = FALSE, usgsStyle = FALSE, ...)
plotResidQ(eList, qUnit = 2, tinyPlot = FALSE, stdResid = FALSE, printTitle = TRUE, col = "black", lwd = 1, cex = 0.8, cex.axis = 1.1, cex.main = 1.1, rmSciX = FALSE, customPar = FALSE, randomCensored = FALSE, usgsStyle = FALSE, ...)
eList |
named list with at least the Sample and INFO dataframes |
qUnit |
object of qUnit class |
tinyPlot |
logical variable, if TRUE plot is designed to be plotted small as part of a multipart figure, default is FALSE. |
stdResid |
logical variable, if TRUE it uses the standardized residual, if FALSE it uses the actual, default is FALSE |
printTitle |
logical variable if TRUE title is printed, if FALSE not printed (this is best for a multi-plot figure) |
col |
color of points on plot, see ?par 'Color Specification' |
lwd |
number line width |
cex |
numerical value giving the amount by which plotting symbols should be magnified |
cex.axis |
magnification to be used for axis annotation relative to the current setting of cex |
cex.main |
magnification to be used for main titles relative to the current setting of cex |
rmSciX |
logical defaults to FALSE, changes x label from scientific to fixed |
customPar |
logical defaults to FALSE. If TRUE, par() should be set by user before calling this function (for example, adjusting margins with par(mar=c(5,5,5,5))). If customPar FALSE, EGRET chooses the best margins depending on tinyPlot. |
randomCensored |
logical. Show censored residuals as randomized. |
usgsStyle |
logical option to use USGS style guidelines. Setting this option to TRUE does NOT guarantee USGS complience. It will only change automatically generated labels. |
... |
arbitrary graphical parameters that will be passed to genericEGRETDotPlot function (see ?par for options) |
selectDays
, genericEGRETDotPlot
eList <- Choptank_eList # Water year: plotResidQ(eList) # Graphs consisting of Jun-Aug eList <- setPA(eList, paStart=6,paLong=3) plotResidQ(eList)
eList <- Choptank_eList # Water year: plotResidQ(eList) # Graphs consisting of Jun-Aug eList <- setPA(eList, paStart=6,paLong=3) plotResidQ(eList)
This function produces a plot of the residuals from WRTDS, expressed in natural log concentration units versus time. It also provides an alternative for viewing the standardized residuals, where the each residual is divided by its estimated standard error.
Although there are a lot of optional arguments to this function, most are set to a logical default.
Data come from named list, which contains a Sample dataframe with the sample data, and an INFO dataframe with metadata.
plotResidTime(eList, stdResid = FALSE, printTitle = TRUE, hLine = TRUE, tinyPlot = FALSE, col = "black", lwd = 1, cex = 0.8, cex.axis = 1.1, cex.main = 1.1, customPar = FALSE, randomCensored = FALSE, ...)
plotResidTime(eList, stdResid = FALSE, printTitle = TRUE, hLine = TRUE, tinyPlot = FALSE, col = "black", lwd = 1, cex = 0.8, cex.axis = 1.1, cex.main = 1.1, customPar = FALSE, randomCensored = FALSE, ...)
eList |
named list with at least the Sample and INFO dataframes |
stdResid |
logical variable, if TRUE it uses the standardized residual, if FALSE it uses the actual, default is FALSE |
printTitle |
logical variable if TRUE title is printed, if FALSE not printed (this is best for a multi-plot figure) |
hLine |
inserts horizontal line at zero |
tinyPlot |
logical variable, if TRUE plot is designed to be plotted small, as a part of a multipart figure, default is FALSE |
col |
color of points on plot, see ?par 'Color Specification' |
lwd |
number line width |
cex |
numerical value giving the amount by which plotting symbols should be magnified |
cex.axis |
magnification to be used for axis annotation relative to the current setting of cex |
cex.main |
magnification to be used for main titles relative to the current setting of cex |
customPar |
logical defaults to FALSE. If TRUE, par() should be set by user before calling this function (for example, adjusting margins with par(mar=c(5,5,5,5))). If customPar FALSE, EGRET chooses the best margins depending on tinyPlot. |
randomCensored |
logical. Show censored residuals as randomized. |
... |
arbitrary graphical parameters that will be passed to genericEGRETDotPlot function (see ?par for options) |
selectDays
, genericEGRETDotPlot
eList <- Choptank_eList # Water year: plotResidTime(eList) # Graphs consisting of Jun-Aug eList <- setPA(eList, paStart=6,paLong=3) plotResidTime(eList)
eList <- Choptank_eList # Water year: plotResidTime(eList) # Graphs consisting of Jun-Aug eList <- setPA(eList, paStart=6,paLong=3) plotResidTime(eList)
Graph of the standard deviation of the log of daily discharge versus year
Although there are a lot of optional arguments to this function, most are set to a logical default.
Data come from named list, which contains a Daily dataframe with the daily flow data, and an INFO dataframe with metadata.
plotSDLogQ(eList, yearStart = NA, yearEnd = NA, window = 15, sdMax = NA, printTitle = TRUE, tinyPlot = FALSE, printStaName = TRUE, printPA = TRUE, cex = 0.8, cex.main = 1.1, cex.axis = 1.1, lwd = 2, customPar = FALSE, ...)
plotSDLogQ(eList, yearStart = NA, yearEnd = NA, window = 15, sdMax = NA, printTitle = TRUE, tinyPlot = FALSE, printStaName = TRUE, printPA = TRUE, cex = 0.8, cex.main = 1.1, cex.axis = 1.1, lwd = 2, customPar = FALSE, ...)
eList |
named list with at least the Daily and INFO dataframes |
yearStart |
numeric is the calendar year of the first value to be included in graph, default is NA, which plots from the start of the period of record |
yearEnd |
numeric is the calendar year of the last value to be included in graph, default is NA, which plots to the end of the period of record |
window |
numeric which is the full width, in years, of the time window over which the standard deviation is computed, default = 15 |
sdMax |
numeric is the maximum value to be used on the vertical axis of the graph, default is NA (which allows it to be set automatically by the data) |
printTitle |
logical variable if TRUE title is printed, if FALSE title is not printed (this is best for a multi-plot figure), default is TRUE |
tinyPlot |
logical variable if TRUE plot is designed to be small, if FALSE it is designed for page size, default is FALSE (not fully implemented yet) |
printStaName |
logical variable, if TRUE print the station name, if FALSE do not, default is TRUE |
printPA |
logical variable, if TRUE print the period of analysis information in the plot title, if FALSE leave it out, default is TRUE |
cex |
numerical value giving the amount by which plotting symbols should be magnified |
cex.main |
magnification to be used for main titles relative to the current setting of cex |
cex.axis |
magnification to be used for axis annotation relative to the current setting of cex |
lwd |
line width, a positive number, defaulting to 2 |
customPar |
logical defaults to FALSE. If TRUE, par() should be set by user before calling this function (for example, adjusting margins with par(mar=c(5,5,5,5))). If customPar FALSE, EGRET chooses the best margins depending on tinyPlot. |
... |
arbitrary graphical parameters that will be passed to genericEGRETDotPlot function (see ?par for options) |
selectDays
, genericEGRETDotPlot
eList <- Choptank_eList # Water year: plotSDLogQ(eList) plotSDLogQ(eList, 1998, 2000)
eList <- Choptank_eList # Water year: plotSDLogQ(eList) plotSDLogQ(eList, 1998, 2000)
Plot of either concentration or flux over time showing both the WRTDS and WRTDSKalman estimates.
plotTimeSlice(eList, start = NA, end = NA, conc = TRUE, fluxUnit = 3, usgsStyle = FALSE)
plotTimeSlice(eList, start = NA, end = NA, conc = TRUE, fluxUnit = 3, usgsStyle = FALSE)
eList |
named list with at least the Daily, Sample, and INFO dataframes. This
eList must be run through |
start |
numeric start of DecYear for plot. If |
end |
numeric end of DecYear for plot. If |
conc |
logical. If |
fluxUnit |
number representing entry in pre-defined fluxUnit class array. |
usgsStyle |
logical option to use USGS style guidelines. Setting this option to TRUE does NOT guarantee USGS compliance. It will only change automatically generated labels |
In the plot title, Ratio of means is mean of WRTDSKalman estimates to the WRTDS Classic estimates. Ratio only calculated on the data shown in the figure, not the whole series. In the plot, red dots are measured values, blue dots are plotted at the reporting limit for those values that are censored.
eList <- Choptank_eList eList <- WRTDSKalman(eList, niter = 10) plotTimeSlice(eList, start = 1990, end = 1991, conc = TRUE) plotTimeSlice(eList, start = 1990, end = 1991, conc = FALSE) plotTimeSlice(eList, start = NA, end = 1991, conc = FALSE)
eList <- Choptank_eList eList <- WRTDSKalman(eList, niter = 10) plotTimeSlice(eList, start = 1990, end = 1991, conc = TRUE) plotTimeSlice(eList, start = 1990, end = 1991, conc = FALSE) plotTimeSlice(eList, start = NA, end = 1991, conc = FALSE)
Two plots to check the flux estimates using the WRTDS_K vs classic WRTDS.
The first is annual flux over time, where the two fluxes are shown in different colors.
The second is WRTDS vs WRTDSKalman flux estimates. The graphs can be output
either on top of each other, or side by side using the sideBySide
argument.
plotWRTDSKalman(eList, sideBySide = FALSE, fluxUnit = 9, usgsStyle = FALSE)
plotWRTDSKalman(eList, sideBySide = FALSE, fluxUnit = 9, usgsStyle = FALSE)
eList |
named list with at least the Daily, Sample, and INFO dataframes. This
eList must be run through |
sideBySide |
logical. If |
fluxUnit |
number representing entry in pre-defined fluxUnit class array. |
usgsStyle |
logical option to use USGS style guidelines. Setting this option to TRUE does NOT guarantee USGS compliance. It will only change automatically generated labels |
eList <- Choptank_eList eList <- WRTDSKalman(eList, niter = 10) plotWRTDSKalman(eList) plotWRTDSKalman(eList, sideBySide = TRUE)
eList <- Choptank_eList eList <- WRTDSKalman(eList, niter = 10) plotWRTDSKalman(eList) plotWRTDSKalman(eList, sideBySide = TRUE)
Creates ConcLow, ConcHigh, Uncen (0 if censored, 1 if uncensored) columns for Sample data frame for WRTDS analysis.
populateConcentrations(rawData)
populateConcentrations(rawData)
rawData |
vector with value and code columns |
concentrationColumns dataframe
code <- c("","<","") value <- c(1,2,3) dataInput <- data.frame(value, code, stringsAsFactors=FALSE) concentrationDF <- populateConcentrations(dataInput)
code <- c("","<","") value <- c(1,2,3) dataInput <- data.frame(value, code, stringsAsFactors=FALSE) concentrationDF <- populateConcentrations(dataInput)
Using raw data that has at least dateTime, value, code, populates the rest of the basic Daily data frame used in EGRET analysis.
populateDaily(rawData, qConvert, verbose = TRUE)
populateDaily(rawData, qConvert, verbose = TRUE)
rawData |
dataframe contains at least dateTime, value, code columns |
qConvert |
character conversion to cubic meters per second |
verbose |
logical specifying whether or not to display progress message |
A data frame 'Daily' with the following columns:
Name | Type | Description |
Q | numeric | Discharge in m^3/s |
Julian | integer | Number of days since Jan. 1, 1850 |
Month | integer | Month of the year [1-12] |
Day | integer | Day of the year [1-366] |
DecYear | numeric | Decimal year |
MonthSeq | integer | Number of months since January 1, 1850 |
Qualifier | character | Qualifying code |
i | integer | Index of days, starting with 1 |
LogQ | numeric | Natural logarithm of Q |
Q7 | numeric | 7 day running average of Q |
Q30 | numeric | 30 day running average of Q |
Robert M. Hirsch [email protected]
dateTime <- as.character(seq(as.Date("2001/1/1"), as.Date("2001/12/31"), by = "day")) value <- 1:365 code <- rep("",365) dataInput <- data.frame(dateTime, value, code, stringsAsFactors=FALSE) Daily <- populateDaily(dataInput, 2)
dateTime <- as.character(seq(as.Date("2001/1/1"), as.Date("2001/12/31"), by = "day")) value <- 1:365 code <- rep("",365) dataInput <- data.frame(dateTime, value, code, stringsAsFactors=FALSE) Daily <- populateDaily(dataInput, 2)
Used for the WRTDS Kalman set of functions, this function merges the ConcAve into the Daily data frame, renaming it "trueConc", then calculates the "trueFlux", and "stdResid".
populateDailySamp(eList)
populateDailySamp(eList)
eList |
named list with the INFO, Daily, and Sample dataframes and surfaces matrix |
eList <- Choptank_eList Daily2 <- populateDailySamp(eList)
eList <- Choptank_eList Daily2 <- populateDailySamp(eList)
Creates various date columns for WRTDS study.
populateDateColumns(rawData)
populateDateColumns(rawData)
rawData |
vector with dateTime |
DateFrame dataframe
dateTime <- c('1984-02-28 13:56', '1984-03-01 00:00', '1986-03-01 00:00', '1986-10-15 00:00') expandedDateDF <- populateDateColumns(dateTime) expandedDateDF dateTime <- c('1984-02-28', '1984-03-01', '1986-03-01', '1986-10-15') expandedDateDF <- populateDateColumns(dateTime) expandedDateDF
dateTime <- c('1984-02-28 13:56', '1984-03-01 00:00', '1986-03-01 00:00', '1986-10-15 00:00') expandedDateDF <- populateDateColumns(dateTime) expandedDateDF dateTime <- c('1984-02-28', '1984-03-01', '1986-03-01', '1986-10-15') expandedDateDF <- populateDateColumns(dateTime) expandedDateDF
Populates INFO data frame with additional user-supplied information concerning the measured parameter.
populateParameterINFO(parameterCd, INFO, interactive = TRUE)
populateParameterINFO(parameterCd, INFO, interactive = TRUE)
parameterCd |
character USGS parameter code |
INFO |
dataframe with value and code columns. Default is INFO |
interactive |
logical Option for interactive mode. If TRUE, there is user interaction for error handling and data checks. Default is TRUE. If running in batch, should be set to FALSE. |
INFO dataframe
library(dataRetrieval) INFO <- readNWISsite('01594440') parameterCd <- "01075" parameterData <- readNWISpCode(parameterCd) INFO$param.nm <- parameterData$parameter_nm INFO$param.units <- parameterData$parameter_units INFO$paramShortName <- parameterData$srsname INFO$paramNumber <- parameterData$parameter_cd INFO <- populateParameterINFO(parameterCd, INFO, interactive = FALSE)
library(dataRetrieval) INFO <- readNWISsite('01594440') parameterCd <- "01075" parameterData <- readNWISpCode(parameterCd) INFO$param.nm <- parameterData$parameter_nm INFO$param.units <- parameterData$parameter_units INFO$paramShortName <- parameterData$srsname INFO$paramNumber <- parameterData$parameter_cd INFO <- populateParameterINFO(parameterCd, INFO, interactive = FALSE)
Creates ConcAve and ConcLow based on Uncen. Removes any samples with NA values in ConcHigh.
populateSampleColumns(rawData)
populateSampleColumns(rawData)
rawData |
dataframe with dateTime, ConcLow, ConcHigh, Uncen |
Sample2 dataframe with columns: Date, ConcLow, ConcHigh, Uncen, ConcAve, Julian, Month, Day, DecYear, MonthSeq, waterYear, SinDY, and CosDY (DY = decimal year)
dateTime <- c('1985-01-01', '1985-01-02', '1985-01-03') ConcLow <- c(1,2,0) ConcHigh <- c(1,2,3) Uncen <- c(1,1,0) dataInput <- data.frame(dateTime, ConcLow, ConcHigh, Uncen, stringsAsFactors=FALSE) Sample <- populateSampleColumns(dataInput)
dateTime <- c('1985-01-01', '1985-01-02', '1985-01-03') ConcLow <- c(1,2,0) ConcHigh <- c(1,2,3) Uncen <- c(1,1,0) dataInput <- data.frame(dateTime, ConcLow, ConcHigh, Uncen, stringsAsFactors=FALSE) Sample <- populateSampleColumns(dataInput)
Populates INFO data frame with additional user-supplied information. Also removes fields not related to WRTDS study.
populateSiteINFO(INFO, siteNumber, interactive = TRUE)
populateSiteINFO(INFO, siteNumber, interactive = TRUE)
INFO |
dataframe with value and code columns |
siteNumber |
character USGS site number |
interactive |
logical Option for interactive mode. If TRUE, there is user interaction for error handling and data checks. Default is TRUE. If running in batch, should be set to FALSE. |
INFO dataframe
library(dataRetrieval) INFO <- readNWISsite('01594440') siteNumber <- "01594440" siteINFO <- populateSiteINFO(INFO, siteNumber, interactive = FALSE)
library(dataRetrieval) INFO <- readNWISsite('01594440') siteNumber <- "01594440" siteINFO <- populateSiteINFO(INFO, siteNumber, interactive = FALSE)
A small collection of helper functions
## S3 method for class 'egret' print(x, ...) ## S3 method for class 'egret' plot(x, ...) nDischarge(x) nObservations(x) nCensoredVals(x)
## S3 method for class 'egret' print(x, ...) ## S3 method for class 'egret' plot(x, ...) nDischarge(x) nObservations(x) nCensoredVals(x)
x |
EGRET object |
... |
additional parameters |
Choptank_eList print(Arkansas_eList) plot(Choptank_eList) plot(Choptank_eList, cex.main=0.7) nDischarge(Arkansas_eList) nObservations(Arkansas_eList) nCensoredVals(Arkansas_eList)
Choptank_eList print(Arkansas_eList) plot(Choptank_eList) plot(Choptank_eList, cex.main=0.7) nDischarge(Arkansas_eList) nObservations(Arkansas_eList) nCensoredVals(Arkansas_eList)
Cheat sheet to print out pre-defined flux unit properties from fluxUnit class Flux units included:
Number | ObjectName | shortName | unitFactor | unitName |
1 | POUNDS_DAY | lbs/day | 2.204623 | pounds/day |
2 | TONS_DAY | tons/day | 0.001102 | tons/day |
3 | KG_DAY | kg/day | 1 | kg/day |
4 | THOUSAND_KG_DAY | 10^3 kg/day | 0.001 | thousands of kg/day |
5 | TONS_YEAR | tons/yr | 0.402619 | tons/year |
6 | THOUSAND_TONS_YEAR | 10^3 tons/yr | 0.000402619 | thousands of tons/year |
7 | MILLION_TONS_YEAR | 10^6 tons/yr | 4.02619e-07 | millions of tons/year |
8 | THOUSAND_KG_YEAR | 10^3 kg/yr | 0.36525 | thousands of kg/year |
9 | MILLION_KG_YEAR | 10^6 kg/yr | 0.00036525 | millions of kg/year |
10 | BILLION_KG_YEAR | 10^9 kg/yr | 3.6525e-07 | billions of kg/year |
11 | thousandTonsDay | 10^3 tons/day | 1.102e-06 | thousands of tons/day |
12 | millionKgDay | 10^6 kg/day | 1e-06 | millions of kg/day |
13 | kgYear | kg/year | 365.25 | kg/year |
printFluxUnitCheatSheet()
printFluxUnitCheatSheet()
printFluxUnitCheatSheet()
printFluxUnitCheatSheet()
Prints the information from the runGroups
function.
This could be used to save the output to a text file.
printGroups(eList, groupResults)
printGroups(eList, groupResults)
eList |
named list with at least the Daily, Sample, and INFO dataframes |
groupResults |
output of |
text to console
eList <- Choptank_eList groupOut_1 <- runGroups(eList, windowSide = 0, group1firstYear = 1980, group1lastYear = 1990, group2firstYear = 1995, group2lastYear = 2005) printGroups(eList, groupOut_1)
eList <- Choptank_eList groupOut_1 <- runGroups(eList, windowSide = 0, group1firstYear = 1980, group1lastYear = 1990, group2firstYear = 1995, group2lastYear = 2005) printGroups(eList, groupOut_1)
Prints the information from the runPairs
function.
This could be used to save the output to a text file.
printPairs(eList, pairResults)
printPairs(eList, pairResults)
eList |
named list with at least the Daily, Sample, and INFO dataframes |
pairResults |
output of |
text to console
eList <- Choptank_eList year1 <- 1985 year2 <- 2010 pairOut_1 <- runPairs(eList, year1, year2, windowSide = 0) printPairs(eList, pairOut_1)
eList <- Choptank_eList year1 <- 1985 year2 <- 2010 pairOut_1 <- runPairs(eList, year1, year2, windowSide = 0) printPairs(eList, pairOut_1)
Cheat sheet to print out pre-defined qUnit properties from qUnit class. Flow units included:
Number | ObjectName | shortName | unitFactor |
1 | cfs | Cubic Feet per Second | 35.31467 |
2 | cms | Cubic Meters per Second | 1 |
3 | thousandCfs | Thousand Cubic Feet per Second | 0.03531467 |
4 | thousandCms | Thousand Cubic Meters per Second | 0.001 |
5 | mmDay | mm per day | |
6 | mmYear | mm per year | |
printqUnitCheatSheet()
printqUnitCheatSheet()
printqUnitCheatSheet()
printqUnitCheatSheet()
Part of the flowHistory system. The index of the flow statistics is istat. These statistics are: (1) 1-day minimum, (2) 7-day minimum, (3) 30-day minimum, (4) median (5) mean, (6) 30-day maximum, (7) 7-day maximum, and (8) 1-day maximum.
printSeries(eList, istat, qUnit = 1, runoff = FALSE)
printSeries(eList, istat, qUnit = 1, runoff = FALSE)
eList |
named list with at least the Daily and INFO dataframes |
istat |
A numeric value for the flow statistic to be graphed (possible values are 1 through 8) |
qUnit |
object of qUnit class |
runoff |
logical variable, if TRUE the streamflow data are converted to runoff values in mm/day |
The smoothing algorithm is as defined in makeAnnualSeries
.
smoothing window is defined by the eList$INFO$window value (default = 20)
data frame with:
years | integer | year |
qActual | numeric | Actual flow statistic (based on istat) |
qSmooth | numeric | Smoothed flow statistic |
eList <- Choptank_eList printReturn <- printSeries(eList, 5)
eList <- Choptank_eList printReturn <- printSeries(eList, 5)
Processes water quality data. This function looks at detection limit and detection conditions to determine if a value is left censored or not. Censored values are given the qualifier "<". The dataframe is also converted from a long to wide format.
processQWData(data)
processQWData(data)
data |
dataframe from Water Quality Portal |
data dataframe with first column dateTime, and at least one qualifier and value columns (subsequent qualifier/value columns could follow depending on the number of parameter codes)
#rawWQP <- dataRetrieval::readWQPqw('21FLEECO_WQX-IMPRGR80','Phosphorus', '', '') #Sample2 <- processQWData(rawWQP)
#rawWQP <- dataRetrieval::readWQPqw('21FLEECO_WQX-IMPRGR80','Phosphorus', '', '') #Sample2 <- processQWData(rawWQP)
Some details about the qUnit class
A character specifying the short name.
A numeric representing the conversion factor
A character specifying the full name.
An expression specifying the full name.
A character specifying flux with full text.
An expression specifying the abbreviated name.
A number for quick lookup
A character specifying the general type of measurement.
Calculates a random subset of the data based on repeated values from a specified column.
randomSubset(df, colName, seed = NA)
randomSubset(df, colName, seed = NA)
df |
data frame. Must include a column named by the argument colName. |
colName |
column name to check for duplicates |
seed |
integer value. Defaults to NA, which will not change the current seed. Setting the seed to any given value can be used to create repeatable output. |
df <- data.frame(Julian = c(1,2,2,3,4,4,4,6), y = 1:8) df df_random <- randomSubset(df, "Julian") df_random
df <- data.frame(Julian = c(1,2,2,3,4,4,4,6), y = 1:8) df df_random <- randomSubset(df, "Julian") df_random
Imports data from user-supplied data file. Specifically used to import water flow data for use in the EGRET package. For EGRET usage, the first column is expected to be dates. If the data is daily data, then next column is expected to be the measured values. If the data is sampled data, the next column is remark codes, and the third column is values. If the date format is not automatically detected, the format can be specified using the "format" argument.
readDataFromFile(filePath, fileName, hasHeader = TRUE, separator = ",", format = "%m/%d/%Y")
readDataFromFile(filePath, fileName, hasHeader = TRUE, separator = ",", format = "%m/%d/%Y")
filePath |
character specifying the path to the file. If it is in the working directory, use ".". |
fileName |
character name of file to open. |
hasHeader |
logical true if the first row of data is the column headers |
separator |
character character that separates data cells. The default is "," for a csv file. Tab delimited would be "\t". |
format |
character indicating the format of the date (which should
be in the first column). Default is "%m\/%d/%Y". See |
retval dataframe with dateTime, value, and code columns
filePath <- system.file("extdata", package="EGRET") fileName <- 'ChoptankRiverFlow.txt' ChopData <- readDataFromFile(filePath,fileName, separator="\t")
filePath <- system.file("extdata", package="EGRET") fileName <- 'ChoptankRiverFlow.txt' ChopData <- readDataFromFile(filePath,fileName, separator="\t")
Imports daily data from NWIS web service. This function gets the data from here: https://waterservices.usgs.gov/
readNWISDaily(siteNumber, parameterCd = "00060", startDate = "", endDate = "", verbose = TRUE, convert = TRUE)
readNWISDaily(siteNumber, parameterCd = "00060", startDate = "", endDate = "", verbose = TRUE, convert = TRUE)
siteNumber |
character USGS site number. This is usually an 8 digit number |
parameterCd |
character USGS parameter code. This is usually an 5 digit number. |
startDate |
character starting date for data retrieval in the form YYYY-MM-DD. |
endDate |
character ending date for data retrieval in the form YYYY-MM-DD. |
verbose |
logical specifying whether or not to display progress message |
convert |
logical Option to include a conversion from cfs to cms (35.314667). The default is TRUE, which is appropriate for using NWIS data in the EGRET package. Set this to FALSE to not include the conversion. If the parameter code is not 00060 (NWIS discharge), there is no conversion applied. |
A data frame 'Daily' with the following columns:
Name | Type | Description |
Date | Date | Date |
Q | numeric | Discharge in m^3/s |
Julian | integer | Number of days since Jan. 1, 1850 |
Month | integer | Month of the year [1-12] |
Day | integer | Day of the year [1-366] |
DecYear | numeric | Decimal year |
MonthSeq | integer | Number of months since January 1, 1850 |
Qualifier | character | Qualifying code |
i | integer | Index of days, starting with 1 |
LogQ | numeric | Natural logarithm of Q |
Q7 | numeric | 7 day running average of Q |
Q30 | numeric | 30 day running average of Q |
Daily <- readNWISDaily('01594440','00060', '1985-01-01', '1985-03-31') DailySuspSediment <- readNWISDaily('01594440','80154', '1985-01-01', '1985-03-31', convert = FALSE)
Daily <- readNWISDaily('01594440','00060', '1985-01-01', '1985-03-31') DailySuspSediment <- readNWISDaily('01594440','80154', '1985-01-01', '1985-03-31', convert = FALSE)
Imports data from NWIS web service.
For raw data, use readWQPqw
from the dataRetrieval package.
This function will retrieve the raw data, and compress it (summing constituents) if
more than 1 parameter code is supplied. See
section 3.2.4 of the vignette for more details.
readNWISSample(siteNumber, parameterCd, startDate = "", endDate = "", verbose = TRUE)
readNWISSample(siteNumber, parameterCd, startDate = "", endDate = "", verbose = TRUE)
siteNumber |
character USGS site number. This is usually an 8 digit number |
parameterCd |
character USGS parameter code. This is usually an 5 digit number. |
startDate |
character starting date for data retrieval in the form YYYY-MM-DD. Default is empty quotes "" which will retrieve the full period of record. |
endDate |
character ending date for data retrieval in the form YYYY-MM-DD. Default is empty quotes "" which will retrieve the full period of record. |
verbose |
logical specifying whether or not to display progress message |
A data frame 'Sample' with the following columns:
Name | Type | Description |
Date | Date | Date |
ConcLow | numeric | Lower limit of concentration |
ConcHigh | numeric | Upper limit of concentration |
Uncen | integer | Uncensored data (1=TRUE, 0=FALSE) |
ConcAve | numeric | Average concentration |
Julian | integer | Number of days since Jan. 1, 1850 |
Month | integer | Month of the year [1-12] |
Day | integer | Day of the year [1-366] |
DecYear | numeric | Decimal year |
MonthSeq | integer | Number of months since January 1, 1850 |
SinDY | numeric | Sine of the DecYear |
CosDY | numeric | Cosine of the DecYear |
compressData
, populateSampleColumns
,
readWQPqw
# These examples require an internet connection to run Sample_01075 <- readNWISSample('01594440','01075', '1985-01-01', '1985-03-31')
# These examples require an internet connection to run Sample_01075 <- readNWISSample('01594440','01075', '1985-01-01', '1985-03-31')
Imports data from a user-supplied file, and converts it to a Daily data frame, appropriate for WRTDS calculations. The file can use most any separators as a delimiter. The default is comma separated.
The first column is expected to be dates, the second column is expected to be discharge values. If the date format is not automatically detected, the format can be specified using the "format" argument.
readUserDaily(filePath, fileName, hasHeader = TRUE, separator = ",", qUnit = 1, format = "%m/%d/%Y", verbose = TRUE)
readUserDaily(filePath, fileName, hasHeader = TRUE, separator = ",", qUnit = 1, format = "%m/%d/%Y", verbose = TRUE)
filePath |
character specifying the path to the file. If it is in the working directory, use ".". |
fileName |
character name of file to open |
hasHeader |
logical true if the first row of data is the column headers |
separator |
character character that separates data cells. The default is "," for a csv file. Tab delimited would be "\t". |
qUnit |
number 1 is cubic feet per second, 2 is cubic meters per second, 3 is 10^3 cubic feet per second, and 4 is 10^3 cubic meters per second. The default is 1. |
format |
character indicating the format of the date (which should
be in the first column). Default is "%m\/%d/%Y". See |
verbose |
logical specifying whether or not to display progress message |
A data frame 'Daily' with the following columns:
Name | Type | Description |
Date | Date | Date |
Q | numeric | Discharge in m^3/s |
Julian | integer | Number of days since Jan. 1, 1850 |
Month | integer | Month of the year [1-12] |
Day | integer | Day of the year [1-366] |
DecYear | numeric | Decimal year |
MonthSeq | integer | Number of months since January 1, 1850 |
Qualifier | character | Qualifying code |
i | integer | Index of days, starting with 1 |
LogQ | numeric | Natural logarithm of Q |
Q7 | numeric | 7 day running average of Q |
Q30 | numeric | 30 day running average of Q |
filePath <- system.file("extdata", package="EGRET") fileName <- "ChoptankRiverFlow.txt" Daily <- readUserDaily(filePath,fileName,separator="\t")
filePath <- system.file("extdata", package="EGRET") fileName <- "ChoptankRiverFlow.txt" Daily <- readUserDaily(filePath,fileName,separator="\t")
Imports data from a user-supplied file, and converts it to a Sample data frame (including summing multiple constituents), appropriate for EGRET analysis. First column is date, second is remark code, and third is value. If multiple constituents are to be combined with interval censoring, additional pairs of columns can be inserted, each pair starting with remark code (specifically looking for <), followed by the values. If the date format is not automatically detected, the format can be specified using the "format" argument.
readUserSample(filePath, fileName, hasHeader = TRUE, separator = ",", verbose = TRUE, format = "%m/%d/%Y")
readUserSample(filePath, fileName, hasHeader = TRUE, separator = ",", verbose = TRUE, format = "%m/%d/%Y")
filePath |
character specifying the path to the file. If it is in the working directory, use ".". |
fileName |
character name of file to open |
hasHeader |
logical true if the first row of data is the column headers |
separator |
character character that separates data cells. , default is "," which is separator used in a .csv file. |
verbose |
logical specifying whether or not to display progress message |
format |
character indicating the format of the date (which should
be in the first column). Default is "%m\/%d/%Y". See |
A data frame 'Sample' with the following columns:
Name | Type | Description |
Date | Date | Date |
ConcLow | numeric | Lower limit of concentration |
ConcHigh | numeric | Upper limit of concentration |
Uncen | integer | Uncensored data (1=TRUE, 0=FALSE) |
ConcAve | numeric | Average concentration |
Julian | integer | Number of days since Jan. 1, 1850 |
Month | integer | Month of the year [1-12] |
Day | integer | Day of the year [1-366] |
DecYear | numeric | Decimal year |
MonthSeq | integer | Number of months since January 1, 1850 |
SinDY | numeric | Sine of the DecYear |
CosDY | numeric | Cosine of the DecYear |
compressData
, populateSampleColumns
filePath <- system.file("extdata", package="EGRET") fileName <- 'ChoptankRiverNitrate.csv' Sample <- readUserSample(filePath,fileName, separator=";",verbose=FALSE)
filePath <- system.file("extdata", package="EGRET") fileName <- 'ChoptankRiverNitrate.csv' Sample <- readUserSample(filePath,fileName, separator=";",verbose=FALSE)
Imports data from the Water Quality Portal, so it could be STORET, USGS, or USDA data. This function gets the data from: https://www.waterqualitydata.us For raw data, use readWQPdata. This function will retrieve the raw data, compress it (summing constituents), then converts it to the Sample dataframe structure. See chapter 7 of the EGRET user guide for more details.
readWQPSample(siteNumber, characteristicName, startDate = "", endDate = "", verbose = TRUE)
readWQPSample(siteNumber, characteristicName, startDate = "", endDate = "", verbose = TRUE)
siteNumber |
character site number. If USGS, it should be in the form :'USGS-XXXXXXXXX...' |
characteristicName |
character. Either a valid characteristic name, or a 5 digit USGS parameter code. |
startDate |
character starting date for data retrieval in the form YYYY-MM-DD. Default is empty quotes "" which will retrieve the full period of record. |
endDate |
character ending date for data retrieval in the form YYYY-MM-DD. Default is empty quotes "" which will retrieve the full period of record. |
verbose |
logical specifying whether or not to display progress message |
A data frame 'Sample' with the following columns:
Name | Type | Description |
Date | Date | Date |
ConcLow | numeric | Lower limit of concentration |
ConcHigh | numeric | Upper limit of concentration |
Uncen | integer | Uncensored data (1=TRUE, 0=FALSE) |
ConcAve | numeric | Average concentration |
Julian | integer | Number of days since Jan. 1, 1850 |
Month | integer | Month of the year [1-12] |
Day | integer | Day of the year [1-366] |
DecYear | numeric | Decimal year |
MonthSeq | integer | Number of months since January 1, 1850 |
SinDY | numeric | Sine of the DecYear |
CosDY | numeric | Cosine of the DecYear |
readWQPdata
, dataRetrieval::whatWQPsites
,
readWQPqw
, compressData
, populateSampleColumns
# These examples require an internet connection to run # Sample_All <- readWQPSample('WIDNR_WQX-10032762','Specific conductance', '', '')
# These examples require an internet connection to run # Sample_All <- readWQPSample('WIDNR_WQX-10032762','Specific conductance', '', '')
Removes observations from the data frame Sample when the observation has the identical date and value as another observation
removeDuplicates(Sample)
removeDuplicates(Sample)
Sample |
dataframe with at least DecYear and ConcHigh, default name is Sample |
A data frame 'Sample' with the following columns:
Name | Type | Description |
Date | Date | Date |
ConcLow | numeric | Lower limit of concentration |
ConcHigh | numeric | Upper limit of concentration |
Uncen | integer | Uncensored data (1=TRUE, 0=FALSE) |
ConcAve | numeric | Average concentration |
Julian | integer | Number of days since Jan. 1, 1850 |
Month | integer | Month of the year [1-12] |
Day | integer | Day of the year [1-366] |
DecYear | numeric | Decimal year |
MonthSeq | integer | Number of months since January 1, 1850 |
SinDY | numeric | Sine of the DecYear |
CosDY | numeric | Cosine of the DecYear |
DecYear <- c('1985.01', '1985.01', '1985.02', '1985.02', '1985.03') ConcHigh <- c(1,2,3,3,5) dataInput <- data.frame(DecYear, ConcHigh, stringsAsFactors=FALSE) Sample <- removeDuplicates(dataInput)
DecYear <- c('1985.01', '1985.01', '1985.02', '1985.02', '1985.03') ConcHigh <- c(1,2,3,3,5) dataInput <- data.frame(DecYear, ConcHigh, stringsAsFactors=FALSE) Sample <- removeDuplicates(dataInput)
runGroups
provides comparisons of results, in terms of
flow-normalized concentration and flow-normalized flux for any groups of years
of years in the water quality record. Comparison could involve the
use of the "wall" and/or use of "generalized flow-normalization".
These two concepts are described in detail in the vignette:
vignette("Enhancements", package = "EGRET")
.
runGroups(eList, windowSide, group1firstYear, group1lastYear, group2firstYear, group2lastYear, surfaceStart = NA, surfaceEnd = NA, flowBreak = FALSE, Q1EndDate = NA, QStartDate = NA, QEndDate = NA, wall = FALSE, oldSurface = FALSE, fractMin = 0.75, sample1EndDate = NA, sampleStartDate = NA, sampleEndDate = NA, paStart = NA, paLong = NA, minNumObs = 100, minNumUncen = 50, windowY = 7, windowQ = 2, windowS = 0.5, edgeAdjust = TRUE, verbose = TRUE, saveOutput = FALSE, fileName = "temp.txt")
runGroups(eList, windowSide, group1firstYear, group1lastYear, group2firstYear, group2lastYear, surfaceStart = NA, surfaceEnd = NA, flowBreak = FALSE, Q1EndDate = NA, QStartDate = NA, QEndDate = NA, wall = FALSE, oldSurface = FALSE, fractMin = 0.75, sample1EndDate = NA, sampleStartDate = NA, sampleEndDate = NA, paStart = NA, paLong = NA, minNumObs = 100, minNumUncen = 50, windowY = 7, windowQ = 2, windowS = 0.5, edgeAdjust = TRUE, verbose = TRUE, saveOutput = FALSE, fileName = "temp.txt")
eList |
named list with at least the Daily, Sample, and INFO dataframes |
windowSide |
integer. The width of the flow normalization window on each side of the year being estimated. A common value is 11, but no default is specified. If stationary flow normalization is to be used, then windowSide = 0 (this means that flow-normalization period for all years is the same). |
group1firstYear |
decimal year. Starting year of first group. |
group1lastYear |
decimal year. Ending year of first group. |
group2firstYear |
decimal year. Starting year of second group. |
group2lastYear |
decimal year. Ending year of second group. |
surfaceStart |
The Date (or character in YYYY-MM-DD) that is the start of the WRTDS model to be estimated and the first of the daily outputs to be generated. Default is NA, which means that the surfaceStart is based on the date of the first sample. |
surfaceEnd |
The Date (or character in YYYY-MM-DD) that is the end of the WRTDS model to be estimated and the last of the daily outputs to be generated. Default is NA, which means that the surfaceEnd is based on the date of the last sample. |
flowBreak |
logical. Is there an abrupt break in the discharge record, default is FALSE. |
Q1EndDate |
The Date (as character in YYYY-MM-DD) which is the last day, just before the flowBreak. |
QStartDate |
The first Date (as character in YYYY-MM-DD) used in the flow normalization method. Default is NA, which makes the QStartDate become the first Date in eList$Daily. |
QEndDate |
The last Date (as character in YYYY-MM-DD) used in the flow normalization method. Default is NA, which makes the QEndDate become the last Date in eList$Daily. |
wall |
logical. Whether there is an abrupt break in the concentration versus discharge relationship due to some major change in pollution control or water management. Default is FALSE. |
oldSurface |
logical specifying whether to use the original surface, or create a new one. Default is FALSE. |
fractMin |
numeric specifying the minimum fraction of the observations required to run the weighted regression, default is 0.75. The minimum number will be the maximum of minNumObs and fractMin multiplied by total number of observations. |
sample1EndDate |
The Date (as character in YYYY-MM-DD) of the last date just before the wall. Default = NA. A date must be specified if wall = TRUE. |
sampleStartDate |
The Date (as character in YYYY-MM-DD) of the first sample to be used. Default is NA which sets it to the first Date in eList$Sample. |
sampleEndDate |
The Date (as character in YYYY-MM-DD) of the last sample to be used. Default is NA which sets it to the last Date in eList$Sample. |
paStart |
numeric integer specifying the starting month for the period of analysis, 1<=paStart<=12.
Default is NA, which will use the paStart in the eList$INFO data frame. See also |
paLong |
numeric integer specifying the length of the period of analysis, in months, 1<=paLong<=12.
Default is NA, which will use the paLong in the eList$INFO data frame. See also |
minNumObs |
numeric specifying the miniumum number of observations required to run the weighted regression, default is 100 |
minNumUncen |
numeric specifying the minimum number of uncensored observations to run the weighted regression, default is 50 |
windowY |
numeric specifying the half-window width in the time dimension, in units of years, default is 7 |
windowQ |
numeric specifying the half-window width in the discharge dimension, units are natural log units, default is 2 |
windowS |
numeric specifying the half-window with in the seasonal dimension, in units of years, default is 0.5 |
edgeAdjust |
logical specifying whether to use the modified method for calculating the windows at the edge of the record. The edgeAdjust method tends to reduce curvature near the start and end of record. Default is TRUE. |
verbose |
logical specifying whether or not to display progress message |
saveOutput |
logical. If |
fileName |
character. Name to save the output file if |
When using generalized flow-normalization, it is best to have the Daily data frame extend well beyond the years that are in the Sample data frame. Ideally, the Daily data frame would start windowSide years before the start of the Sample data set, if the data exist to provide for that. Generally that isn't possible for the end of the record because the Sample data may end very close to the present. To the extent that is possible therefore, it is better to include more discharge data after the end of the Sample record. Also note that in the case run in the examples don't do that, because the data set needs to be appropriate for stationary flow normalization as well (and package size considerations make it difficult to include specialized examples).
Dataframe with 7 columns and 2 rows. The first row is about trends in concentration (mg/L), the second column is about trends in flux (million kg/year). The data frame has a number of attributes.
Column Name | Description |
Total Change | The difference between the results for group2 - group1 (x22 - x11). |
CQTC | CQTC is the "Concentration v. Q Trend Component." It is the component of total change due to the change in the CQR (Concentration Discharge Relationship). (x20 - x10). |
QTC | QTC is the "Q Trend Component." It is the component of total change due to the trend in the QD (Discharge Distribution). (x22 - x11 - x20 + x10). |
x10 | The estimated value based on the CQR computed for the years in group1, integrated over the QD for the entire timespan of the Daily data frame (or the period QStartDate and to QEndDate if these are specified). |
x11 | The estimated value based on the CQR for the years in group1, integrated over the QD specified by the user for group1. |
x20 | The estimated value based on the CQR computed for the years in group2, integrated over the QD for the entire period of record. |
x22 | The estimated value based on the CQR for the years in group2, integrated over the QD specified by the user for group2. |
eList <- Choptank_eList #Option 1: Use all years for group flow normalization. groupOut_1 <- runGroups(eList, windowSide = 0, group1firstYear = 1980, group1lastYear = 1990, group2firstYear = 1995, group2lastYear = 2005) # Option 2: Use sliding window. # In each case it is a 23 year window (23 = 1 + 2 * 11) groupOut_2 <- runGroups(eList, windowSide = 11, group1firstYear = 1980, group1lastYear = 1990, group2firstYear = 1995, group2lastYear = 2005) # Option 3: Flow normalization is based on splitting the flow record at 1990-09-30 # But in years before the break it uses all flow data from before the break, # and years after the break uses all flow data after the break groupOut_3 <- runGroups(eList, windowSide = 0, group1firstYear = 1980, group1lastYear = 1990, group2firstYear = 1995, group2lastYear = 2005, flowBreak = TRUE, Q1EndDate = "1990-09-30") # Option 4: Flow normalization is based on splitting the flow record at 1990-09-30 # but before the break uses a 23 year window of years before the break # after the break uses a 23 year window of years after the break groupOut_4 <- runGroups(eList, windowSide = 11, group1firstYear = 1980, group1lastYear = 1990, group2firstYear = 1995, group2lastYear = 2005, flowBreak = TRUE, Q1EndDate = "1990-09-30")
eList <- Choptank_eList #Option 1: Use all years for group flow normalization. groupOut_1 <- runGroups(eList, windowSide = 0, group1firstYear = 1980, group1lastYear = 1990, group2firstYear = 1995, group2lastYear = 2005) # Option 2: Use sliding window. # In each case it is a 23 year window (23 = 1 + 2 * 11) groupOut_2 <- runGroups(eList, windowSide = 11, group1firstYear = 1980, group1lastYear = 1990, group2firstYear = 1995, group2lastYear = 2005) # Option 3: Flow normalization is based on splitting the flow record at 1990-09-30 # But in years before the break it uses all flow data from before the break, # and years after the break uses all flow data after the break groupOut_3 <- runGroups(eList, windowSide = 0, group1firstYear = 1980, group1lastYear = 1990, group2firstYear = 1995, group2lastYear = 2005, flowBreak = TRUE, Q1EndDate = "1990-09-30") # Option 4: Flow normalization is based on splitting the flow record at 1990-09-30 # but before the break uses a 23 year window of years before the break # after the break uses a 23 year window of years after the break groupOut_4 <- runGroups(eList, windowSide = 11, group1firstYear = 1980, group1lastYear = 1990, group2firstYear = 1995, group2lastYear = 2005, flowBreak = TRUE, Q1EndDate = "1990-09-30")
runPairs
provides comparisons of results, in terms of
flow-normalized concentration and flow-normalized flux for any pair
of years in the water quality record. Comparison could involve the
use of the "wall" and/or use of "generalized flow normalization".
These two concepts are described in detail in the vignette:
vignette("Enhancements", package = "EGRET")
.
runPairs(eList, year1, year2, windowSide, flowBreak = FALSE, Q1EndDate = NA, QStartDate = NA, QEndDate = NA, wall = FALSE, oldSurface = FALSE, sample1EndDate = NA, sampleStartDate = NA, sampleEndDate = NA, paStart = NA, paLong = NA, minNumObs = 100, minNumUncen = 50, fractMin = 0.75, windowY = 7, windowQ = 2, windowS = 0.5, edgeAdjust = TRUE, saveOutput = FALSE, fileName = "temp.txt", verbose = TRUE)
runPairs(eList, year1, year2, windowSide, flowBreak = FALSE, Q1EndDate = NA, QStartDate = NA, QEndDate = NA, wall = FALSE, oldSurface = FALSE, sample1EndDate = NA, sampleStartDate = NA, sampleEndDate = NA, paStart = NA, paLong = NA, minNumObs = 100, minNumUncen = 50, fractMin = 0.75, windowY = 7, windowQ = 2, windowS = 0.5, edgeAdjust = TRUE, saveOutput = FALSE, fileName = "temp.txt", verbose = TRUE)
eList |
named list with at least the Daily, Sample, and INFO dataframes |
year1 |
integer the ending year of the first year in the pair |
year2 |
integer the ending year of the second year in the pair |
windowSide |
integer. The width of the flow normalization window on each side of the year being estimated. A common value is 11, but no default is specified. If stationary flow normalization is to be used, then windowSide = 0 (this means that flow-normalization period for all years is the same). |
flowBreak |
logical. Is there an abrupt break in the discharge record, default is FALSE. |
Q1EndDate |
The Date (as character in YYYY-MM-DD) which is the last day, just before the flowBreak. |
QStartDate |
The first Date (as character in YYYY-MM-DD) used in the flow normalization method. Default is NA, which makes the QStartDate become the first Date in eList$Daily. |
QEndDate |
The last Date (as character in YYYY-MM-DD) used in the flow normalization method. Default is NA, which makes the QEndDate become the last Date in eList$Daily. |
wall |
logical. Whether there is an abrupt break in the concentration versus discharge relationship due to some major change in pollution control or water management. Default is FALSE. |
oldSurface |
logical specifying whether to use the original surface, or create a new one. Default is FALSE. |
sample1EndDate |
The Date (as character in YYYY-MM-DD) of the last date just before the wall. Default = NA. A date must be specified if wall = TRUE. |
sampleStartDate |
The Date (as character in YYYY-MM-DD) of the first sample to be used. Default is NA which sets it to the first Date in eList$Sample. |
sampleEndDate |
The Date (as character in YYYY-MM-DD) of the last sample to be used. Default is NA which sets it to the last Date in eList$Sample. |
paStart |
numeric integer specifying the starting month for the period of analysis, 1<=paStart<=12.
Default is NA, which will use the paStart in the eList$INFO data frame. See also |
paLong |
numeric integer specifying the length of the period of analysis, in months, 1<=paLong<=12.
Default is NA, which will use the paLong in the eList$INFO data frame. See also |
minNumObs |
numeric specifying the miniumum number of observations required to run the weighted regression, default is 100 |
minNumUncen |
numeric specifying the minimum number of uncensored observations to run the weighted regression, default is 50 |
fractMin |
numeric specifying the minimum fraction of the observations required to run the weighted regression, default is 0.75. The minimum number will be the maximum of minNumObs and fractMin multiplied by total number of observations. |
windowY |
numeric specifying the half-window width in the time dimension, in units of years, default is 7 |
windowQ |
numeric specifying the half-window width in the discharge dimension, units are natural log units, default is 2 |
windowS |
numeric specifying the half-window with in the seasonal dimension, in units of years, default is 0.5 |
edgeAdjust |
logical specifying whether to use the modified method for calculating the windows at the edge of the record. The edgeAdjust method tends to reduce curvature near the start and end of record. Default is TRUE. |
saveOutput |
logical. If |
fileName |
character. Name to save the output file if |
verbose |
logical specifying whether or not to display progress message |
When using generalized flow-normalization, it is best to have the Daily data frame extend well beyond the years that are in the Sample data frame. Ideally, the Daily data frame would start windowSide years before the start of the Sample data set, if the data exist to provide for that. Generally that isn't possible for the end of the record because the Sample data may end very close to the present. To the extent that is possible therefore, it is better to include more discharge data after the end of the Sample record. Also note that in the case run in the examples don't do that, because the data set needs to be appropriate for stationary flow normalization as well (and package size considerations make it difficult to include specialized examples).
Data frame with 7 columns and 2 rows. The first row is about trends in concentration (mg/L), the second column is about trends in flux (million kg/year). The data frame has a number of attributes.
Column Name | Description |
Total Change | The difference between the results for year2 - year1 (x22 - x11) |
CQTC | CQTC is the "Concentration v. Q Trend Component." It is the component of total change due to the change in the CQR (Concentration Discharge Relationship). (x20 - x10). |
QTC | QTC is the "Q Trend Component." It is the component of total change due to the trend in the QD (Discharge Distribution). (x22 - x11 - x20 + x10). |
x10 | The estimated value based on the CQR computed for year1, integrated over the QD for the entire timespan of the Daily data frame (or the period QStartDate and to QEndDate if these are specified). |
x11 | The estimated value based on the CQR for year1, integrated over the QD specified by the user for year1. |
x20 | The estimated value based on the CQR computed for year2, integrated over the QD for the entire period of record. |
x22 | The estimated value based on the CQR for year2, integrated over the QD specified by the user for year2. |
Additionally, there is an attribute on the data frame "Other", containing a list that includes minNumObs=minNumObs, minNumUncen, windowY, windowQ, siteName, windowS, wall, edgeAdjust, QStartDate, QEndDate, PercentChangeConc, and PercentChangeFlux.
PercentChangeConc, and PercentChangeFlux are vectors where: Total Percent Change is the Total Change divided by x11 CQTC Percent is the CQTC divided by x11 QTC Percent is the QTC divided by x11
Another attribute is "byMonth". This is a data frame of 4 columns and 14 rows.
The columns represent the concentrations and fluxes for the starting and ending year.
The flux values for each month are flow normalized monthly watershed yields
expressed as kg/month/km^2. The concentrations are the mean flow normalized
concentration, expressed in whatever concentration units the raw data are
expressed as (typically mg/L). This data frame is used as the input to the
plotMonthTrend
function.
eList <- Choptank_eList year1 <- 1985 year2 <- 2010 # Automatic calculations based on windowSide = 11 # four possible ways to do generalized flow normalization: #Option 1: Use all years for flow normalization. pairOut_1 <- runPairs(eList, year1, year2, windowSide = 0) # Option 2: Use different windows for flow normalization for year1 versus year2 # In each case it is a 23 year window (23 = 1 + 2*11) pairOut_2 <- runPairs(eList, year1, year2, windowSide = 11) # Option 3: Flow normalization is based on splitting the flow record at 1990-09-30 # But year1 uses all flow data from before the break, # year2 uses all flow data after the break pairOut_3 <- runPairs(eList, year1, year2, windowSide = 0, flowBreak = TRUE, Q1EndDate = "1990-09-30") # Option 4: Flow normalization is based on splitting the flow record at 1990-09-30 # but year1 uses a 23 year window before the break # year2 uses a 23 year window after the break pairOut_4 <- runPairs(eList, year1, year2, windowSide = 11, flowBreak = TRUE, Q1EndDate = "1990-09-30") monthly_trends <- attr(pairOut_4, "byMonth") plotMonthTrend(pairOut_4) eList <- setPA(eList, paLong = 3, paStart = 12) pairOut_5 <- runPairs(eList, year1, year2, windowSide = 11) monthly_trends <- attr(pairOut_5, "byMonth") plotMonthTrend(pairOut_5)
eList <- Choptank_eList year1 <- 1985 year2 <- 2010 # Automatic calculations based on windowSide = 11 # four possible ways to do generalized flow normalization: #Option 1: Use all years for flow normalization. pairOut_1 <- runPairs(eList, year1, year2, windowSide = 0) # Option 2: Use different windows for flow normalization for year1 versus year2 # In each case it is a 23 year window (23 = 1 + 2*11) pairOut_2 <- runPairs(eList, year1, year2, windowSide = 11) # Option 3: Flow normalization is based on splitting the flow record at 1990-09-30 # But year1 uses all flow data from before the break, # year2 uses all flow data after the break pairOut_3 <- runPairs(eList, year1, year2, windowSide = 0, flowBreak = TRUE, Q1EndDate = "1990-09-30") # Option 4: Flow normalization is based on splitting the flow record at 1990-09-30 # but year1 uses a 23 year window before the break # year2 uses a 23 year window after the break pairOut_4 <- runPairs(eList, year1, year2, windowSide = 11, flowBreak = TRUE, Q1EndDate = "1990-09-30") monthly_trends <- attr(pairOut_4, "byMonth") plotMonthTrend(pairOut_4) eList <- setPA(eList, paLong = 3, paStart = 12) pairOut_5 <- runPairs(eList, year1, year2, windowSide = 11) monthly_trends <- attr(pairOut_5, "byMonth") plotMonthTrend(pairOut_5)
runSeries
provides annual series of flow-normalized concentration and flow-normalized flux for the water quality record.
Computations could involve the use of the "wall" and/or use of "generalized flow
normalization". These two concepts are described in detail in the vignette:
vignette("Enhancements", package = "EGRET")
.
runSeries(eList, windowSide, surfaceStart = NA, surfaceEnd = NA, flowBreak = FALSE, Q1EndDate = NA, QStartDate = NA, QEndDate = NA, wall = FALSE, oldSurface = FALSE, sample1EndDate = NA, sampleStartDate = NA, sampleEndDate = NA, paStart = NA, paLong = NA, fractMin = 0.75, minNumObs = 100, minNumUncen = 50, windowY = 7, windowQ = 2, windowS = 0.5, edgeAdjust = TRUE, verbose = TRUE)
runSeries(eList, windowSide, surfaceStart = NA, surfaceEnd = NA, flowBreak = FALSE, Q1EndDate = NA, QStartDate = NA, QEndDate = NA, wall = FALSE, oldSurface = FALSE, sample1EndDate = NA, sampleStartDate = NA, sampleEndDate = NA, paStart = NA, paLong = NA, fractMin = 0.75, minNumObs = 100, minNumUncen = 50, windowY = 7, windowQ = 2, windowS = 0.5, edgeAdjust = TRUE, verbose = TRUE)
eList |
named list with at least the Daily, Sample, and INFO dataframes |
windowSide |
integer. The width of the flow normalization window on each side of the year being estimated. A common value is 11, but no default is specified. If stationary flow normalization is to be used, then windowSide = 0 (this means that flow-normalization period for all years is the same). |
surfaceStart |
The Date (or character in YYYY-MM-DD) that is the start of the WRTDS model to be estimated and the first of the daily outputs to be generated. Default is NA, which means that the surfaceStart is based on the date of the first sample. |
surfaceEnd |
The Date (or character in YYYY-MM-DD) that is the end of the WRTDS model to be estimated and the last of the daily outputs to be generated. Default is NA, which means that the surfaceEnd is based on the date of the last sample. |
flowBreak |
logical, is there an abrupt break in the discharge record, default is FALSE. |
Q1EndDate |
The Date (as character in YYYY-MM-DD format) which is the last day, just before the flowBreak. Required if flowBreak = TRUE. |
QStartDate |
The first Date (as character in YYYY-MM-DD format) used in the flow normalization. Default is NA, which makes the QStartDate become the first Date in eList$Daily. |
QEndDate |
The last Date (as character in YYYY-MM-DD format) used in the flow normalization. Default is NA, which makes the QEndDate become the last Date in eList$Daily. |
wall |
logical. Whether there is an abrupt break in the concentration versus discharge relationship due to some major change in pollution control or water management. Default is FALSE. |
oldSurface |
logical, if TRUE, use surface previously estimated using modelEstimation. Default is FALSE. |
sample1EndDate |
The Date (as character in YYYY-MM-DD format) of the last day just before the wall. Default = NA. A date must be specified if wall = TRUE. |
sampleStartDate |
The Date (as character in YYYY-MM-DD format) of the first sample to be used. Default is NA which sets it to the first Date in eList$Sample. |
sampleEndDate |
The Date (as character in YYYY-MM-DD format) of the last sample to be used. Default is NA which sets it to the last Date in eList$Sample. |
paStart |
numeric integer specifying the starting month for the period of analysis, 1<=paStart<=12.
Default is NA, which will use the paStart in the eList$INFO data frame. See also |
paLong |
numeric integer specifying the length of the period of analysis, in months, 1<=paLong<=12.
Default is NA, which will use the paLong in the eList$INFO data frame. See also |
fractMin |
numeric specifying the minimum fraction of the observations required to run the weighted regression, default is 0.75. The minimum number will be the maximum of minNumObs and fractMin multiplied by total number of observations. |
minNumObs |
numeric specifying the miniumum number of observations required to run the weighted regression, default is 100 |
minNumUncen |
numeric specifying the minimum number of uncensored observations to run the weighted regression, default is 50 |
windowY |
numeric specifying the half-window width in the time dimension, in units of years, default is 7 |
windowQ |
numeric specifying the half-window width in the discharge dimension, units are natural log units, default is 2 |
windowS |
numeric specifying the half-window with in the seasonal dimension, in units of years, default is 0.5 |
edgeAdjust |
logical specifying whether to use the modified method for calculating the windows at the edge of the record. The edgeAdjust method tends to reduce curvature near the start and end of record. Default is TRUE. |
verbose |
logical specifying whether to output status messages. |
When using generalized flow-normalization, it is best to have the Daily data frame extend well beyond the years that are in the Sample data frame. Ideally, the Daily data frame would start windowSide years before the start of the Sample data set, if the data exist to provide for that. Generally that isn't possible for the end of the record because the Sample data may end very close to the present. To the extent that is possible therefore, it is better to include more discharge data after the end of the Sample record. Also note that in the case run in the examples don't do that, because the data set needs to be appropriate for stationary flow normalization as well (and package size considerations make it difficult to include specialized examples).
eList named list with INFO, Daily, and Sample dataframes, along with the surfaces matrix.
eList <- Choptank_eList # Automatic calculations based on windowSide = 11 # four possible ways to do generalized flow normalization #Option 1: Use all years for flow normalization. seriesOut_1 <- runSeries(eList, windowSide = 0) plotConcHist(seriesOut_1) plotFluxHist(seriesOut_1) # Option 2: Use sliding window throughout the whole flow normalization process. # In each case it is a 15 year window (23 = 1 + 2*11) seriesOut_2 <- runSeries(eList, windowSide = 11) plotConcHist(seriesOut_2) plotFluxHist(seriesOut_2) # Option 3: Flow normalization is based on splitting the flow record at 1990-09-30 # But in years before the break it uses all flow data from before the break, # and years after the break uses all flow data after the break seriesOut_3 <- runSeries(eList, windowSide = 0, flowBreak = TRUE, Q1EndDate = "1990-09-30") plotConcHist(seriesOut_3) plotFluxHist(seriesOut_3) # Option 4: Flow normalization is based on splitting the flow record at 1990-09-30 # but before the break uses a 23 year window of years before the break # after the break uses a 23 year window of years after the break seriesOut_4 <- runSeries(eList, windowSide = 11, flowBreak = TRUE, Q1EndDate = "1990-09-30") plotConcHist(seriesOut_4) plotFluxHist(seriesOut_4)
eList <- Choptank_eList # Automatic calculations based on windowSide = 11 # four possible ways to do generalized flow normalization #Option 1: Use all years for flow normalization. seriesOut_1 <- runSeries(eList, windowSide = 0) plotConcHist(seriesOut_1) plotFluxHist(seriesOut_1) # Option 2: Use sliding window throughout the whole flow normalization process. # In each case it is a 15 year window (23 = 1 + 2*11) seriesOut_2 <- runSeries(eList, windowSide = 11) plotConcHist(seriesOut_2) plotFluxHist(seriesOut_2) # Option 3: Flow normalization is based on splitting the flow record at 1990-09-30 # But in years before the break it uses all flow data from before the break, # and years after the break uses all flow data after the break seriesOut_3 <- runSeries(eList, windowSide = 0, flowBreak = TRUE, Q1EndDate = "1990-09-30") plotConcHist(seriesOut_3) plotFluxHist(seriesOut_3) # Option 4: Flow normalization is based on splitting the flow record at 1990-09-30 # but before the break uses a 23 year window of years before the break # after the break uses a 23 year window of years after the break seriesOut_4 <- runSeries(eList, windowSide = 11, flowBreak = TRUE, Q1EndDate = "1990-09-30") plotConcHist(seriesOut_4) plotFluxHist(seriesOut_4)
This function runs the survival regression which is the concentration estimation method of WRTDS. It uses sample data from the data frame Sample. It does the estimation for a set of data points defined by two vectors: estPtYear and estPtLQ. It returns an array of results for the estimation points. The array returned contains yHat, SE and ConcHat (in that order). yHat is the expected value of log(concentration), SE is the standard error of log(concentration) and ConcHat is the expected value of concentration.
runSurvReg(estPtYear, estPtLQ, DecLow, DecHigh, Sample, windowY = 7, windowQ = 2, windowS = 0.5, minNumObs = 100, minNumUncen = 50, verbose = TRUE, interactive = NULL, edgeAdjust = TRUE, run.parallel = FALSE) run_WRTDS(estY, estLQ, localSample, DecLow, DecHigh, minNumObs, minNumUncen, windowY, windowQ, windowS, edgeAdjust)
runSurvReg(estPtYear, estPtLQ, DecLow, DecHigh, Sample, windowY = 7, windowQ = 2, windowS = 0.5, minNumObs = 100, minNumUncen = 50, verbose = TRUE, interactive = NULL, edgeAdjust = TRUE, run.parallel = FALSE) run_WRTDS(estY, estLQ, localSample, DecLow, DecHigh, minNumObs, minNumUncen, windowY, windowQ, windowS, edgeAdjust)
estPtYear |
numeric vector of Decimal Year values at the estimation points |
estPtLQ |
numeric vector of ln(Q) values at the estimation points, must be the same length as estPtYear |
DecLow |
number specifying minimum decimal year (left edge of the estimated surfaces). |
DecHigh |
number specifying maximum decimal year (right edge of the estimated surfaces). |
Sample |
dataframe created for EGRET analysis |
windowY |
numeric specifying the half-window width in the time dimension, in units of years, default is 7 |
windowQ |
numeric specifying the half-window width in the discharge dimension, units are natural log units, default is 2 |
windowS |
numeric specifying the half-window with in the seasonal dimension, in units of years, default is 0.5 |
minNumObs |
numeric specifying the miniumum number of observations required to run the weighted regression, default is 100 |
minNumUncen |
numeric specifying the minimum number of uncensored observations to run the weighted regression, default is 50 |
verbose |
logical specifying whether or not to display progress message |
interactive |
logical deprecated. Use 'verbose' instead |
edgeAdjust |
logical specifying whether to use the modified method for calculating the windows at the edge of the record. The modified method tends to reduce curvature near the start and end of record. Default is TRUE. |
run.parallel |
logical to run bootstrapping in parallel or not |
estY |
numeric decimal year values at the estimation point |
estLQ |
numeric ln(Q) values at the estimation point |
localSample |
"Sample" data frame from the eList. |
resultSurvReg numeric array containing the yHat, SE, and ConcHat values array dimensions are (numEstPts,3)
eList <- Choptank_eList estPtYear<-c(2001.0,2005.0,2009.0) estPtLQ<-c(1,1,1) Sample <- getSample(eList) DecLow <- Sample$DecYear[1] DecHigh <- Sample$DecYear[nrow(Sample)] resultSurvReg <- runSurvReg(estPtYear,estPtLQ, DecLow,DecHigh,Sample, run.parallel = FALSE)
eList <- Choptank_eList estPtYear<-c(2001.0,2005.0,2009.0) estPtLQ<-c(1,1,1) Sample <- getSample(eList) DecLow <- Sample$DecYear[1] DecHigh <- Sample$DecYear[nrow(Sample)] resultSurvReg <- runSurvReg(estPtYear,estPtLQ, DecLow,DecHigh,Sample, run.parallel = FALSE)
A utility program for saving the contents of the workspace
This function saves the workspace. Future versions of EGRET will not include this function, use saveRDS to save individual eList objects. It assigns the file a name using the abbreviations for station and constituent.
saveResults(savePath, eList)
saveResults(savePath, eList)
savePath |
character specifying the full pathname of the folder where the file is to be saved ending with the final slash |
eList |
named list with at least the INFO dataframe |
This function uses the user-defined 'period of analysis', and subsets the Daily data frame, it doesn't have any effect on the Sample data frame. If you want to examine your data set as a time series of water years, then the period of analysis is October through September. If you want to examine the data set as calendar years then the period of analysis is January through December. You might want to examine the winter season, which you could define as December through February, then those 3 months become the period of analysis. The only constraints on the definition of a period of analysis are these: it must be defined in terms of whole months; it must be a set of contiguous months (like March-April-May), and have a length that is no less than 1 month and no more than 12 months. Define the PA by using two arguments: paLong and paStart. paLong is the length of the period of analysis, and paStart is the starting month.
selectDays(df, paLong, paStart)
selectDays(df, paLong, paStart)
df |
dataframe which must contain a column named Month (for month of the calendar year, typically this is a Daily data frame. |
paLong |
a numeric value for the length of the period of analysis, must be an integer from 1 to 12 |
paStart |
a numeric value for the starting month of the period of analysis, must be an integer from 1 to 12 |
localDaily a data frame containing the daily data but only for the period of analysis (not all months)
eList <- Choptank_eList Daily <- getDaily(eList) DailySubset <- selectDays(Daily, 4, 11)
eList <- Choptank_eList Daily <- getDaily(eList) DailySubset <- selectDays(Daily, 4, 11)
Period of analysis is defined by the starting month (paStart) and length in months (paLong). paStart and paLong are constrained to be integers from 1 to 12. For example, a water year would be paStart = 10 and paLong = 12. For example, the winter season, defined by Dec,Jan,Feb would be paStart = 12 and paLong = 3.
setPA(eList, paStart = 10, paLong = 12, window = 20)
setPA(eList, paStart = 10, paLong = 12, window = 20)
eList |
named list with at least the INFO dataframe |
paStart |
A numeric value for the starting month of the Period of Analysis, default is 10 |
paLong |
A numeric value for the length of the Period of Analysis in months, default is 12 |
window |
A numeric value for the half-width of a smoothing window for annual streamflow values, default is 20 |
eList named list with at least the INFO dataframe. Any of these values can be NA, but not all EGRET functions will work with missing parts of the named list eList.
eList <- Choptank_eList eList <- setPA(eList, paStart = 12, paLong = 3)
eList <- Choptank_eList eList <- setPA(eList, paStart = 12, paLong = 3)
The period of analysis can be of any length from 1 month to 12 months. The period of analysis can have any starting month from 1 (January) through 12 (December). This function produces a character character that describes this period of analysis. For example "water year", "calendar year", "year starting with April", or "Season consisting of April, May, June". There is an alternative version of this function for the case where AnnualResults does not exist. This might arise in a call from plotConcTime or plotLogConcTime. That function is called setSeasonLabelByUser.
setSeasonLabel(localAnnualResults, monthLab = 1)
setSeasonLabel(localAnnualResults, monthLab = 1)
localAnnualResults |
data frame that contains the annual results, default is AnnualResults |
monthLab |
object of monthLabel class, or numeric represented the short code, or character representing the descriptive name. |
periodName character which describes the period of analysis
eList <- Choptank_eList Daily <- getDaily(eList) AnnualResults <- setupYears(Daily) setSeasonLabel(AnnualResults) AnnualResultsWinter <- setupYears(Daily, paLong = 3, paStart = 12) setSeasonLabel(AnnualResultsWinter)
eList <- Choptank_eList Daily <- getDaily(eList) AnnualResults <- setupYears(Daily) setSeasonLabel(AnnualResults) AnnualResultsWinter <- setupYears(Daily, paLong = 3, paStart = 12) setSeasonLabel(AnnualResultsWinter)
The period of analysis can be of any length from 1 month to 12 months. The period of analysis can have any starting month from 1 (January) through 12 (December). This function produces a character that describes this period of analysis. For example "water year", "calendar year", "year starting with April", or "Season consisting of April, May, June". There is an alternative version of this function for the case where AnnualResults exists. And we want to use the period of analysis defined there. That function is called setSeasonLabel.
setSeasonLabelByUser(paStartInput = 10, paLongInput = 12, monthLab = 1)
setSeasonLabelByUser(paStartInput = 10, paLongInput = 12, monthLab = 1)
paStartInput |
numeric the month which is the start of the period of analysis, default is 10 which would be the case if the period of analysis is the water year |
paLongInput |
numeric the length of the the period of analysis, in months, default is 12 which would be the case if the period of analysis is the water year |
monthLab |
object of monthLabel class, or numeric represented the short code, or character representing the descriptive name. |
periodName character which describes the period of analysis
setSeasonLabelByUser(paStartInput=1,paLongInput=12) setSeasonLabelByUser(paStartInput=4,paLongInput=3)
setSeasonLabelByUser(paStartInput=1,paLongInput=12) setSeasonLabelByUser(paStartInput=4,paLongInput=3)
Set up the INFO data frame for a modelEstimation
setUpEstimation(eList, windowY = 7, windowQ = 2, windowS = 0.5, minNumObs = 100, minNumUncen = 50, edgeAdjust = TRUE, verbose = TRUE, interactive = NULL)
setUpEstimation(eList, windowY = 7, windowQ = 2, windowS = 0.5, minNumObs = 100, minNumUncen = 50, edgeAdjust = TRUE, verbose = TRUE, interactive = NULL)
eList |
named list with at least the Daily, Sample, and INFO dataframes |
windowY |
numeric specifying the half-window width in the time dimension, in units of years, default is 7 |
windowQ |
numeric specifying the half-window width in the discharge dimension, units are natural log units, default is 2 |
windowS |
numeric specifying the half-window with in the seasonal dimension, in units of years, default is 0.5 |
minNumObs |
numeric specifying the miniumum number of observations required to run the weighted regression, default is 100 |
minNumUncen |
numeric specifying the minimum number of uncensored observations to run the weighted regression, default is 50 |
edgeAdjust |
logical specifying whether to use the modified method for calculating the windows at the edge of the record. The modified method tends to reduce curvature near the start and end of record. Default is TRUE. |
verbose |
logical specifying whether or not to display progress message |
interactive |
logical deprecated. Use 'verbose' instead |
eList named list with Daily, Sample, and INFO dataframes.
eList <- Choptank_eList eList <- setUpEstimation(eList)
eList <- Choptank_eList eList <- setUpEstimation(eList)
This function aggregates the results stored on a daily basis in the Daily data frame and stores the average values of these in the new data frame called AnnualResults. Note that the flux values are rates (kg/day) and not a mass (kg). The "annual values" can be a full 12 months, or they can be shorter. See manual to understand paLong and paStart arguments. The simplest case, a Water Year (October through September), would have paLong=12, and paStart=10. A calendar year would be paLong=12 and paStart=1. A winter season of Dec, Jan, Feb would be paLong=3 and paStart=12
setupYears(localDaily, paLong = 12, paStart = 10)
setupYears(localDaily, paLong = 12, paStart = 10)
localDaily |
data frame containing the daily values, default is Daily |
paLong |
numeric integer specifying the length of the period of analysis, in months, 1<=paLong<=12, default is 12 |
paStart |
numeric integer specifying the starting month for the period of analysis, 1<=paStart<=12, default is 10 |
A data frame 'AnnualResults' of numeric values with the following columns
Name | Description |
DecYear | Middle of the period in decimal years |
Q | Mean discharge, in m^3/s |
Conc | Estimated mean concentration, in mg/L |
Flux | Estimated mean flux, in kg/day |
FNConc | Flow-normalized concentration, in mg/L |
FNFlux | Flow-normalized flux, in kg/day |
GenConc | Generalized mean concentration, in mg/L. This column is only returned if the WRTDSKalman function was run, which gives the eList$Daily data frame a column "GenConc". |
GenFlux | Generalized mean flux, in kg/day. This column is only returned if the WRTDSKalman function was run, which gives the eList$Daily data frame a column "GenFlux". |
PeriodLong | Length of period of analysis (paLong), in months |
PeriodStart | Starting month of period of analysis (paStart), in months (1 = January) |
eList <- Choptank_eList Daily <- getDaily(eList) AnnualResults <- setupYears(Daily, 4, 10)
eList <- Choptank_eList Daily <- getDaily(eList) AnnualResults <- setupYears(Daily, 4, 10)
Returns two date variables representing the starting date and ending date for a combination of paStart, paLong, and year
startEnd(paStart, paLong, year)
startEnd(paStart, paLong, year)
paStart |
numeric integer specifying the starting month for the period of analysis, 1<=paStart<=12, default is 10 |
paLong |
numeric integer specifying the length of the period of analysis, in months, 1<=paLong<=12, default is 12 |
year |
integer year, which is the calendar year in which the period ends |
Date list
paStart <- 10 paLong <- 12 year <- 1999 startEnd(paStart, paLong, year)
paStart <- 10 paLong <- 12 year <- 1999 startEnd(paStart, paLong, year)
This function creates a continuous surfaces object that starts just before surfaceStart and ends just after surfaceEnd. It is made up from two surfaces objects created when there is a wall specified for the analysis. The first surfaces object is based on data prior to the wall and the second surfaces object is based on data after the wall. The wall is located just after sample1EndDate. The Daily data frame is used only to set the minimum and maximum discharges used to construct the indices for discharges in the surfaces.
stitch(eList, sample1StartDate, sample1EndDate, sample2StartDate, sample2EndDate, surfaceStart = NA, surfaceEnd = NA, minNumObs = 100, minNumUncen = 50, fractMin = 0.75, windowY = 7, windowQ = 2, windowS = 0.5, edgeAdjust = TRUE, verbose = FALSE, run.parallel = FALSE)
stitch(eList, sample1StartDate, sample1EndDate, sample2StartDate, sample2EndDate, surfaceStart = NA, surfaceEnd = NA, minNumObs = 100, minNumUncen = 50, fractMin = 0.75, windowY = 7, windowQ = 2, windowS = 0.5, edgeAdjust = TRUE, verbose = FALSE, run.parallel = FALSE)
eList |
named list with at least the Daily, Sample, and INFO dataframes |
sample1StartDate |
The Date (or character in YYYY-MM-DD) of the first sample to be used in estimating the first segment of the surfaces object. |
sample1EndDate |
The Date (or character in YYYY-MM-DD) of the last sample to be used in the first segment of the surfaces object. |
sample2StartDate |
The Date (or character in YYYY-MM-DD) of the first sample to be used in the second segment of the surfaces object. |
sample2EndDate |
The Date (or character in YYYY-MM-DD) of the last sample to be used in the second segment of the surfaces object. |
surfaceStart |
The Date (or character in YYYY-MM-DD) that is the start of the WRTDS model to be estimated and the first of the daily outputs to be generated. Default is NA, which means that the surfaceStart is based on the date of the first sample. |
surfaceEnd |
The Date (or character in YYYY-MM-DD) that is the end of the WRTDS model to be estimated and the last of the daily outputs to be generated. Default is NA, which means that the surfaceEnd is based on the date of the last sample. |
minNumObs |
numeric specifying the miniumum number of observations required to run the weighted regression, default is 100 |
minNumUncen |
numeric specifying the minimum number of uncensored observations to run the weighted regression, default is 50 |
fractMin |
numeric specifying the minimum fraction of the observations required to run the weighted regression, default is 0.75. The minimum number will be the maximum of minNumObs and fractMin multiplied by total number of observations. |
windowY |
numeric specifying the half-window width in the time dimension, in units of years, default is 7 |
windowQ |
numeric specifying the half-window width in the discharge dimension, units are natural log units, default is 2 |
windowS |
numeric specifying the half-window with in the seasonal dimension, in units of years, default is 0.5 |
edgeAdjust |
logical specifying whether to use the modified method for calculating the windows at the edge of the record. The edgeAdjust method tends to reduce curvature near the start and end of record. Default is TRUE. |
verbose |
logical specifying whether or not to display progress message |
run.parallel |
logical to run bootstrapping in parallel or not |
eList <- Choptank_eList surfaceStart <- "1986-10-01" surfaceEnd <- "2010-09-30" # Surface skips a few years: sample1StartDate <- "1986-10-01" sample1EndDate <- "1992-09-30" sample2StartDate <- "1996-10-01" sample2EndDate <- "2011-09-30" surface_skip <- stitch(eList, sample1StartDate, sample1EndDate, sample2StartDate, sample2EndDate, surfaceStart, surfaceEnd) # Surface overlaps a few years: sample1StartDate <- "1986-10-01" sample1EndDate <- "1996-09-30" sample2StartDate <- "1992-10-01" sample2EndDate <- "2011-09-30" surface_overlap <- stitch(eList, sample1StartDate, sample1EndDate, sample2StartDate, sample2EndDate)
eList <- Choptank_eList surfaceStart <- "1986-10-01" surfaceEnd <- "2010-09-30" # Surface skips a few years: sample1StartDate <- "1986-10-01" sample1EndDate <- "1992-09-30" sample2StartDate <- "1996-10-01" sample2EndDate <- "2011-09-30" surface_skip <- stitch(eList, sample1StartDate, sample1EndDate, sample2StartDate, sample2EndDate, surfaceStart, surfaceEnd) # Surface overlaps a few years: sample1StartDate <- "1986-10-01" sample1EndDate <- "1996-09-30" sample2StartDate <- "1992-10-01" sample2EndDate <- "2011-09-30" surface_overlap <- stitch(eList, sample1StartDate, sample1EndDate, sample2StartDate, sample2EndDate)
The code here is a repetition of the first part of the code for estSurfaces
surfaceIndex(Daily)
surfaceIndex(Daily)
Daily |
data frame containing the daily values, default is Daily |
surfaceIndexParameters a numeric vector of length 6, defining the grid for the surfaces
eList <- Choptank_eList Daily <- getDaily(eList) surfaceIndex(Daily)
eList <- Choptank_eList Daily <- getDaily(eList) surfaceIndex(Daily)
Sets the Date limits to the surfaces being estimated from the Sample data set. The start is less than a year prior to the first date (typically the date of the first sample) and the end is less than a year after the last date (typically the date of the last sample). The start is constrained to be on the first day of the period of analysis and the end is constrained to be on the last day of the the period of analysis
surfaceStartEnd(paStart, paLong, Date1, Date2)
surfaceStartEnd(paStart, paLong, Date1, Date2)
paStart |
numeric integer specifying the starting month for the period of analysis, 1<=paStart<=12, default is 10 |
paLong |
numeric integer specifying the length of the period of analysis, in months, 1<=paLong<=12, default is 12 |
Date1 |
Date set to Date of earliest data in Sample. |
Date2 |
Date set to Date of latest data in Sample. |
eList <- Choptank_eList Date1 <- eList$Sample$Date[1] Date2 <- range(eList$Sample$Date)[2] surfaceStartEnd(10, 12, Date1, Date2)
eList <- Choptank_eList Date1 <- eList$Sample$Date[1] Date2 <- range(eList$Sample$Date)[2] surfaceStartEnd(10, 12, Date1, Date2)
These tables describe trends in flow-normalized concentration and in flow-normalized flux. They are described as changes in real units or in percent and as slopes in real units per year or in percent per year. They are computed over pairs of time points. These time points can be user-defined or they can be set by the program to be the final year of the record and a set of years that are multiples of 5 years prior to that. tableChangeSingle is a version of the same code that will produce output only for flow-normalized concentration or flow-normalized flux, but not both
tableChange(eList, fluxUnit = 9, yearPoints = NA) tableChangeSingle(eList, fluxUnit = 9, yearPoints = NA, flux = FALSE)
tableChange(eList, fluxUnit = 9, yearPoints = NA) tableChangeSingle(eList, fluxUnit = 9, yearPoints = NA, flux = FALSE)
eList |
named list with at least the Daily and INFO dataframes |
fluxUnit |
object of fluxUnit class. |
yearPoints |
numeric vector listing the years for which the change or slope computations are made, they need to be in chronological order. For example yearPoints=c(1975,1985,1995,2005), default is NA (which allows the program to set yearPoints automatically) |
flux |
logical if TRUE results are returned in flux, if FALSE concentration. Default is set to FALSE. |
dataframe with Year1, Year2, change[mg/L], slope[mg/L], change[percent], slope[percent] columns. The data in each row is the change or slope calculated from Year1 to Year2
eList <- Choptank_eList # Water Year: tableChange(eList, fluxUnit = 8, yearPoints = c(1980, 1995, 2011)) tableChange(eList, fluxUnit = 5) # Winter: eList <- setPA(eList, paStart = 12, paLong = 3) tableChange(eList, fluxUnit = 8, yearPoints = c(1980, 1995, 2011)) # Water Year: eList <- setPA(eList, paStart = 10, paLong = 12) #This returns concentration ASCII table in the console: tableChangeSingle(eList, fluxUnit = 8, yearPoints = c(1980, 1995, 2011), flux = FALSE) #Returns a data frame: change <- tableChangeSingle(eList, fluxUnit = 8, yearPoints=c(1980, 1995, 2011), flux = FALSE) #This returns flux values as a data frame: df <- tableChangeSingle(eList, fluxUnit = 8, yearPoints=c(1980, 1995, 2011), flux = TRUE) # Winter Concentration only: eList <- setPA(eList, paStart = 12, paLong = 3) df.winter <- tableChangeSingle(eList, fluxUnit = 8, yearPoints=c(1980, 1995, 2011), flux = FALSE)
eList <- Choptank_eList # Water Year: tableChange(eList, fluxUnit = 8, yearPoints = c(1980, 1995, 2011)) tableChange(eList, fluxUnit = 5) # Winter: eList <- setPA(eList, paStart = 12, paLong = 3) tableChange(eList, fluxUnit = 8, yearPoints = c(1980, 1995, 2011)) # Water Year: eList <- setPA(eList, paStart = 10, paLong = 12) #This returns concentration ASCII table in the console: tableChangeSingle(eList, fluxUnit = 8, yearPoints = c(1980, 1995, 2011), flux = FALSE) #Returns a data frame: change <- tableChangeSingle(eList, fluxUnit = 8, yearPoints=c(1980, 1995, 2011), flux = FALSE) #This returns flux values as a data frame: df <- tableChangeSingle(eList, fluxUnit = 8, yearPoints=c(1980, 1995, 2011), flux = TRUE) # Winter Concentration only: eList <- setPA(eList, paStart = 12, paLong = 3) df.winter <- tableChangeSingle(eList, fluxUnit = 8, yearPoints=c(1980, 1995, 2011), flux = FALSE)
Part of the flowHistory system.
Provides a measure of change (in real units and as percent per year)
based on the smoothed values for various streamflow statistics.
Smoothing algorithm is the same as is used in plotFlowSingle
.
tableFlowChange(eList, istat, qUnit = 1, runoff = FALSE, yearPoints = NA)
tableFlowChange(eList, istat, qUnit = 1, runoff = FALSE, yearPoints = NA)
eList |
named list with at least Daily and INFO dataframes |
istat |
A numeric value for the flow statistic to be graphed (possible values are 1 through 8) |
qUnit |
object of qUnit class |
runoff |
logical variable, if TRUE the streamflow data are converted to runoff values in mm/day |
yearPoints |
A vector of numeric values, specifying the years at which change metrics are to be calculated, default is NA (which allows the function to set these automatically), yearPoints must be in ascending order |
The index of the flow statistics is istat. These statistics are: (1) 1-day minimum, (2) 7-day minimum, (3) 30-day minimum, (4) median (5) mean, (6) 30-day maximum, (7) 7-day maximum, and (8) 1-day maximum.
Can also run the statistics on any Period of Analysis (individual months or sequence of months) using setPA
.
A dataframe is returned, as well as a printout in the R console.
eList <- Choptank_eList tableFlowChange(eList, istat = 5, yearPoints = c(1981, 1995, 2010)) eList <- setPA(eList, paStart = 4, paLong = 12) tableFlowChange(eList, istat = 2, qUnit = 2, yearPoints = c(1981, 1995, 2010)) eList <- setPA(eList, paStart = 9, paLong = 1) df <- tableFlowChange(eList, istat = 5, qUnit = 2, yearPoints = c(1981, 1995, 2010)) df
eList <- Choptank_eList tableFlowChange(eList, istat = 5, yearPoints = c(1981, 1995, 2010)) eList <- setPA(eList, paStart = 4, paLong = 12) tableFlowChange(eList, istat = 2, qUnit = 2, yearPoints = c(1981, 1995, 2010)) eList <- setPA(eList, paStart = 9, paLong = 1) df <- tableFlowChange(eList, istat = 5, qUnit = 2, yearPoints = c(1981, 1995, 2010)) df
Produce an ASCII table showing: year, mean discharge, mean concentration, flow-normalized concentration, mean flux, and flow-normalized flux. Note that the flux and flow-normalized flux are rates and not a mass. As such a value for some period shorter than a full year could be larger than the value for a full year.
tableResults(eList, qUnit = 2, fluxUnit = 9, localDaily = NA)
tableResults(eList, qUnit = 2, fluxUnit = 9, localDaily = NA)
eList |
named list with at least Daily and INFO dataframes |
qUnit |
object of qUnit class. |
fluxUnit |
object of fluxUnit class. |
localDaily |
data frame to override eList$Daily |
Can also procude a table for any Period of Analysis (individual months or sequence of months) using setPA
.
results dataframe, if returnDataFrame=TRUE
dataframe with year, discharge, concentration, flow-normalized concentration, flux, and flow-normalized concentration columns. If the eList was run through WRTDSKalman, an additional column generalized flux is included.
eList <- Choptank_eList # Water Year: tableResults(eList, fluxUnit = 8) df <- tableResults(eList, fluxUnit = 1) df # Spring: eList <- setPA(eList, paStart = 3, paLong = 3) tableResults(eList, fluxUnit = 1, qUnit = "cfs")
eList <- Choptank_eList # Water Year: tableResults(eList, fluxUnit = 8) df <- tableResults(eList, fluxUnit = 1) df # Spring: eList <- setPA(eList, paStart = 3, paLong = 3) tableResults(eList, fluxUnit = 1, qUnit = "cfs")
Computes the tricube weight function on a vector of distance values (d), based on a half-window width of h, and returns a vector of weights that range from zero to 1.
triCube(d, h)
triCube(d, h)
d |
numeric vector of distances from the point of estimation to the given sample value |
h |
numeric value, the half-window width, measured in the same units as d |
See Cleveland, W. S. (1979). Robust locally weighted regression and smoothing scatterplots, JASA, 74, 829-836
w numeric vector of weights, all 0<=w<=1
h<-10 d<-c(-11,-10,-5,-1,-0.01,0,5,9.9,10,20) triCube(d,h)
h<-10 d<-c(-11,-10,-5,-1,-0.01,0,5,9.9,10,20) triCube(d,h)
This function uses an autoregressive model to produce more accurate estimates of concentration and flux
WRTDSKalman(eList, rho = 0.9, niter = 200, seed = NA, verbose = TRUE)
WRTDSKalman(eList, rho = 0.9, niter = 200, seed = NA, verbose = TRUE)
eList |
named list with the INFO, Daily, and Sample dataframes and surfaces matrix |
rho |
numeric the lag one autocorrelation. Default is 0.9. |
niter |
number of iterations. Default is 200. |
seed |
integer value. Defaults to NA, which will not change the current seed. Setting the seed to any given value can be used to create repeatable output. |
verbose |
logical specifying whether or not to display progress message |
This function takes an existing eList Including the estimated model (the surfaces object in the eList) And produces the daily WRTDSKalman estimates of concentration and flux These generated estimates are called genConc and genFlux
eList <- Choptank_eList eList <- WRTDSKalman(eList, niter = 10) summary(eList$Daily) #All flux values in AnnualResults are expressed as a rate in kg/day AnnualResults <- setupYears(eList$Daily) head(AnnualResults)
eList <- Choptank_eList eList <- WRTDSKalman(eList, niter = 10) summary(eList$Daily) #All flux values in AnnualResults are expressed as a rate in kg/day AnnualResults <- setupYears(eList$Daily) head(AnnualResults)
Axis tick marks that run from zero to some specified maximum, creates about 4 to 8 ticks marks.
yPretty(yMax)
yPretty(yMax)
yMax |
A numeric value for the maximum value to be plotted, it must be >0 |
yTicks A numeric vector representing the values for each of the tick marks
yTicks <- yPretty(7.8) yTicks <- yPretty(125)
yTicks <- yPretty(7.8) yTicks <- yPretty(125)