This function calls other functions to smooth growth curve data

## Arguments

- ...
Arguments passed to

`stats::loess`

,`mgcv::gam`

,`moving_average`

,`moving_median`

, or`stats::smooth.spline`

. Typically includes tuning parameter(s), which in some cases are required. See Details for more information.- x
An (often optional) vector of predictor values to smooth along (e.g. time)

- y
A vector of response values to be smoothed (e.g. density). If NULL,

`formula`

and`data`

*must* be provided via`...`

- sm_method
Argument specifying which smoothing method should be used to smooth data. Options include "moving-average", "moving-median", "loess", "gam", and "smooth.spline".

- subset_by
An optional vector as long as

`y`

.`y`

will be split by the unique values of this vector and the derivative for each group will be calculated independently of the others.This provides an internally-implemented approach similar to

`dplyr::group_by`

and`dplyr::mutate`

- return_fitobject
logical indicating whether entire object returned by fitting function should be returned. If FALSE, just fitted values are returned.

## Value

If `return_fitobject == FALSE:`

A vector, the same length as `y`

, with the now-smoothed y values

If `return_fitobject == TRUE:`

A list the same length as unique(subset_by) where each element is an object of the same class as returned by the smoothing method (typically a named list-like object)

## Details

For `moving_average`

and `moving_median`

,
passing `window_width`

or `window_width_n`

via
`...`

is required. `window_width`

sets the width
of the moving window in units of `x`

, while
`window_width_n`

sets the width in units of number
of data points. Larger values for either will produce more
"smoothed" data.

For `loess`

, the `span`

argument sets the fraction of
data points that should be included in each calculation. It's
typically best to specify, since the default of 0.75 is often
too large for growth curves data. Larger values of `span`

will produce more more "smoothed" data

For `gam`

, both arguments to `gam`

and `s`

can
be provided via `...`

. Most frequently, the `k`

argument to `s`

sets the number of "knots" the
spline-fitting can use. Smaller values will be more "smoothed".

When using `sm_method = "gam"`

, advanced users may also modify
other parameters of `s()`

, including the smoothing basis
`bs`

. These bases can be thin plate (`bs = "tp"`

,
the default), cubic regressions (`bs = "cr"`

), or many other
options (see `?mcgv::s`

). I recommend leaving the default
thin plate regressions, whose main drawback is that they are
computationally intensive to calculate. For growth curves data,
this is unlikely to be relevant.

As an alternative to passing `y`

, for more advanced needs
with `loess`

or `gam`

, `formula`

and `data`

can be passed to `smooth_data`

via the `...`

argument
(in lieu of `y`

).

In this case, the formula should specify the response (e.g. density)
and predictors. For `gam`

smoothing, the formula should
typically be of the format: y ~ s(x), which uses
`mgcv::s`

to smooth the data. The data argument should be a
`data.frame`

containing the variables in the formula.
In such cases, `subset_by`

can still be specified as a vector
with length `nrow(data)`