step_measure_detrend() creates a specification of a recipe step that
removes a polynomial trend from measurement data. This is useful for
removing drift, offset, or slowly varying background effects.
Usage
step_measure_detrend(
recipe,
measures = NULL,
degree = 1L,
role = NA,
trained = FALSE,
skip = FALSE,
id = recipes::rand_id("measure_detrend")
)Arguments
- recipe
A recipe object. The step will be added to the sequence of operations for this recipe.
- measures
An optional character vector of measure column names to process. If
NULL(the default), all measure columns (columns with classmeasure_list) will be processed.- degree
Polynomial degree for trend fitting. Default is
1(linear detrending). Use0to remove only the mean (centering).- role
Not used by this step since no new variables are created.
- trained
A logical to indicate if the quantities for preprocessing have been estimated.
- skip
A logical. Should the step be skipped when the recipe is baked?
- id
A character string that is unique to this step to identify it.
Value
An updated version of recipe with the new step added to the
sequence of any existing operations.
Details
Detrending removes a polynomial trend from each spectrum. This is simpler than baseline correction methods like ALS or robust fitting, but effective for:
Linear drift (
degree = 1): Instrumental drift, temperature effectsOffset removal (
degree = 0): Centers each spectrum at zero meanCurved trends (
degree = 2+): Gradual curvature from scattering
Unlike step_measure_baseline_poly(), detrending fits the polynomial to
ALL points without iterative peak exclusion. This makes it faster and
appropriate when:
The trend is the dominant feature (not peaks)
You want to preserve peak structure while removing background
Processing time-series or process data with drift
No selectors should be supplied to this step function. The data should be
in the internal format produced by step_measure_input_wide() or
step_measure_input_long().
Tidying
When you tidy() this step, a tibble with columns
terms, degree, and id is returned.
See also
step_measure_baseline_poly() for baseline correction with peak
exclusion.
Other measure-baseline:
step_measure_baseline_airpls(),
step_measure_baseline_als(),
step_measure_baseline_arpls(),
step_measure_baseline_auto(),
step_measure_baseline_custom(),
step_measure_baseline_gpc(),
step_measure_baseline_minima(),
step_measure_baseline_morph(),
step_measure_baseline_poly(),
step_measure_baseline_py(),
step_measure_baseline_rf(),
step_measure_baseline_rolling(),
step_measure_baseline_snip(),
step_measure_baseline_tophat()
Examples
library(recipes)
# Linear detrending
rec <- recipe(water + fat + protein ~ ., data = meats_long) |>
update_role(id, new_role = "id") |>
step_measure_input_long(transmittance, location = vars(channel)) |>
step_measure_detrend(degree = 1) |>
prep()
bake(rec, new_data = NULL)
#> # A tibble: 215 × 5
#> id water fat protein .measures
#> <int> <dbl> <dbl> <dbl> <meas>
#> 1 1 60.5 22.5 16.7 [100 × 2]
#> 2 2 46 40.1 13.5 [100 × 2]
#> 3 3 71 8.4 20.5 [100 × 2]
#> 4 4 72.8 5.9 20.7 [100 × 2]
#> 5 5 58.3 25.5 15.5 [100 × 2]
#> 6 6 44 42.7 13.7 [100 × 2]
#> 7 7 44 42.7 13.7 [100 × 2]
#> 8 8 69.3 10.6 19.3 [100 × 2]
#> 9 9 61.4 19.9 17.7 [100 × 2]
#> 10 10 61.4 19.9 17.7 [100 × 2]
#> # ℹ 205 more rows
# Mean centering only (degree = 0)
rec2 <- recipe(water + fat + protein ~ ., data = meats_long) |>
update_role(id, new_role = "id") |>
step_measure_input_long(transmittance, location = vars(channel)) |>
step_measure_detrend(degree = 0) |>
prep()