R: Convert Ordinal Factors to Numeric Scores

step_ordinalscore {recipes} | R Documentation

## Convert Ordinal Factors to Numeric Scores

### Description

`step_ordinalscore` creates a specification of a recipe step that will convert ordinal factor variables into numeric scores.

### Usage

    step_ordinalscore(recipe, ..., role = NA, trained = FALSE, columns = NULL,
      convert = as.numeric, skip = FALSE)

    ## S3 method for class 'step_ordinalscore'
    tidy(x, ...)

### Arguments

`recipe` | A recipe object. The step will be added to the sequence of operations for this recipe.
`...` | One or more selector functions to choose which variables are affected by the step. See `selections()` for more details. For the `tidy` method, these are not currently used.
`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.
`columns` | A character string of variables that will be converted. This is `NULL` until computed by `prep.recipe()`.
`convert` | A function that takes an ordinal factor vector as an input and outputs a single numeric variable.
`skip` | A logical. Should the step be skipped when the recipe is baked by `bake.recipe()`? While all operations are baked when `prep.recipe()` is run, some operations may not be able to be conducted on new data (e.g. processing the outcome variable(s)). Care should be taken when using `skip = TRUE` as it may affect the computations for subsequent operations
`x` | A `step_ordinalscore` object.

### Details

Dummy variables from ordered factors with `C` levels will create polynomial basis functions with `C-1` terms. As an alternative, this step can be used to translate the ordered levels into a single numeric vector of values that represent (subjective) scores. By default, the translation uses a linear scale (1, 2, 3, ... `C`) but custom score functions can also be used (see the example below).

### Value

An updated version of `recipe` with the new step added to the sequence of existing steps (if any). For the `tidy` method, a tibble with columns `terms` (the columns that will be affected).

### Examples

    fail_lvls <- c("meh", "annoying", "really_bad")

    ord_data <-
      data.frame(item = c("paperclip", "twitter", "airbag"),
                 fail_severity = factor(fail_lvls,
                                        levels = fail_lvls,
                                        ordered = TRUE))

    model.matrix(~fail_severity, data = ord_data)

    linear_values <- recipe(~ item + fail_severity, data = ord_data) %>%
      step_dummy(item) %>%
      step_ordinalscore(fail_severity)

    linear_values <- prep(linear_values, training = ord_data, retain = TRUE)

    juice(linear_values, everything())

    custom <- function(x) {
      new_values <- c(1, 3, 7)
      new_values[as.numeric(x)]
    }

    nonlin_scores <- recipe(~ item + fail_severity, data = ord_data) %>%
      step_dummy(item) %>%
      step_ordinalscore(fail_severity, convert = custom)

    tidy(nonlin_scores, number = 2)

    nonlin_scores <- prep(nonlin_scores, training = ord_data, retain = TRUE)

    juice(nonlin_scores, everything())

    tidy(nonlin_scores, number = 2)

[Package recipes version 0.1.2 Index]