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