Skip to content

Updating predicted classes after calibrating probabilities doesn't work for non-syntactic levels #145

@dchiu911

Description

@dchiu911

Using cal_apply() with pred_class doesn't work if the factor levels use non-syntactic levels which need to be wrapped in backticks.

library(probably)
#> 
#> Attaching package: 'probably'
#> The following objects are masked from 'package:base':
#> 
#>     as.factor, as.ordered
library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union
library(forcats)

seg1 <- segment_logistic %>%
  mutate(.pred_class = ifelse(.pred_poor >= 0.5, "poor", "good"))
calib1 <- cal_estimate_isotonic(seg1, Class)
cal_apply(seg1, calib1, pred_class = .pred_class)
#> # A tibble: 1,010 × 4
#>    .pred_poor .pred_good Class .pred_class
#>         <dbl>      <dbl> <fct> <fct>      
#>  1      1         0      poor  poor       
#>  2      0.946     0.0538 poor  poor       
#>  3      0.254     0.746  good  good       
#>  4      0.254     0.746  good  good       
#>  5      1         0      poor  poor       
#>  6      0.667     0.333  good  poor       
#>  7      0.919     0.0815 good  poor       
#>  8      0         1      good  good       
#>  9      1         0      poor  poor       
#> 10      0.919     0.0815 poor  poor       
#> # ℹ 1,000 more rows

seg2 <- segment_logistic %>%
  rename_with(~ paste0(.x, "-1"), matches(".pred")) %>%
  mutate(
    Class = fct_relabel(Class, ~ paste0(.x, "-1")),
    .pred_class = ifelse(`.pred_poor-1` >= 0.5, "poor-1", "good-1")
  )
calib2 <- cal_estimate_isotonic(seg2, Class)
cal_apply(seg2, calib2, pred_class = .pred_class)
#> Error in `res[, col_names]`:
#> ! Can't subset columns that don't exist.
#> ✖ Column `\`.pred_poor-1\`` doesn't exist.

Created on 2024-05-17 by the reprex package (v0.3.0)

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugan unexpected problem or unintended behavior

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions