Perform GAM analysis. Relies on mgcv::gam to perform general additive model.
`gam`

The baseDay function has been added to this package from the smwrBase package.

```
gamTest(
df,
dep,
stat,
layer = NA,
analySpec,
gamTable = TRUE,
gamPlot = 10,
gamDiffModel = NA,
flow.detrended = NA,
salinity.detrended = NA
)
```

- df
data frame

- dep
dependent variable

- stat
station

- layer
layer

- analySpec
analytical specifications

- gamTable
gam table setting (set to FALSE to turn off table output)

- gamPlot
gam plot setting (set to FALSE to turn off plotting)

- gamDiffModel
GAM model(s) used for computing differences on sub-annual/multi-period basis

- flow.detrended
data generated by detrended.flow. Default = NA.

- salinity.detrended
data generated by detrended.flow. Default = NA.

Returns a list with results

**stat.gam.result --**Data frame with summary results in a tabular format suitable for output to a csv file**chng.gam.result --**Data frame with estimate of change for sub-annual differences based on the settings specified in`gamDiffModel`

. Includes all data from stat.gam.result and sub-annual estimates of change in a tabular format suitable for output to a csv file.**data --**Data frame of data used in analysis (for example years with large proportion of censored data might be removed from the analysis and not included in this data frame)**data.all --**Data frame of all potential data available for analysis**iSpec --**List of baytrends analysis settings used for a specific analysis of station and parameter**gamOutput0 --**Results including model predictions for gam formula 0 (i.e., gam0)**gamOutput1 --**Results including model predictions for gam formula 1 (i.e., gam1)**gamOutput2 --**Results including model predictions for gam formula 2 (i.e., gam2)**gamOutput3 --**Results including model predictions for gam formula 3 (i.e., gam3)**gamOutput4 --**Results including model predictions for gam formula 4 (i.e., gam4)**gamOutput5 --**Results including model predictions for gam formula 5 (i.e., gam5)**gamOutput6 --**Results including model predictions for gam formula 6 (i.e., gam6)

**gamOutput* --** For each evaluated model, `gamOutput*`

(see above
element list) is a list with the following elements:

**gamOption --**gam formula ID, i.e., 0, 1, 2, 3, 4 , 5, 6 corresponding to gam0, gam1, gam2, etc.**gamRslt --**mgcv::gam output**gamRsltSum --**"summary" of mgcv::gam, i.e., summary(mgcv::gam)**gamANOVAtbl --**GAM Analysis of Variance table**gamCoefftbl --**GAM Parameter Coefficients table**gamDiagnostics --**GAM Diagnostics table(AIC, RMSE, and Adj. R-squared)**perChange --**Estimates of Change table**porDiff.regular --**Estimate of change in list format**porDiff.adjusted --**Estimate of change adjusted for interventions in list format**predictions --**Data frame of gam predictions (all information used to create baytrends graphics excluding measurements)

Set `gamPlot=FALSE`

to turn off plotting. Computing the information
("predictions") to create plots is one of the more time consumings aspects of
the `gamTest`

function. Setting `gamPlot=FALSE`

turns off these
computations and speeds up `gamTest`

. The disadvantage is that no
predictions are returned; however, the tabularized results stored in
`stat.gam.result`

and, if requested, `chng.gam.result`

are still
returned.

Setting `gamPlot`

to a value between 1-30 changes the resolution of the
resulting figure by setting the interval on which the prediction data set is
made. By default `gamPlot`

is set to 10. That is, a prediction is made
every 10th day, or about 36 predictions per year. Values closer to 1 result
in larger returned prediction data sets and take more computation time.
Values closer to 30 result in smaller returned data sets and take less
computation time. Although there is no change in the fitted model, values
closer to 30 may have slight degraded figure quality if there is subtantial
seasonality in the fitted model since the seasonal minimum and maximum might
not be included in the prediction data set and therefore not plotted. Values
greater than 30 are treated as 30. Setting `gamPlot=30`

might be
advantangeous when the analysis only requires cursory figure examination.

Setting `gamTable=FALSE`

will turn off table output to the console. This
may be advantageous to reduce the amount of output. Since these computations
do not significantly affect `gamTest`

run time, the standard Analysis of
Variance, GAM Parameter Coefficients, Diagnostics, and Estimates of Change
tables are returned from `gamTest`

regardless of the `gamTable`

setting. Many of the values from these tables are also returned as part of
tabularized `stat.gam.result`

.

The default settings for `gamDiffModel`

(i.e., `gamDiffModel=NA`

)
will not result in sub-annual (i.e., seasonal) differences being computed. In
this default setting, the returned `chng.gam.result`

that is returned
from `gamTest`

will be empty. If `gamDiffModel`

is a value (i.e.,
not `NA`

), then `chng.gam.result`

will include one row for each
combination of years specified in `analySpec$gamDiffPeriods`

, seasons
specified in `analySpec$gamDiffSeason`

, and the number of models listed
in `gamDiffModel`

. For example `gamDiffModel=c(0,1,2)`

would
result in sub-annual being computed for gam0, gam1, and gam2.

**Flow and Salinity Adjustments (gam4).** It is necessary to create and
pass properly formatted data via the `flow.detrended`

and
`salinity.detrended`

arguments to evaluate gam4 models. See
`detrended.flow`

and `detrended.salinity`

for more
information on how to create properly formatted data.

```
if (FALSE) {
# Specify parameter and station to analyze
dep <- 'do'
stat <- 'CB5.4'
layer <- 'B'
# Prepare data and set up specifications for analysis
dfr <- analysisOrganizeData (dataCensored)
df <- dfr[[1]]
analySpec <- dfr[[2]]
# Apply gamTest
gamResult <- gamTest(df, dep, stat, layer, analySpec=analySpec)
gamPlotDisp(gamResult = gamResult, analySpec = analySpec,
fullModel = 2, seasAvgModel = 2, seasonalModel = 2,
diffType = "regular", obserPlot = TRUE, interventionPlot = TRUE,
seasAvgPlot = TRUE, seasAvgConfIntPlot = FALSE,
seasAvgSigPlot = FALSE, fullModelPlot = TRUE, seasModelPlot = TRUE,
BaseCurrentMeanPlot = FALSE, adjustedPlot = FALSE)
# Apply gamTestSeason
gamResult2 <- gamTestSeason(df, dep, stat, layer, analySpec=analySpec,
gamSeasonPlot = c("7/15-8/15", "purple", "range"))
gamPlotDispSeason(gamResult = gamResult2, analySpec = analySpec,
fullModel = 2, seasAvgModel = 2, seasonalModel = 2,
diffType = "regular", obserPlot = TRUE, interventionPlot = TRUE,
seasAvgPlot = TRUE, seasAvgConfIntPlot = FALSE,
seasAvgSigPlot = FALSE, fullModelPlot = FALSE, seasModelPlot = FALSE,
BaseCurrentMeanPlot = TRUE, adjustedPlot = FALSE, gamSeasonFocus = TRUE)
}
```