Skip to contents

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 class measure_list) will be processed.

degree

Polynomial degree for trend fitting. Default is 1 (linear detrending). Use 0 to 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 effects

  • Offset removal (degree = 0): Centers each spectrum at zero mean

  • Curved 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.

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()