Skip to contents

Screeners work off of the principle that they should take the same arguments that a learner does and return a modified dataset and formula in which variables that have failed to meet some threshold have been screened out.

Value

Screener functions have the same structure: call them with (data, formula, ...) and optionally any threshold arguments, then they return a list with $formula (the screened formula, retaining only predictors that passed), $data (the correspondingly screened data), and, when any predictors were screened out, $failed_to_pass_threshold (their names).

Details

A screener can be added to a learner by using the add_screener(learner, screener) function provided. This returns a modified learner that implements screening based on the data and formula passed.

So far, the screeners implemented rely on being able to call model.matrix and therefore only support standard (generalized) linear model syntax like those mentioned in ?formula.

See also

screener_cor, screener_cor_top_n, screener_t_test, add_screener

Examples

# examples for setting up a screened regression problem:
#
# users can just run a screener to see what data and formula terms pass the
# given screener conditions:

screened_regression_problem <- screener_cor(
  data = mtcars,
  formula = mpg ~ ., threshold = 0.5
)
screened_regression_problem
#> $data
#>                      mpg cyl  disp  hp drat    wt vs am carb
#> Mazda RX4           21.0   6 160.0 110 3.90 2.620  0  1    4
#> Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875  0  1    4
#> Datsun 710          22.8   4 108.0  93 3.85 2.320  1  1    1
#> Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215  1  0    1
#> Hornet Sportabout   18.7   8 360.0 175 3.15 3.440  0  0    2
#> Valiant             18.1   6 225.0 105 2.76 3.460  1  0    1
#> Duster 360          14.3   8 360.0 245 3.21 3.570  0  0    4
#> Merc 240D           24.4   4 146.7  62 3.69 3.190  1  0    2
#> Merc 230            22.8   4 140.8  95 3.92 3.150  1  0    2
#> Merc 280            19.2   6 167.6 123 3.92 3.440  1  0    4
#> Merc 280C           17.8   6 167.6 123 3.92 3.440  1  0    4
#> Merc 450SE          16.4   8 275.8 180 3.07 4.070  0  0    3
#> Merc 450SL          17.3   8 275.8 180 3.07 3.730  0  0    3
#> Merc 450SLC         15.2   8 275.8 180 3.07 3.780  0  0    3
#> Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250  0  0    4
#> Lincoln Continental 10.4   8 460.0 215 3.00 5.424  0  0    4
#> Chrysler Imperial   14.7   8 440.0 230 3.23 5.345  0  0    4
#> Fiat 128            32.4   4  78.7  66 4.08 2.200  1  1    1
#> Honda Civic         30.4   4  75.7  52 4.93 1.615  1  1    2
#> Toyota Corolla      33.9   4  71.1  65 4.22 1.835  1  1    1
#> Toyota Corona       21.5   4 120.1  97 3.70 2.465  1  0    1
#> Dodge Challenger    15.5   8 318.0 150 2.76 3.520  0  0    2
#> AMC Javelin         15.2   8 304.0 150 3.15 3.435  0  0    2
#> Camaro Z28          13.3   8 350.0 245 3.73 3.840  0  0    4
#> Pontiac Firebird    19.2   8 400.0 175 3.08 3.845  0  0    2
#> Fiat X1-9           27.3   4  79.0  66 4.08 1.935  1  1    1
#> Porsche 914-2       26.0   4 120.3  91 4.43 2.140  0  1    2
#> Lotus Europa        30.4   4  95.1 113 3.77 1.513  1  1    2
#> Ford Pantera L      15.8   8 351.0 264 4.22 3.170  0  1    4
#> Ferrari Dino        19.7   6 145.0 175 3.62 2.770  0  1    6
#> Maserati Bora       15.0   8 301.0 335 3.54 3.570  0  1    8
#> Volvo 142E          21.4   4 121.0 109 4.11 2.780  1  1    2
#> 
#> $formula
#> mpg ~ cyl + disp + hp + drat + wt + vs + am + carb
#> <environment: 0x32b3e83d0>
#> 
#> $failed_to_correlate_names
#> [1] "qsec" "gear"
#> 

screened_regression_problem2 <- screener_cor(
  data = mtcars,
  formula = mpg ~ ., threshold = 0.5, cor... = list(method = "spearman")
)
screened_regression_problem2
#> $data
#>                      mpg cyl  disp  hp drat    wt vs am gear carb
#> Mazda RX4           21.0   6 160.0 110 3.90 2.620  0  1    4    4
#> Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875  0  1    4    4
#> Datsun 710          22.8   4 108.0  93 3.85 2.320  1  1    4    1
#> Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215  1  0    3    1
#> Hornet Sportabout   18.7   8 360.0 175 3.15 3.440  0  0    3    2
#> Valiant             18.1   6 225.0 105 2.76 3.460  1  0    3    1
#> Duster 360          14.3   8 360.0 245 3.21 3.570  0  0    3    4
#> Merc 240D           24.4   4 146.7  62 3.69 3.190  1  0    4    2
#> Merc 230            22.8   4 140.8  95 3.92 3.150  1  0    4    2
#> Merc 280            19.2   6 167.6 123 3.92 3.440  1  0    4    4
#> Merc 280C           17.8   6 167.6 123 3.92 3.440  1  0    4    4
#> Merc 450SE          16.4   8 275.8 180 3.07 4.070  0  0    3    3
#> Merc 450SL          17.3   8 275.8 180 3.07 3.730  0  0    3    3
#> Merc 450SLC         15.2   8 275.8 180 3.07 3.780  0  0    3    3
#> Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250  0  0    3    4
#> Lincoln Continental 10.4   8 460.0 215 3.00 5.424  0  0    3    4
#> Chrysler Imperial   14.7   8 440.0 230 3.23 5.345  0  0    3    4
#> Fiat 128            32.4   4  78.7  66 4.08 2.200  1  1    4    1
#> Honda Civic         30.4   4  75.7  52 4.93 1.615  1  1    4    2
#> Toyota Corolla      33.9   4  71.1  65 4.22 1.835  1  1    4    1
#> Toyota Corona       21.5   4 120.1  97 3.70 2.465  1  0    3    1
#> Dodge Challenger    15.5   8 318.0 150 2.76 3.520  0  0    3    2
#> AMC Javelin         15.2   8 304.0 150 3.15 3.435  0  0    3    2
#> Camaro Z28          13.3   8 350.0 245 3.73 3.840  0  0    3    4
#> Pontiac Firebird    19.2   8 400.0 175 3.08 3.845  0  0    3    2
#> Fiat X1-9           27.3   4  79.0  66 4.08 1.935  1  1    4    1
#> Porsche 914-2       26.0   4 120.3  91 4.43 2.140  0  1    5    2
#> Lotus Europa        30.4   4  95.1 113 3.77 1.513  1  1    5    2
#> Ford Pantera L      15.8   8 351.0 264 4.22 3.170  0  1    5    4
#> Ferrari Dino        19.7   6 145.0 175 3.62 2.770  0  1    5    6
#> Maserati Bora       15.0   8 301.0 335 3.54 3.570  0  1    5    8
#> Volvo 142E          21.4   4 121.0 109 4.11 2.780  1  1    4    2
#> 
#> $formula
#> mpg ~ cyl + disp + hp + drat + wt + vs + am + gear + carb
#> <environment: 0x32752af98>
#> 
#> $failed_to_correlate_names
#> [1] "qsec"
#> 

screened_regression_problem3 <- screener_t_test(
  data = mtcars,
  formula = mpg ~ ., t_statistic_threshold = 10
)
screened_regression_problem3
#> $data
#>                      mpg
#> Mazda RX4           21.0
#> Mazda RX4 Wag       21.0
#> Datsun 710          22.8
#> Hornet 4 Drive      21.4
#> Hornet Sportabout   18.7
#> Valiant             18.1
#> Duster 360          14.3
#> Merc 240D           24.4
#> Merc 230            22.8
#> Merc 280            19.2
#> Merc 280C           17.8
#> Merc 450SE          16.4
#> Merc 450SL          17.3
#> Merc 450SLC         15.2
#> Cadillac Fleetwood  10.4
#> Lincoln Continental 10.4
#> Chrysler Imperial   14.7
#> Fiat 128            32.4
#> Honda Civic         30.4
#> Toyota Corolla      33.9
#> Toyota Corona       21.5
#> Dodge Challenger    15.5
#> AMC Javelin         15.2
#> Camaro Z28          13.3
#> Pontiac Firebird    19.2
#> Fiat X1-9           27.3
#> Porsche 914-2       26.0
#> Lotus Europa        30.4
#> Ford Pantera L      15.8
#> Ferrari Dino        19.7
#> Maserati Bora       15.0
#> Volvo 142E          21.4
#> 
#> $formula
#> mpg ~ cyl + disp + hp + drat + wt + qsec + vs + am + gear + carb
#> <environment: 0x327451f78>
#> 
#> $failed_to_pass_threshold
#>  [1] "cyl"  "disp" "hp"   "drat" "wt"   "qsec" "vs"   "am"   "gear" "carb"
#> 

# build a new learner with screening builtin:
lnr_rf_screener_top_5_cor_terms <- add_screener(
  learner = lnr_rf,
  screener = screener_cor_top_n,
  screener_extra_args = list(
    cor... = list(method = "spearman"),
    keep_n_terms = 5
  )
)

# train learner
trained_learner <- lnr_rf_screener_top_5_cor_terms(data = mtcars, formula = mpg ~ .)
mtcars_modified <- mtcars
mtcars_modified["gear"] <- 1 # gear is one of the least correlated variables with mpg
identical(trained_learner(mtcars), trained_learner(mtcars_modified))
#> [1] TRUE